From 8a1b31e0bae26ca98f2ea637a71b6c5c7ce60b28 Mon Sep 17 00:00:00 2001 From: PP Date: Wed, 21 Sep 2022 14:50:03 +0800 Subject: [PATCH 001/829] support Taobao platform (#12819) * add taobao adapter * add TAOBAO platform * add templates update templates * fix: readJsonSync can't work on Taobao platform add TODO * fix: update import-map * fix: ban splash screen on Taobao platform * fix: adapt image loading * fix: MINIGAME on Taobao platform * update constant manager * optimize: skip splash screen on Taobao * fix: @ separator on Taobao platform * Revert "fix: @ separator on Taobao platform" This reverts commit 18903291807ef3263c27a90ad67753da7e531142. * fix: @ * fix: undefined canvas.addEventListener * fix: minigame.isDevTool * fix: createCanvas on canvasOnReady hook * optimize: event register * optimize: onCanvasCreated name --- cc.config.json | 8 +- cocos/core/game.ts | 2 +- cocos/core/settings.ts | 24 +- cocos/core/splash-screen.ts | 5 +- cocos/core/utils/decode-uuid.ts | 6 +- pal/env/minigame/env.ts | 6 +- pal/minigame/taobao.ts | 112 ++++++++ pal/system-info/enum-type/platform.ts | 1 + pal/system-info/minigame/system-info.ts | 4 +- .../minigame/common/engine/AssetManager.js | 9 +- .../platforms/taobao/wrapper/builtin/Audio.js | 205 ++++++++++++++ .../taobao/wrapper/builtin/Canvas.js | 69 +++++ .../taobao/wrapper/builtin/Element.js | 10 + .../platforms/taobao/wrapper/builtin/Event.js | 14 + .../taobao/wrapper/builtin/EventTarget.js | 57 ++++ .../wrapper/builtin/HTMLAudioElement.js | 7 + .../wrapper/builtin/HTMLCanvasElement.js | 3 + .../taobao/wrapper/builtin/HTMLElement.js | 54 ++++ .../wrapper/builtin/HTMLImageElement.js | 4 + .../platforms/taobao/wrapper/builtin/Image.js | 40 +++ .../taobao/wrapper/builtin/ImageBitmap.js | 5 + .../platforms/taobao/wrapper/builtin/Node.js | 34 +++ .../wrapper/builtin/WebGLRenderingContext.js | 5 + .../taobao/wrapper/builtin/WebSocket.js | 87 ++++++ .../wrapper/builtin/WindowProperties.js | 31 +++ .../taobao/wrapper/builtin/XMLHttpRequest.js | 172 ++++++++++++ .../wrapper/builtin/cancelAnimationFrame.js | 4 + .../taobao/wrapper/builtin/document.js | 124 +++++++++ .../platforms/taobao/wrapper/builtin/index.js | 64 +++++ .../taobao/wrapper/builtin/localStorage.js | 37 +++ .../taobao/wrapper/builtin/location.js | 7 + .../taobao/wrapper/builtin/navigator.js | 38 +++ .../wrapper/builtin/requestAnimationFrame.js | 4 + .../taobao/wrapper/builtin/util/index.js | 1 + .../taobao/wrapper/builtin/window.js | 15 + .../taobao/wrapper/engine/AssetManager.js | 44 +++ .../platforms/taobao/wrapper/engine/index.js | 3 + .../platforms/taobao/wrapper/fs-utils.js | 262 ++++++++++++++++++ .../platforms/taobao/wrapper/unify.js | 151 ++++++++++ .../platforms/taobao/wrapper/utils.js | 16 ++ scripts/build-engine/src/constant-manager.ts | 2 +- templates/taobao-creative-app/app.acss | 5 + templates/taobao-creative-app/app.ejs | 44 +++ templates/taobao-creative-app/app.json | 11 + .../taobao-creative-app/mini.project.json | 9 + .../pages/index/index.axml | 12 + .../taobao-creative-app/pages/index/index.js | 39 +++ .../pages/index/index.json | 1 + 48 files changed, 1849 insertions(+), 18 deletions(-) create mode 100644 pal/minigame/taobao.ts create mode 100644 platforms/minigame/platforms/taobao/wrapper/builtin/Audio.js create mode 100644 platforms/minigame/platforms/taobao/wrapper/builtin/Canvas.js create mode 100644 platforms/minigame/platforms/taobao/wrapper/builtin/Element.js create mode 100644 platforms/minigame/platforms/taobao/wrapper/builtin/Event.js create mode 100644 platforms/minigame/platforms/taobao/wrapper/builtin/EventTarget.js create mode 100644 platforms/minigame/platforms/taobao/wrapper/builtin/HTMLAudioElement.js create mode 100644 platforms/minigame/platforms/taobao/wrapper/builtin/HTMLCanvasElement.js create mode 100644 platforms/minigame/platforms/taobao/wrapper/builtin/HTMLElement.js create mode 100644 platforms/minigame/platforms/taobao/wrapper/builtin/HTMLImageElement.js create mode 100644 platforms/minigame/platforms/taobao/wrapper/builtin/Image.js create mode 100644 platforms/minigame/platforms/taobao/wrapper/builtin/ImageBitmap.js create mode 100644 platforms/minigame/platforms/taobao/wrapper/builtin/Node.js create mode 100644 platforms/minigame/platforms/taobao/wrapper/builtin/WebGLRenderingContext.js create mode 100644 platforms/minigame/platforms/taobao/wrapper/builtin/WebSocket.js create mode 100644 platforms/minigame/platforms/taobao/wrapper/builtin/WindowProperties.js create mode 100644 platforms/minigame/platforms/taobao/wrapper/builtin/XMLHttpRequest.js create mode 100644 platforms/minigame/platforms/taobao/wrapper/builtin/cancelAnimationFrame.js create mode 100644 platforms/minigame/platforms/taobao/wrapper/builtin/document.js create mode 100644 platforms/minigame/platforms/taobao/wrapper/builtin/index.js create mode 100644 platforms/minigame/platforms/taobao/wrapper/builtin/localStorage.js create mode 100644 platforms/minigame/platforms/taobao/wrapper/builtin/location.js create mode 100644 platforms/minigame/platforms/taobao/wrapper/builtin/navigator.js create mode 100644 platforms/minigame/platforms/taobao/wrapper/builtin/requestAnimationFrame.js create mode 100644 platforms/minigame/platforms/taobao/wrapper/builtin/util/index.js create mode 100644 platforms/minigame/platforms/taobao/wrapper/builtin/window.js create mode 100644 platforms/minigame/platforms/taobao/wrapper/engine/AssetManager.js create mode 100644 platforms/minigame/platforms/taobao/wrapper/engine/index.js create mode 100644 platforms/minigame/platforms/taobao/wrapper/fs-utils.js create mode 100644 platforms/minigame/platforms/taobao/wrapper/unify.js create mode 100644 platforms/minigame/platforms/taobao/wrapper/utils.js create mode 100644 templates/taobao-creative-app/app.acss create mode 100644 templates/taobao-creative-app/app.ejs create mode 100644 templates/taobao-creative-app/app.json create mode 100644 templates/taobao-creative-app/mini.project.json create mode 100644 templates/taobao-creative-app/pages/index/index.axml create mode 100644 templates/taobao-creative-app/pages/index/index.js create mode 100644 templates/taobao-creative-app/pages/index/index.json diff --git a/cc.config.json b/cc.config.json index 97e542bf08a..8f8bca4e64e 100644 --- a/cc.config.json +++ b/cc.config.json @@ -319,6 +319,12 @@ "ccGlobal": true, "internal": false }, + "TAOBAO": { + "comment": "Running in the taobao creative app.", + "type": "boolean", + "value": false, + "internal": false + }, "BYTEDANCE": { "comment": "Running in the ByteDance's mini game.", "type": "boolean", @@ -428,7 +434,7 @@ "MINIGAME": { "comment": "Running in mini game.", "type": "boolean", - "value": "$WECHAT || $BAIDU || $XIAOMI || $ALIPAY || $BYTEDANCE", + "value": "$WECHAT || $BAIDU || $XIAOMI || $ALIPAY || $TAOBAO || $BYTEDANCE", "ccGlobal": true, "internal": false }, diff --git a/cocos/core/game.ts b/cocos/core/game.ts index 5a1fba10fd7..f64382750d3 100644 --- a/cocos/core/game.ts +++ b/cocos/core/game.ts @@ -24,7 +24,7 @@ THE SOFTWARE. */ -import { BUILD, DEBUG, EDITOR, HTML5, JSB, NATIVE, PREVIEW, RUNTIME_BASED, TEST } from 'internal:constants'; +import { BUILD, DEBUG, EDITOR, HTML5, JSB, NATIVE, PREVIEW, RUNTIME_BASED, TAOBAO, TEST } from 'internal:constants'; import { systemInfo } from 'pal/system-info'; import { findCanvas, loadJsFile } from 'pal/env'; import { Pacer } from 'pal/pacer'; diff --git a/cocos/core/settings.ts b/cocos/core/settings.ts index cc397149b42..7c04769ff3f 100644 --- a/cocos/core/settings.ts +++ b/cocos/core/settings.ts @@ -22,7 +22,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -import { HTML5 } from 'internal:constants'; +import { HTML5, TAOBAO } from 'internal:constants'; import { legacyCC } from './global-exports'; declare const fsUtils: any; @@ -76,12 +76,24 @@ export class Settings { if (!path) return Promise.resolve(); return new Promise((resolve, reject) => { if (!HTML5 && !path.startsWith('http')) { - const result = fsUtils.readJsonSync(path); - if (result instanceof Error) { - reject(result); + // TODO: readJsonSync not working on Taobao IDE + if (TAOBAO) { + globalThis.fsUtils.readJson(path, (err, result) => { + if (err) { + reject(err); + return; + } + this._settings = result; + resolve(); + }); } else { - this._settings = result; - resolve(); + const result = fsUtils.readJsonSync(path); + if (result instanceof Error) { + reject(result); + } else { + this._settings = result; + resolve(); + } } } else { const xhr = new XMLHttpRequest(); diff --git a/cocos/core/splash-screen.ts b/cocos/core/splash-screen.ts index 3ca30dde1bf..cfcd6603276 100644 --- a/cocos/core/splash-screen.ts +++ b/cocos/core/splash-screen.ts @@ -23,7 +23,7 @@ THE SOFTWARE. */ -import { EDITOR, NATIVE, PREVIEW } from 'internal:constants'; +import { EDITOR, NATIVE, PREVIEW, TAOBAO } from 'internal:constants'; import * as easing from './easing/easing'; import { Material } from './assets/material'; import { clamp01 } from './math/utils'; @@ -101,7 +101,8 @@ export class SplashScreen { }; this._curTime = 0; - if (EDITOR || PREVIEW || !this.settings.enabled || this.settings.base64src === '' || this.settings.totalTime <= 0) { + // TODO: Image can't load with base64 data on Taobao platform. + if (EDITOR || PREVIEW || TAOBAO || !this.settings.enabled || this.settings.base64src === '' || this.settings.totalTime <= 0) { this.settings.totalTime = 0; } else { this.device = legacyCC.director.root!.device; diff --git a/cocos/core/utils/decode-uuid.ts b/cocos/core/utils/decode-uuid.ts index 4d21bd16dae..79e0de86958 100644 --- a/cocos/core/utils/decode-uuid.ts +++ b/cocos/core/utils/decode-uuid.ts @@ -24,10 +24,12 @@ THE SOFTWARE. */ -import { TEST } from 'internal:constants'; +import { TAOBAO, TEST } from 'internal:constants'; import { BASE64_VALUES } from './misc'; import { legacyCC } from '../global-exports'; +const seperator = TAOBAO ? '_' : '@'; + const HexChars = '0123456789abcdef'.split(''); const _t = ['', '', '', '']; @@ -51,7 +53,7 @@ const Indices = UuidTemplate.map((x, i) => (x === '-' ? NaN : i)).filter(isFinit * ``` */ export default function decodeUuid (base64: string) { - const strs = base64.split('@'); + const strs = base64.split(seperator); const uuid = strs[0]; if (uuid.length !== 22) { return base64; diff --git a/pal/env/minigame/env.ts b/pal/env/minigame/env.ts index 83e73894d1e..3f7c0ee6ca2 100644 --- a/pal/env/minigame/env.ts +++ b/pal/env/minigame/env.ts @@ -1,5 +1,5 @@ /* eslint-disable import/no-dynamic-require */ -import { BAIDU, WECHAT, XIAOMI } from 'internal:constants'; +import { BAIDU, TAOBAO, WECHAT, XIAOMI } from 'internal:constants'; declare const require: (path: string) => any; declare const __baiduRequire: (path: string) => any; @@ -20,5 +20,9 @@ export function loadJsFile (path: string): any { if (WECHAT) { return __wxRequire(path); } + if (TAOBAO) { + // NOTE: Taobao doesn't support dynamic require + return undefined; + } return require(`../${path}`); } diff --git a/pal/minigame/taobao.ts b/pal/minigame/taobao.ts new file mode 100644 index 00000000000..f025ef3ae58 --- /dev/null +++ b/pal/minigame/taobao.ts @@ -0,0 +1,112 @@ +import { IMiniGame } from 'pal/minigame'; +import { Orientation } from '../screen-adapter/enum-type'; +import { cloneObject } from '../utils'; + +declare let my: any; + +// @ts-expect-error can't init minigame when it's declared +const minigame: IMiniGame = {}; +cloneObject(minigame, my); + +// #region SystemInfo +const systemInfo = minigame.getSystemInfoSync(); +minigame.isDevTool = my.isIDE; + +minigame.isLandscape = systemInfo.screenWidth > systemInfo.screenHeight; +// init landscapeOrientation as LANDSCAPE_RIGHT +const landscapeOrientation = Orientation.LANDSCAPE_RIGHT; +// NOTE: onDeviceOrientationChange is not supported on this platform +// my.onDeviceOrientationChange((res) => { +// if (res.value === 'landscape') { +// landscapeOrientation = Orientation.LANDSCAPE_RIGHT; +// } else if (res.value === 'landscapeReverse') { +// landscapeOrientation = Orientation.LANDSCAPE_LEFT; +// } +// }); +Object.defineProperty(minigame, 'orientation', { + get () { + return minigame.isLandscape ? landscapeOrientation : Orientation.PORTRAIT; + }, +}); +// #endregion SystemInfo + +minigame.createInnerAudioContext = function (): InnerAudioContext { + const audio: InnerAudioContext = my.createInnerAudioContext(); + // @ts-expect-error InnerAudioContext has onCanPlay + audio.onCanplay = audio.onCanPlay.bind(audio); + // @ts-expect-error InnerAudioContext has offCanPlay + audio.offCanplay = audio.offCanPlay.bind(audio); + // @ts-expect-error InnerAudioContext has onCanPlay + delete audio.onCanPlay; + // @ts-expect-error InnerAudioContext has offCanPlay + delete audio.offCanPlay; + return audio; +}; + +// #region Font +minigame.loadFont = function (url) { + // my.loadFont crash when url is not in user data path + return 'Arial'; +}; +// #endregion Font + +// #region Accelerometer +let _accelerometerCb: AccelerometerChangeCallback | undefined; +minigame.onAccelerometerChange = function (cb: AccelerometerChangeCallback) { + minigame.offAccelerometerChange(); + // onAccelerometerChange would start accelerometer + // so we won't call this method here + _accelerometerCb = (res: any) => { + let x = res.x; + let y = res.y; + if (minigame.isLandscape) { + const orientationFactor = (landscapeOrientation === Orientation.LANDSCAPE_RIGHT ? 1 : -1); + const tmp = x; + x = -y * orientationFactor; + y = tmp * orientationFactor; + } + + const resClone = { + x, + y, + z: res.z, + }; + cb(resClone); + }; +}; +minigame.offAccelerometerChange = function (cb?: AccelerometerChangeCallback) { + if (_accelerometerCb) { + my.offAccelerometerChange(_accelerometerCb); + _accelerometerCb = undefined; + } +}; +minigame.startAccelerometer = function (res: any) { + if (_accelerometerCb) { + my.onAccelerometerChange(_accelerometerCb); + } else { + // my.startAccelerometer() is not implemented. + console.error('minigame.onAccelerometerChange() should be invoked before minigame.startAccelerometer() on alipay platform'); + } +}; +minigame.stopAccelerometer = function (res: any) { + // my.stopAccelerometer() is not implemented. + minigame.offAccelerometerChange(); +}; +// #endregion Accelerometer + +// #region SafeArea +minigame.getSafeArea = function () { + console.warn('getSafeArea is not supported on this platform'); + const systemInfo = minigame.getSystemInfoSync(); + return { + top: 0, + left: 0, + bottom: systemInfo.screenHeight, + right: systemInfo.screenWidth, + width: systemInfo.screenWidth, + height: systemInfo.screenHeight, + }; +}; +// #endregion SafeArea + +export { minigame }; diff --git a/pal/system-info/enum-type/platform.ts b/pal/system-info/enum-type/platform.ts index 4b4577c98f4..197f44d643c 100644 --- a/pal/system-info/enum-type/platform.ts +++ b/pal/system-info/enum-type/platform.ts @@ -16,6 +16,7 @@ export enum Platform { BAIDU_MINI_GAME = 'BAIDU_MINI_GAME', XIAOMI_QUICK_GAME = 'XIAOMI_QUICK_GAME', ALIPAY_MINI_GAME = 'ALIPAY_MINI_GAME', + TAOBAO_CREATIVE_APP = 'TAOBAO_CREATIVE_APP', BYTEDANCE_MINI_GAME = 'BYTEDANCE_MINI_GAME', // Runtime Based OPPO_MINI_GAME = 'OPPO_MINI_GAME', diff --git a/pal/system-info/minigame/system-info.ts b/pal/system-info/minigame/system-info.ts index 3fc5de82029..a640c5b4e11 100644 --- a/pal/system-info/minigame/system-info.ts +++ b/pal/system-info/minigame/system-info.ts @@ -1,4 +1,4 @@ -import { ALIPAY, BAIDU, BYTEDANCE, COCOSPLAY, HUAWEI, LINKSURE, OPPO, QTT, VIVO, WECHAT, XIAOMI, DEBUG, EDITOR, TEST } from 'internal:constants'; +import { ALIPAY, BAIDU, BYTEDANCE, COCOSPLAY, HUAWEI, LINKSURE, OPPO, QTT, VIVO, WECHAT, XIAOMI, DEBUG, TEST, TAOBAO } from 'internal:constants'; import { minigame } from 'pal/minigame'; import { IFeatureMap } from 'pal/system-info'; import { EventTarget } from '../../../cocos/core/event'; @@ -14,6 +14,8 @@ if (WECHAT) { currentPlatform = Platform.XIAOMI_QUICK_GAME; } else if (ALIPAY) { currentPlatform = Platform.ALIPAY_MINI_GAME; +} else if (TAOBAO) { + currentPlatform = Platform.TAOBAO_CREATIVE_APP; } else if (BYTEDANCE) { currentPlatform = Platform.BYTEDANCE_MINI_GAME; } else if (OPPO) { diff --git a/platforms/minigame/common/engine/AssetManager.js b/platforms/minigame/common/engine/AssetManager.js index 030636acead..c82b4b639ac 100644 --- a/platforms/minigame/common/engine/AssetManager.js +++ b/platforms/minigame/common/engine/AssetManager.js @@ -23,7 +23,9 @@ function downloadScript (url, options, onComplete) { onComplete && onComplete(new Error('Can not load remote scripts')); } else { - require('../../../' + url); + if (sys.platform !== sys.Platform.TAOBAO_CREATIVE_APP) { + require('../../../' + url); + } onComplete && onComplete(null); } } @@ -240,7 +242,9 @@ function downloadBundle (nameOrUrl, options, onComplete) { js = `assets/${bundleName}/index.${suffix}js`; } } - require('./' + js); + if (sys.platform !== sys.Platform.TAOBAO_CREATIVE_APP) { + require('./' + js); + } options.__cacheBundleRoot__ = bundleName; var config = `${url}/config.${suffix}json`; downloadJson(config, options, function (err, data) { @@ -259,7 +263,6 @@ function downloadBundle (nameOrUrl, options, onComplete) { data.base = unzipPath + '/res/'; // PATCH: for android alipay version before v10.1.95 (v10.1.95 included) // to remove in the future - let sys = cc.sys; if (sys.platform === sys.Platform.ALIPAY_MINI_GAME && sys.os === sys.OS.ANDROID) { let resPath = unzipPath + 'res/'; if (fs.accessSync({path: resPath})) { diff --git a/platforms/minigame/platforms/taobao/wrapper/builtin/Audio.js b/platforms/minigame/platforms/taobao/wrapper/builtin/Audio.js new file mode 100644 index 00000000000..92ffc210b45 --- /dev/null +++ b/platforms/minigame/platforms/taobao/wrapper/builtin/Audio.js @@ -0,0 +1,205 @@ +import HTMLAudioElement from './HTMLAudioElement' + +const HAVE_NOTHING = 0 +const HAVE_METADATA = 1 +const HAVE_CURRENT_DATA = 2 +const HAVE_FUTURE_DATA = 3 +const HAVE_ENOUGH_DATA = 4 + +let SN_SEED = 1 + +const _innerAudioContextMap = {} + +export default class Audio extends HTMLAudioElement { + + constructor(url) { + super() + + this._$sn = SN_SEED++; + + this.HAVE_NOTHING = HAVE_NOTHING + this.HAVE_METADATA = HAVE_METADATA + this.HAVE_CURRENT_DATA = HAVE_CURRENT_DATA + this.HAVE_FUTURE_DATA = HAVE_FUTURE_DATA + this.HAVE_ENOUGH_DATA = HAVE_ENOUGH_DATA + + this.readyState = HAVE_NOTHING + + const innerAudioContext = my.createInnerAudioContext() + + _innerAudioContextMap[this._$sn] = innerAudioContext + + this._canplayEvents = [ + 'load', + 'loadend', + 'canplay', + 'canplaythrough', + 'loadedmetadata' + ] + + innerAudioContext.onCanplay(() => { + this._loaded = true + this.readyState = this.HAVE_CURRENT_DATA + this._canplayEvents.forEach((type) => { + this.dispatchEvent({ type: type }) + }) + }) + innerAudioContext.onPlay(() => { + this._paused = _innerAudioContextMap[this._$sn].paused + this.dispatchEvent({ type: 'play' }) + }) + innerAudioContext.onPause(() => { + this._paused = _innerAudioContextMap[this._$sn].paused + this.dispatchEvent({ type: 'pause' }) + }) + innerAudioContext.onEnded(() => { + this._paused = _innerAudioContextMap[this._$sn].paused + if (_innerAudioContextMap[this._$sn].loop === false) { + this.dispatchEvent({ type: 'ended' }) + } + this.readyState = HAVE_ENOUGH_DATA + }) + innerAudioContext.onError(() => { + this._paused = _innerAudioContextMap[this._$sn].paused + this.dispatchEvent({ type: 'error' }) + }) + + if (url) { + this.src = url + } else { + this._src = '' + } + + this._loop = innerAudioContext.loop + this._autoplay = innerAudioContext.autoplay + this._paused = innerAudioContext.paused + this._volume = innerAudioContext.volume + this._muted = false; + } + + addEventListener(type, listener, options = {}) { + super.addEventListener(type, listener, options) + + type = String(type).toLowerCase() + + if (this._loaded && this._canplayEvents.indexOf(type) !== -1) { + this.dispatchEvent({ type: type }) + } + } + + load() { + // console.warn('HTMLAudioElement.load() is not implemented.') + // weixin doesn't need call load() manually + } + + play() { + _innerAudioContextMap[this._$sn].play() + } + + resume() { + _innerAudioContextMap[this._$sn].resume() + } + + pause() { + _innerAudioContextMap[this._$sn].pause() + } + + stop() { + _innerAudioContextMap[this._$sn].stop() + } + + destroy() { + _innerAudioContextMap[this._$sn].destroy() + } + + canPlayType(mediaType = '') { + if (typeof mediaType !== 'string') { + return '' + } + + if (mediaType.indexOf('audio/mpeg') > -1 || mediaType.indexOf('audio/mp4')) { + return 'probably' + } + return '' + } + + get currentTime() { + return _innerAudioContextMap[this._$sn].currentTime + } + + set currentTime(value) { + _innerAudioContextMap[this._$sn].seek(value) + } + + get duration () { + return _innerAudioContextMap[this._$sn].duration + } + + get src() { + return this._src + } + + set src(value) { + this._src = value + this._loaded = false + this.readyState = this.HAVE_NOTHING + + const innerAudioContext = _innerAudioContextMap[this._$sn] + + innerAudioContext.src = value + } + + get loop() { + return this._loop + } + + set loop(value) { + this._loop = value + _innerAudioContextMap[this._$sn].loop = value + } + + get autoplay() { + return this.autoplay + } + + set autoplay(value) { + this._autoplay = value + _innerAudioContextMap[this._$sn].autoplay = value + } + + get paused() { + return this._paused; + } + + get volume() { + return this._volume; + } + + set volume(value) { + this._volume = value; + if (!this._muted) { + _innerAudioContextMap[this._$sn].volume = value; + } + } + + get muted() { + return this._muted; + } + + set muted(value) { + this._muted = value; + if (value) { + _innerAudioContextMap[this._$sn].volume = 0; + } else { + _innerAudioContextMap[this._$sn].volume = this._volume; + } + } + + cloneNode() { + const newAudio = new Audio() + newAudio.loop = this.loop + newAudio.autoplay = this.autoplay + newAudio.src = this.src + return newAudio + } +} diff --git a/platforms/minigame/platforms/taobao/wrapper/builtin/Canvas.js b/platforms/minigame/platforms/taobao/wrapper/builtin/Canvas.js new file mode 100644 index 00000000000..cdff09936d0 --- /dev/null +++ b/platforms/minigame/platforms/taobao/wrapper/builtin/Canvas.js @@ -0,0 +1,69 @@ +import { innerWidth, innerHeight } from './WindowProperties' + +function Canvas () {} + +let CanvasProxy = new Proxy(Canvas, { + construct () { + + const canvas = my.createOffscreenCanvas() + + canvas.type = 'canvas' + + // canvas.__proto__.__proto__.__proto__ = new HTMLCanvasElement() + + const _getContext = canvas.getContext + + canvas.getBoundingClientRect = () => { + const ret = { + top: 0, + left: 0, + width: window.innerWidth, + height: window.innerHeight + } + return ret + } + + canvas.style = { + top: '0px', + left: '0px', + width: innerWidth + 'px', + height: innerHeight + 'px', + } + + canvas.addEventListener = function (type, listener, options = {}) { + // console.log('canvas.addEventListener', type); + document.addEventListener(type, listener, options); + } + + canvas.removeEventListener = function (type, listener) { + // console.log('canvas.removeEventListener', type); + document.removeEventListener(type, listener); + } + + canvas.dispatchEvent = function (event = {}) { + console.log('canvas.dispatchEvent' , event.type, event); + // nothing to do + } + + Object.defineProperty(canvas, 'clientWidth', { + enumerable: true, + get: function get() { + return innerWidth + } + }) + + Object.defineProperty(canvas, 'clientHeight', { + enumerable: true, + get: function get() { + return innerHeight + } + }) + + return canvas + }, +}); + +// NOTE: this is a hack operation +// let canvas = new window.Canvas() +// console.error(canvas instanceof window.Canvas) => false +export default CanvasProxy; diff --git a/platforms/minigame/platforms/taobao/wrapper/builtin/Element.js b/platforms/minigame/platforms/taobao/wrapper/builtin/Element.js new file mode 100644 index 00000000000..965cd80d178 --- /dev/null +++ b/platforms/minigame/platforms/taobao/wrapper/builtin/Element.js @@ -0,0 +1,10 @@ +import Node from './Node' + +export default class Element extends Node { + className = '' + children = [] + + constructor() { + super() + } +} diff --git a/platforms/minigame/platforms/taobao/wrapper/builtin/Event.js b/platforms/minigame/platforms/taobao/wrapper/builtin/Event.js new file mode 100644 index 00000000000..a7adc6a57bf --- /dev/null +++ b/platforms/minigame/platforms/taobao/wrapper/builtin/Event.js @@ -0,0 +1,14 @@ +import {noop} from './util' + +export default class Event { + cancelBubble = false + cancelable = false + target = null + timestampe = Date.now() + preventDefault = noop + stopPropagation = noop + + constructor(type) { + this.type = type + } +} diff --git a/platforms/minigame/platforms/taobao/wrapper/builtin/EventTarget.js b/platforms/minigame/platforms/taobao/wrapper/builtin/EventTarget.js new file mode 100644 index 00000000000..573c3dbc9e1 --- /dev/null +++ b/platforms/minigame/platforms/taobao/wrapper/builtin/EventTarget.js @@ -0,0 +1,57 @@ +const _events = new WeakMap() + +export default class EventTarget { + constructor() { + _events.set(this, {}) + } + + addEventListener(type, listener, options = {}) { + let events = _events.get(this) + + if (!events) { + events = {} + _events.set(this, events) + } + if (!events[type]) { + events[type] = [] + } + events[type].push(listener) + + if (options.capture) { + // console.warn('EventTarget.addEventListener: options.capture is not implemented.') + } + if (options.once) { + // console.warn('EventTarget.addEventListener: options.once is not implemented.') + } + if (options.passive) { + // console.warn('EventTarget.addEventListener: options.passive is not implemented.') + } + } + + removeEventListener(type, listener) { + const events = _events.get(this) + + if (events) { + const listeners = events[type] + + if (listeners && listeners.length > 0) { + for (let i = listeners.length; i--; i > 0) { + if (listeners[i] === listener) { + listeners.splice(i, 1) + break + } + } + } + } + } + + dispatchEvent(event = {}) { + const listeners = _events.get(this)[event.type] + + if (listeners) { + for (let i = 0; i < listeners.length; i++) { + listeners[i](event) + } + } + } +} diff --git a/platforms/minigame/platforms/taobao/wrapper/builtin/HTMLAudioElement.js b/platforms/minigame/platforms/taobao/wrapper/builtin/HTMLAudioElement.js new file mode 100644 index 00000000000..0f60bd6b91a --- /dev/null +++ b/platforms/minigame/platforms/taobao/wrapper/builtin/HTMLAudioElement.js @@ -0,0 +1,7 @@ +import HTMLElement from './HTMLElement' + +export default class HTMLAudioElement extends HTMLElement { + constructor() { + super('audio') + } +} diff --git a/platforms/minigame/platforms/taobao/wrapper/builtin/HTMLCanvasElement.js b/platforms/minigame/platforms/taobao/wrapper/builtin/HTMLCanvasElement.js new file mode 100644 index 00000000000..6b5191991cf --- /dev/null +++ b/platforms/minigame/platforms/taobao/wrapper/builtin/HTMLCanvasElement.js @@ -0,0 +1,3 @@ +let HTMLCanvasElement = my.createOffscreenCanvas().constructor; + +export default HTMLCanvasElement; diff --git a/platforms/minigame/platforms/taobao/wrapper/builtin/HTMLElement.js b/platforms/minigame/platforms/taobao/wrapper/builtin/HTMLElement.js new file mode 100644 index 00000000000..51040f3c6ec --- /dev/null +++ b/platforms/minigame/platforms/taobao/wrapper/builtin/HTMLElement.js @@ -0,0 +1,54 @@ +import Element from './Element' +import { noop } from './util/index.js' +import { innerWidth, innerHeight } from './WindowProperties' + +export default class HTMLElement extends Element { + className = '' + childern = [] + style = { + width: `${innerWidth}px`, + height: `${innerHeight}px` + } + + insertBefore = noop + + innerHTML = '' + + constructor(tagName = '') { + super() + this.tagName = tagName.toUpperCase() + } + + setAttribute(name, value) { + this[name] = value + } + + getAttribute(name) { + return this[name] + } + + get clientWidth() { + const ret = parseInt(this.style.fontSize, 10) * this.innerHTML.length + + return Number.isNaN(ret) ? 0 : ret + } + + get clientHeight() { + const ret = parseInt(this.style.fontSize, 10) + + return Number.isNaN(ret) ? 0 : ret + } + + getBoundingClientRect() { + return { + top: 0, + left: 0, + width: innerWidth, + height: innerHeight + } + } + + focus() { + + } +} diff --git a/platforms/minigame/platforms/taobao/wrapper/builtin/HTMLImageElement.js b/platforms/minigame/platforms/taobao/wrapper/builtin/HTMLImageElement.js new file mode 100644 index 00000000000..d53052ee3cb --- /dev/null +++ b/platforms/minigame/platforms/taobao/wrapper/builtin/HTMLImageElement.js @@ -0,0 +1,4 @@ +var screencanvas = $global.screencanvas; +let HTMLImageElement = screencanvas.createImage().constructor; + +export default HTMLImageElement; \ No newline at end of file diff --git a/platforms/minigame/platforms/taobao/wrapper/builtin/Image.js b/platforms/minigame/platforms/taobao/wrapper/builtin/Image.js new file mode 100644 index 00000000000..aa4e0a0b36f --- /dev/null +++ b/platforms/minigame/platforms/taobao/wrapper/builtin/Image.js @@ -0,0 +1,40 @@ +// var screencanvas = $global.screencanvas; + +function Image () { + // empty constructor +} + +// NOTE: Proxy not supported on iOS 8 and 9. +// let ImageProxy = new Proxy(Image, { +// construct (target, args) { +// let img = screencanvas.createImage(); +// if (!img.addEventListener) { +// img.addEventListener = function (eventName, eventCB) { +// if (eventName === 'load') { +// img.onload = eventCB; +// } else if (eventName === 'error') { +// // img.onerror = eventCB; +// } +// }; +// } + +// if (!img.removeEventListener) { +// img.removeEventListener = function (eventName) { +// if (eventName === 'load') { +// img.onload = null; +// } else if (eventName === 'error') { +// // img.onerror = null; +// } +// }; +// } +// return img; +// }, +// }); + +// NOTE: this is a hack operation +// let img = new window.Image() +// console.error(img instanceof window.Image) => false +// export default ImageProxy; + + +export default Image; \ No newline at end of file diff --git a/platforms/minigame/platforms/taobao/wrapper/builtin/ImageBitmap.js b/platforms/minigame/platforms/taobao/wrapper/builtin/ImageBitmap.js new file mode 100644 index 00000000000..94be70a7600 --- /dev/null +++ b/platforms/minigame/platforms/taobao/wrapper/builtin/ImageBitmap.js @@ -0,0 +1,5 @@ +export default class ImageBitmap { + constructor() { + // TODO + } +} diff --git a/platforms/minigame/platforms/taobao/wrapper/builtin/Node.js b/platforms/minigame/platforms/taobao/wrapper/builtin/Node.js new file mode 100644 index 00000000000..6ebcbdc234a --- /dev/null +++ b/platforms/minigame/platforms/taobao/wrapper/builtin/Node.js @@ -0,0 +1,34 @@ +import EventTarget from './EventTarget.js' + +export default class Node extends EventTarget { + constructor() { + super() + } + + childNodes = [] + + appendChild(node) { + this.childNodes.push(node) + // if (node instanceof Node) { + // this.childNodes.push(node) + // } else { + // throw new TypeError('Failed to executed \'appendChild\' on \'Node\': parameter 1 is not of type \'Node\'.') + // } + } + + cloneNode() { + const copyNode = Object.create(this) + + Object.assign(copyNode, this) + return copyNode + } + + removeChild(node) { + const index = this.childNodes.findIndex((child) => child === node) + + if (index > -1) { + return this.childNodes.splice(index, 1) + } + return null + } +} diff --git a/platforms/minigame/platforms/taobao/wrapper/builtin/WebGLRenderingContext.js b/platforms/minigame/platforms/taobao/wrapper/builtin/WebGLRenderingContext.js new file mode 100644 index 00000000000..bc62da5f495 --- /dev/null +++ b/platforms/minigame/platforms/taobao/wrapper/builtin/WebGLRenderingContext.js @@ -0,0 +1,5 @@ +export default class WebGLRenderingContext { + constructor() { + // TODO + } +} diff --git a/platforms/minigame/platforms/taobao/wrapper/builtin/WebSocket.js b/platforms/minigame/platforms/taobao/wrapper/builtin/WebSocket.js new file mode 100644 index 00000000000..94c8b73a181 --- /dev/null +++ b/platforms/minigame/platforms/taobao/wrapper/builtin/WebSocket.js @@ -0,0 +1,87 @@ +const _socketTask = new WeakMap() + +export default class WebSocket { + static CONNECTING = 0 // The connection is not yet open. + static OPEN = 1 // The connection is open and ready to communicate. + static CLOSING = 2 // The connection is in the process of closing. + static CLOSED = 3 // The connection is closed or couldn't be opened. + + binaryType = '' // TODO 更新 binaryType + bufferedAmount = 0 // TODO 更新 bufferedAmount + extensions = '' + + onclose = null + onerror = null + onmessage = null + onopen = null + + protocol = '' // TODO 小程序内目前获取不到,实际上需要根据服务器选择的 sub-protocol 返回 + readyState = 3 + + constructor(url, protocols = []) { + if (typeof url !== 'string' || !(/(^ws:\/\/)|(^wss:\/\/)/).test(url)) { + throw new TypeError(`Failed to construct 'WebSocket': The URL '${url}' is invalid`) + } + + this.url = url + this.readyState = WebSocket.CONNECTING + + const socketTask = my.connectSocket({ + url, + protocols: Array.isArray(protocols) ? protocols : [protocols], + tcpNoDelay: true + }) + + _socketTask.set(this, socketTask) + + socketTask.onClose((res) => { + this.readyState = WebSocket.CLOSED + if (typeof this.onclose === 'function') { + this.onclose(res) + } + }) + + socketTask.onMessage((res) => { + if (typeof this.onmessage === 'function') { + this.onmessage(res) + } + }) + + socketTask.onOpen(() => { + this.readyState = WebSocket.OPEN + if (typeof this.onopen === 'function') { + this.onopen() + } + }) + + socketTask.onError((res) => { + if (typeof this.onerror === 'function') { + this.onerror(new Error(res.errMsg)) + } + }) + + return this + } + + close(code, reason) { + this.readyState = WebSocket.CLOSING + const socketTask = _socketTask.get(this) + + socketTask.close({ + code, + reason + }) + } + + send(data) { + if (typeof data !== 'string' && !(data instanceof ArrayBuffer) && !ArrayBuffer.isView(data)) { + throw new TypeError(`Failed to send message: The data ${data} is invalid`) + } + + const socketTask = _socketTask.get(this) + + socketTask.send({ + data + }) + } +} diff --git a/platforms/minigame/platforms/taobao/wrapper/builtin/WindowProperties.js b/platforms/minigame/platforms/taobao/wrapper/builtin/WindowProperties.js new file mode 100644 index 00000000000..7160e83b872 --- /dev/null +++ b/platforms/minigame/platforms/taobao/wrapper/builtin/WindowProperties.js @@ -0,0 +1,31 @@ +const { pixelRatio, windowWidth, windowHeight } = my.getSystemInfoSync() +const devicePixelRatio = pixelRatio; + +let width, height; +if ($global.screencanvas.getBoundingClientRect) { + let rect = $global.screencanvas.getBoundingClientRect(); + width = rect.width; + height = rect.height; +} else { + width = windowWidth; + height = windowHeight; +} +export const innerWidth = width; +export const innerHeight = height; +export { devicePixelRatio } +export const screen = { + width, + height, + availWidth: innerWidth, + availHeight: innerHeight, + availLeft: 0, + availTop: 0, +} + +export const performance = { + now: Date.now +}; + +export const ontouchstart = null; +export const ontouchmove = null; +export const ontouchend = null; \ No newline at end of file diff --git a/platforms/minigame/platforms/taobao/wrapper/builtin/XMLHttpRequest.js b/platforms/minigame/platforms/taobao/wrapper/builtin/XMLHttpRequest.js new file mode 100644 index 00000000000..cc54632c157 --- /dev/null +++ b/platforms/minigame/platforms/taobao/wrapper/builtin/XMLHttpRequest.js @@ -0,0 +1,172 @@ +import EventTarget from './EventTarget.js' + +const _url = new WeakMap() +const _method = new WeakMap() +const _requestHeader = new WeakMap() +const _responseHeader = new WeakMap() +const _requestTask = new WeakMap() + +function _triggerEvent(type, ...args) { + if (typeof this[`on${type}`] === 'function') { + this[`on${type}`].apply(this, args) + } +} + +function _changeReadyState(readyState) { + this.readyState = readyState + _triggerEvent.call(this, 'readystatechange') +} + +export default class XMLHttpRequest extends EventTarget { + // TODO 没法模拟 HEADERS_RECEIVED 和 LOADING 两个状态 + static UNSEND = 0 + static OPENED = 1 + static HEADERS_RECEIVED = 2 + static LOADING = 3 + static DONE = 4 + + timeout = 0; + /* + * TODO 这一批事件应该是在 XMLHttpRequestEventTarget.prototype 上面的 + */ + onabort = null + onerror = null + onload = null + onloadstart = null + onprogress = null + ontimeout = null + onloadend = null + + onreadystatechange = null + readyState = 0 + response = null + responseText = null + responseType = '' + responseXML = null + status = 0 + statusText = '' + upload = {} + withCredentials = false + + constructor() { + super(); + + _requestHeader.set(this, { + 'content-type': 'application/x-www-form-urlencoded' + }) + _responseHeader.set(this, {}) + } + + abort() { + const myRequestTask = _requestTask.get(this) + + if (myRequestTask) { + myRequestTask.abort() + } + } + + getAllResponseHeaders() { + const responseHeader = _responseHeader.get(this) + + return Object.keys(responseHeader).map((header) => { + return `${header}: ${responseHeader[header]}` + }).join('\n') + } + + getResponseHeader(header) { + return _responseHeader.get(this)[header] + } + + open(method, url/* async, user, password 这几个参数在小程序内不支持*/) { + _method.set(this, method) + _url.set(this, url) + _changeReadyState.call(this, XMLHttpRequest.OPENED) + } + + overrideMimeType() { + } + + send(data = '') { + if (this.readyState !== XMLHttpRequest.OPENED) { + throw new Error("Failed to execute 'send' on 'XMLHttpRequest': The object's state must be OPENED.") + } else { + let myRequestTask = my.request({ + data, + url: _url.get(this), + method: _method.get(this), + header: _requestHeader.get(this), + dataType: 'other', + responseType: this.responseType === 'arraybuffer' ? 'arraybuffer' : 'text', + timeout: this.timeout || undefined, + success: ({ data, status, header }) => { + this.status = status + _responseHeader.set(this, header) + _triggerEvent.call(this, 'loadstart') + _changeReadyState.call(this, XMLHttpRequest.HEADERS_RECEIVED) + _changeReadyState.call(this, XMLHttpRequest.LOADING) + + switch (this.responseType) { + case 'json': + this.responseText = data; + try { + this.response = JSON.parse(data); + } + catch (e) { + this.response = null; + } + break; + case '': + case 'text': + this.responseText = this.response = data; + break; + case 'arraybuffer': + this.response = data; + this.responseText = ''; + var bytes = new Uint8Array(data); + var len = bytes.byteLength; + + for (var i = 0; i < len; i++) { + this.responseText += String.fromCharCode(bytes[i]); + } + break; + default: + this.response = null; + } + _changeReadyState.call(this, XMLHttpRequest.DONE) + _triggerEvent.call(this, 'load') + _triggerEvent.call(this, 'loadend') + }, + fail: ({ errMsg }) => { + // TODO 规范错误 + if (errMsg.indexOf('abort') !== -1) { + _triggerEvent.call(this, 'abort') + } else if (errMsg.indexOf('timeout') !== -1) { + _triggerEvent.call(this, 'timeout') + } else { + _triggerEvent.call(this, 'error', errMsg) + } + _triggerEvent.call(this, 'loadend') + } + }) + + _requestTask.set(this, myRequestTask); + } + } + + setRequestHeader(header, value) { + const myHeader = _requestHeader.get(this) + + myHeader[header] = value + _requestHeader.set(this, myHeader) + } + + addEventListener(type, listener) { + if (typeof listener === 'function') { + let _this = this + let event = { target: _this } + this['on' + type] = function (event) { + listener.call(_this, event) + } + } + } +} diff --git a/platforms/minigame/platforms/taobao/wrapper/builtin/cancelAnimationFrame.js b/platforms/minigame/platforms/taobao/wrapper/builtin/cancelAnimationFrame.js new file mode 100644 index 00000000000..c688495901e --- /dev/null +++ b/platforms/minigame/platforms/taobao/wrapper/builtin/cancelAnimationFrame.js @@ -0,0 +1,4 @@ +let screencanvas = $global.screencanvas; +let cancelAnimationFrame = screencanvas.cancelAnimationFrame.bind(screencanvas); + +export default cancelAnimationFrame; \ No newline at end of file diff --git a/platforms/minigame/platforms/taobao/wrapper/builtin/document.js b/platforms/minigame/platforms/taobao/wrapper/builtin/document.js new file mode 100644 index 00000000000..7a3cadfbf85 --- /dev/null +++ b/platforms/minigame/platforms/taobao/wrapper/builtin/document.js @@ -0,0 +1,124 @@ +import * as _window from './window' +import HTMLElement from './HTMLElement' +import Image from './Image' +import Canvas from './Canvas' +import Audio from './Audio' + +const events = {} + +var document = { + readyState: 'complete', + visibilityState: 'visible', + documentElement: _window, + hidden: false, + style: {}, + location: _window.location, + ontouchstart: null, + ontouchmove: null, + ontouchend: null, + + head: new HTMLElement('head'), + body: new HTMLElement('body'), + + createElement(tagName) { + tagName = tagName.toLowerCase(); + if (tagName === 'canvas') { + return new Canvas() + } else if (tagName === 'audio') { + return new Audio() + } else if (tagName === 'img') { + return new Image() + } + + return new HTMLElement(tagName) + }, + + createElementNS(nameSpace, tagName) { + return this.createElement(tagName); + }, + + getElementById(id) { + if (id === _window.canvas.id) { + return _window.canvas + } + return null + }, + + getElementsByTagName(tagName) { + if (tagName === 'head') { + return [document.head] + } else if (tagName === 'body') { + return [document.body] + } else if (tagName === 'canvas') { + return [_window.canvas] + } + return [] + }, + + getElementsByName(tagName) { + if (tagName === 'head') { + return [document.head] + } else if (tagName === 'body') { + return [document.body] + } else if (tagName === 'canvas') { + return [_window.canvas] + } + return [] + }, + + querySelector(query) { + if (query === 'head') { + return document.head + } else if (query === 'body') { + return document.body + } else if (query === 'canvas') { + return _window.canvas + } else if (query === `#${_window.canvas.id}`) { + return _window.canvas + } + return null + }, + + querySelectorAll(query) { + if (query === 'head') { + return [document.head] + } else if (query === 'body') { + return [document.body] + } else if (query === 'canvas') { + return [_window.canvas] + } + return [] + }, + + addEventListener(type, listener) { + if (!events[type]) { + events[type] = [] + } + events[type].push(listener) + }, + + removeEventListener(type, listener) { + const listeners = events[type] + + if (listeners && listeners.length > 0) { + for (let i = listeners.length; i--; i > 0) { + if (listeners[i] === listener) { + listeners.splice(i, 1) + break + } + } + } + }, + + dispatchEvent(event) { + const listeners = events[event.type] + + if (listeners) { + for (let i = 0; i < listeners.length; i++) { + listeners[i](event) + } + } + } +} + +export { document } diff --git a/platforms/minigame/platforms/taobao/wrapper/builtin/index.js b/platforms/minigame/platforms/taobao/wrapper/builtin/index.js new file mode 100644 index 00000000000..c20c8f9d22b --- /dev/null +++ b/platforms/minigame/platforms/taobao/wrapper/builtin/index.js @@ -0,0 +1,64 @@ +import * as _window from './window' +import { document } from './document' + +var global = $global; + +function inject () { + // 暴露全局的 canvas + _window.canvas = $global.screencanvas; + _window.document = document; + + _window.addEventListener = (type, listener) => { + _window.document.addEventListener(type, listener) + } + _window.removeEventListener = (type, listener) => { + _window.document.removeEventListener(type, listener) + } + _window.dispatchEvent = _window.document.dispatchEvent; + + const { platform } = my.getSystemInfoSync() + + // 开发者工具无法重定义 window + if (typeof __devtoolssubcontext === 'undefined' && platform === 'devtools') { + for (const key in _window) { + const descriptor = Object.getOwnPropertyDescriptor(global, key) + + if (!descriptor || descriptor.configurable === true) { + Object.defineProperty(window, key, { + value: _window[key] + }) + } + } + + for (const key in _window.document) { + const descriptor = Object.getOwnPropertyDescriptor(global.document, key) + + if (!descriptor || descriptor.configurable === true) { + Object.defineProperty(global.document, key, { + value: _window.document[key] + }) + } + } + window.parent = window + } else { + for (const key in _window) { + global[key] = _window[key] + } + // global.window = _window + // window = global + // window.top = window.parent = window + } + + global.setTimeout = setTimeout; + global.clearTimeout = clearTimeout; + global.setInterval = setInterval; + global.clearInterval = clearInterval; +} + +if (!global.__isAdapterInjected) { + global.__isAdapterInjected = true + inject() +} + +require('../../../../common/xmldom/dom-parser'); +require('../unify'); diff --git a/platforms/minigame/platforms/taobao/wrapper/builtin/localStorage.js b/platforms/minigame/platforms/taobao/wrapper/builtin/localStorage.js new file mode 100644 index 00000000000..7f4ed0de2d8 --- /dev/null +++ b/platforms/minigame/platforms/taobao/wrapper/builtin/localStorage.js @@ -0,0 +1,37 @@ +const localStorage = { + get length() { + const { keys } = my.getStorageInfoSync() + + return keys.length + }, + + key(n) { + const { keys } = my.getStorageInfoSync() + + return keys[n] + }, + + getItem(key) { + let ret = my.getStorageSync({ + key, + }); + return ret && ret.data; + }, + + setItem(key, data) { + return my.setStorageSync({ + key, + data, + }); + }, + + removeItem(key) { + my.removeStorageSync(key) + }, + + clear() { + my.clearStorageSync() + } +} + +export default localStorage diff --git a/platforms/minigame/platforms/taobao/wrapper/builtin/location.js b/platforms/minigame/platforms/taobao/wrapper/builtin/location.js new file mode 100644 index 00000000000..bc917a4af89 --- /dev/null +++ b/platforms/minigame/platforms/taobao/wrapper/builtin/location.js @@ -0,0 +1,7 @@ +var location = { + href: 'game.js', + reload() { + } +} + +export default location diff --git a/platforms/minigame/platforms/taobao/wrapper/builtin/navigator.js b/platforms/minigame/platforms/taobao/wrapper/builtin/navigator.js new file mode 100644 index 00000000000..29dc0611811 --- /dev/null +++ b/platforms/minigame/platforms/taobao/wrapper/builtin/navigator.js @@ -0,0 +1,38 @@ +import { noop } from './util/index.js' + +// TODO 需要 my.getSystemInfo 获取更详细信息 +const systemInfo = my.getSystemInfoSync() +console.log(systemInfo) + +const system = systemInfo.system; +const platform = systemInfo.platform; +const language = systemInfo.language; +const version = systemInfo.version; + +const android = system ? system.toLowerCase().indexOf('android') !== -1 : false; + +const uaDesc = android ? `Android; CPU ${system}` : `iPhone; CPU iPhone OS ${system} like Mac OS X`; +const ua = `Mozilla/5.0 (${uaDesc}) AppleWebKit/603.1.30 (KHTML, like Gecko) Mobile/14E8301 MicroMessenger/${version} MiniGame NetType/WIFI Language/${language}`; + +const navigator = { + platform, + language: language, + appVersion: `5.0 (${uaDesc}) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1`, + userAgent: ua, + onLine: true, // TODO 用 my.getNetworkStateChange 和 my.onNetworkStateChange 来返回真实的状态 + + // TODO 用 my.getLocation 来封装 geolocation + geolocation: { + getCurrentPosition: noop, + watchPosition: noop, + clearWatch: noop + } +} + +if (my.onNetworkStatusChange) { + my.onNetworkStatusChange(function(event){ + navigator.onLine = event.isConnected; + }); +} + +export default navigator diff --git a/platforms/minigame/platforms/taobao/wrapper/builtin/requestAnimationFrame.js b/platforms/minigame/platforms/taobao/wrapper/builtin/requestAnimationFrame.js new file mode 100644 index 00000000000..d6f8366904c --- /dev/null +++ b/platforms/minigame/platforms/taobao/wrapper/builtin/requestAnimationFrame.js @@ -0,0 +1,4 @@ +let screencanvas = $global.screencanvas; +let requestAnimationFrame = screencanvas.requestAnimationFrame.bind(screencanvas); + +export default requestAnimationFrame; \ No newline at end of file diff --git a/platforms/minigame/platforms/taobao/wrapper/builtin/util/index.js b/platforms/minigame/platforms/taobao/wrapper/builtin/util/index.js new file mode 100644 index 00000000000..177804c7aba --- /dev/null +++ b/platforms/minigame/platforms/taobao/wrapper/builtin/util/index.js @@ -0,0 +1 @@ +export function noop() {} diff --git a/platforms/minigame/platforms/taobao/wrapper/builtin/window.js b/platforms/minigame/platforms/taobao/wrapper/builtin/window.js new file mode 100644 index 00000000000..b014eb920c4 --- /dev/null +++ b/platforms/minigame/platforms/taobao/wrapper/builtin/window.js @@ -0,0 +1,15 @@ +export navigator from './navigator' +export XMLHttpRequest from './XMLHttpRequest' +export WebSocket from './WebSocket' +export Image from './Image' +export ImageBitmap from './ImageBitmap' +export HTMLElement from './HTMLElement' +export HTMLImageElement from './HTMLImageElement' +export HTMLCanvasElement from './HTMLCanvasElement' +export WebGLRenderingContext from './WebGLRenderingContext' +export localStorage from './localStorage' +export location from './location' +export requestAnimationFrame from './requestAnimationFrame' +export cancelAnimationFrame from './cancelAnimationFrame' +export * from './WindowProperties' + diff --git a/platforms/minigame/platforms/taobao/wrapper/engine/AssetManager.js b/platforms/minigame/platforms/taobao/wrapper/engine/AssetManager.js new file mode 100644 index 00000000000..613db05359f --- /dev/null +++ b/platforms/minigame/platforms/taobao/wrapper/engine/AssetManager.js @@ -0,0 +1,44 @@ +const parser = cc.assetManager.parser; +const downloader = cc.assetManager.downloader; +const debug = cc.debug; + +function downloadImage (url, options, onComplete) { + const img = window.screencanvas.createImage(); + + function loadCallback() { + img.onload = null; + img.onerror = null; + + if (onComplete) { + onComplete(null, img); + } + } + + function errorCallback() { + img.onload = null; + img.onerror = null; + + if (onComplete) { + onComplete(new Error(debug.getError(4930, url))); + } + } + + img.onload = loadCallback; + img.onerror - errorCallback; + img.src = url; + return img; +} + +downloader.downloadDomImage = downloadImage; + +parser.register({ + '.png': downloadImage, + '.jpg': downloadImage, + '.bmp': downloadImage, + '.jpeg': downloadImage, + '.gif': downloadImage, + '.ico': downloadImage, + '.tiff': downloadImage, + '.image': downloadImage, + '.webp': downloadImage, +}); diff --git a/platforms/minigame/platforms/taobao/wrapper/engine/index.js b/platforms/minigame/platforms/taobao/wrapper/engine/index.js new file mode 100644 index 00000000000..64c05bc2f0e --- /dev/null +++ b/platforms/minigame/platforms/taobao/wrapper/engine/index.js @@ -0,0 +1,3 @@ +require('../fs-utils'); +require('../../../../common/engine/index'); +require('./AssetManager.js'); diff --git a/platforms/minigame/platforms/taobao/wrapper/fs-utils.js b/platforms/minigame/platforms/taobao/wrapper/fs-utils.js new file mode 100644 index 00000000000..b876a99ab4b --- /dev/null +++ b/platforms/minigame/platforms/taobao/wrapper/fs-utils.js @@ -0,0 +1,262 @@ +/**************************************************************************** + Copyright (c) 2017-2019 Xiamen Yaji Software Co., Ltd. + + https://www.cocos.com/ + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated engine source code (the "Software"), a limited, + worldwide, royalty-free, non-assignable, revocable and non-exclusive license + to use Cocos Creator solely to develop games on your target platforms. You shall + not use Cocos Creator software for developing other software or tools that's + used for developing games. You are not granted to publish, distribute, + sublicense, and/or sell copies of Cocos Creator. + + The software or tools in this License Agreement are licensed, not sold. + Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + ****************************************************************************/ +// TODO: verify the my API +var fs = my.getFileSystemManager ? my.getFileSystemManager() : null; +var outOfStorageRegExp = /the maximum size of the file storage/; // not exactly right + +var fsUtils = { + + fs, + + isOutOfStorage (errMsg) { + return outOfStorageRegExp.test(errMsg); + }, + + getUserDataPath () { + return my.env.USER_DATA_PATH; + }, + + checkFsValid () { + if (!fs) { + console.warn('Can not get the file system!'); + return false; + } + return true; + }, + + deleteFile (filePath, onComplete) { + fs.unlink({ + filePath: filePath, + success: function () { + onComplete && onComplete(null); + }, + fail: function (res) { + console.warn(`Delete file failed: path: ${filePath} message: ${res.errorMessage}`); + onComplete && onComplete(new Error(res.errorMessage)); + } + }); + }, + + downloadFile (remoteUrl, filePath, header, onProgress, onComplete) { + var options = { + url: remoteUrl, + success: function (res) { + if (!filePath) { + onComplete && onComplete(null, res.apFilePath); + } + else { + fsUtils.copyFile(res.apFilePath, filePath, onComplete); + } + }, + fail: function (res) { + console.warn(`Download file failed: path: ${remoteUrl} message: ${res.errorMessage}`); + onComplete && onComplete(new Error(res.errorMessage), null); + } + } + if (header) options.header = header; + var task = my.downloadFile(options); + onProgress && task.onProgressUpdate(onProgress); + }, + + saveFile (srcPath, destPath, onComplete) { + // Hack, seems like my.saveFile dose not work + fsUtils.copyFile(srcPath, destPath, onComplete); + }, + + copyFile (srcPath, destPath, onComplete) { + fs.copyFile({ + srcPath: srcPath, + destPath: destPath, + success: function () { + onComplete && onComplete(null); + }, + fail: function (res) { + console.warn(`Copy file failed: path: ${srcPath} message: ${res.errorMessage}`); + onComplete && onComplete(new Error(res.errorMessage)); + } + }); + }, + + writeFile (path, data, encoding, onComplete) { + fs.writeFile({ + filePath: path, + encoding: encoding, + data: data, + success: function () { + onComplete && onComplete(null); + }, + fail: function (res) { + console.warn(`Write file failed: path: ${path} message: ${res.errorMessage}`); + onComplete && onComplete(new Error(res.errorMessage)); + } + }); + }, + + writeFileSync (path, data, encoding) { + try { + fs.writeFileSync({ + filePath: path, + data: data, + encoding: encoding, + }); + return null; + } + catch (e) { + console.warn(`Write file failed: path: ${path} message: ${e.message}`); + return new Error(e.message); + } + }, + + readFile (filePath, encoding, onComplete) { + fs.readFile({ + filePath: filePath, + encoding: encoding, + success: function (res) { + onComplete && onComplete(null, res.data); + }, + fail: function (res) { + console.warn(`Read file failed: path: ${filePath} message: ${res.errorMessage}`); + onComplete && onComplete (new Error(res.errorMessage), null); + } + }); + }, + + readDir (filePath, onComplete) { + fs.readdir({ + dirPath: filePath, + success: function (res) { + onComplete && onComplete(null, res.files); + }, + fail: function (res) { + console.warn(`Read directory failed: path: ${filePath} message: ${res.errorMessage}`); + onComplete && onComplete(new Error(res.errorMessage), null); + } + }); + }, + + readText (filePath, onComplete) { + fsUtils.readFile(filePath, 'utf8', onComplete); + }, + + readArrayBuffer (filePath, onComplete) { + fsUtils.readFile(filePath, '', onComplete); + }, + + readJson (filePath, onComplete) { + fsUtils.readFile(filePath, 'utf8', function (err, text) { + var out = null; + if (!err) { + try { + out = JSON.parse(text); + } + catch (e) { + console.warn(`Read json failed: path: ${filePath} message: ${e.message}`); + err = new Error(e.message); + } + } + onComplete && onComplete(err, out); + }); + }, + + readJsonSync (path) { + try { + var res = fs.readFileSync({ + filePath: path, + encoding: 'utf8', + }); + return JSON.parse(res.data); + } + catch (e) { + console.warn(`Read json failed: path: ${path} message: ${e.message}`); + return new Error(e.message); + } + }, + + makeDirSync (path, recursive) { + try { + fs.mkdirSync({ + dirPath: path, + recursive: recursive, + }); + return null; + } + catch (e) { + console.warn(`Make directory failed: path: ${path} message: ${e.message}`); + return new Error(e.message); + } + }, + + rmdirSync (dirPath, recursive) { + try { + fs.rmdirSync({ dirPath, recursive }); + } + catch (e) { + console.warn(`rm directory failed: path: ${dirPath} message: ${e.message}`); + return new Error(e.message); + } + }, + + exists (filePath, onComplete) { + // fs.access is not supported. + // fs.access({ + // path: filePath, + // success: function () { + // onComplete && onComplete(true); + // }, + // fail: function () { + // onComplete && onComplete(false); + // } + // }); + fs.readFile({ + filePath: filePath, + success () { + onComplete && onComplete(true); + }, + fail () { + onComplete && onComplete (false); + } + }); + }, + + loadSubpackage (name, onProgress, onComplete) { + throw new Error('Not Implemented'); + }, + + unzip (zipFilePath, targetPath, onComplete) { + fs.unzip({ + zipFilePath, + targetPath, + success () { + onComplete && onComplete(null); + }, + fail (res) { + console.warn(`unzip failed: path: ${zipFilePath} message: ${res.errorMessage}`); + onComplete && onComplete(new Error('unzip failed: ' + res.errorMessage)); + }, + }) + }, +}; + +window.fsUtils = module.exports = fsUtils; diff --git a/platforms/minigame/platforms/taobao/wrapper/unify.js b/platforms/minigame/platforms/taobao/wrapper/unify.js new file mode 100644 index 00000000000..34213eaf361 --- /dev/null +++ b/platforms/minigame/platforms/taobao/wrapper/unify.js @@ -0,0 +1,151 @@ +const utils = require('./utils'); + +function handleTouchEvent (event) { + if (my.isIDE) { + return; + } + let changedTouches = event.changedTouches; + if (changedTouches) { + for (let touch of changedTouches) { + touch.clientX = touch.x; + touch.clientY = touch.y; + } + } +} + +my.onTouchStart = function (cb) { + $global._touchstartCB = function (event) { + handleTouchEvent(event); + cb(event); + }; +}; +my.onTouchCancel = function (cb) { + $global._touchcancelCB = function (event) { + handleTouchEvent(event); + cb(event); + }; +}; +my.onTouchEnd = function (cb) { + $global._touchendCB = function (event) { + handleTouchEvent(event); + cb(event); + }; +}; +my.onTouchMove = function (cb) { + $global._touchmoveCB = function (event) { + handleTouchEvent(event); + cb(event); + }; +}; + +my.onShow = function (cb) { + $global._onShowCB = cb; +}; +my.onHide = function (cb) { + $global._onHideCB = cb; +}; + +if (window.__globalAdapter) { + let globalAdapter = window.__globalAdapter; + // SystemInfo + globalAdapter.isSubContext = false; // sub context not supported + globalAdapter.isDevTool = my.isIDE; + utils.cloneMethod(globalAdapter, my, 'getSystemInfoSync'); + + // Audio + globalAdapter.createInnerAudioContext = function () { + let audio = my.createInnerAudioContext(); + if (my.getSystemInfoSync().platform === 'iOS') { + let currentTime = 0; + let originalSeek = audio.seek; + audio.seek = function (time) { + // need to access audio.paused in the next tick + setTimeout(() => { + if (audio.paused) { + currentTime = time; + } else { + originalSeek.call(audio, time); + } + }, 50); + }; + + let originalPlay = audio.play; + audio.play = function () { + if (currentTime !== 0) { + audio.seek(currentTime); + currentTime = 0; // clear cached currentTime + } + originalPlay.call(audio); + }; + } + return audio; + }; + + // FrameRate + // utils.cloneMethod(globalAdapter, my, 'setPreferredFramesPerSecond'); + + // Keyboard + globalAdapter.showKeyboard = () => console.warn('showKeyboard not supported.'); + globalAdapter.hideKeyboard = () => console.warn('hideKeyboard not supported.'); + globalAdapter.updateKeyboard = () => console.warn('updateKeyboard not supported.'); + globalAdapter.onKeyboardInput = () => console.warn('onKeyboardInput not supported.'); + globalAdapter.onKeyboardConfirm = () => console.warn('onKeyboardConfirm not supported.'); + globalAdapter.onKeyboardComplete = () => console.warn('onKeyboardComplete not supported.'); + globalAdapter.offKeyboardInput = () => console.warn('offKeyboardInput not supported.'); + globalAdapter.offKeyboardConfirm = () => console.warn('offKeyboardConfirm not supported.'); + globalAdapter.offKeyboardComplete = () => console.warn('offKeyboardComplete not supported.'); + + // Message + utils.cloneMethod(globalAdapter, my, 'getOpenDataContext'); + utils.cloneMethod(globalAdapter, my, 'onMessage'); + + // Subpackage not supported + // utils.cloneMethod(globalAdapter, my, 'loadSubpackage'); + + // SharedCanvas + utils.cloneMethod(globalAdapter, my, 'getSharedCanvas'); + + // Font + globalAdapter.loadFont = function (url) { + // my.loadFont crash when url is not in user data path + return "Arial"; + }; + + // hide show Event + utils.cloneMethod(globalAdapter, my, 'onShow'); + utils.cloneMethod(globalAdapter, my, 'onHide'); + + // Accelerometer + let accelerometerCallback = null; + let systemInfo = my.getSystemInfoSync(); + let windowWidth = systemInfo.windowWidth; + let windowHeight = systemInfo.windowHeight; + let isLandscape = windowWidth > windowHeight; + function accelerometerChangeCallback (res, cb) { + let resClone = {}; + + let x = res.x; + let y = res.y; + + if (isLandscape) { + let tmp = x; + x = -y; + y = tmp; + } + + resClone.x = x; + resClone.y = y; + resClone.z = res.z; + accelerometerCallback && accelerometerCallback(resClone); + } + Object.assign(globalAdapter, { + startAccelerometer (cb) { + accelerometerCallback = cb; + my.onAccelerometerChange && my.onAccelerometerChange(accelerometerChangeCallback); + }, + + stopAccelerometer () { + my.offAccelerometerChange && my.offAccelerometerChange(accelerometerChangeCallback); + }, + }); +} \ No newline at end of file diff --git a/platforms/minigame/platforms/taobao/wrapper/utils.js b/platforms/minigame/platforms/taobao/wrapper/utils.js new file mode 100644 index 00000000000..947fc069588 --- /dev/null +++ b/platforms/minigame/platforms/taobao/wrapper/utils.js @@ -0,0 +1,16 @@ +let utils = { + /** + * @param {Object} target + * @param {Object} origin + * @param {String} methodName + * @param {String} targetMethodName + */ + cloneMethod (target, origin, methodName, targetMethodName) { + if (origin[methodName]) { + targetMethodName = targetMethodName || methodName; + target[targetMethodName] = origin[methodName].bind(origin); + } + } +}; + +module.exports = utils; \ No newline at end of file diff --git a/scripts/build-engine/src/constant-manager.ts b/scripts/build-engine/src/constant-manager.ts index c85e0b69603..4f90268f12d 100644 --- a/scripts/build-engine/src/constant-manager.ts +++ b/scripts/build-engine/src/constant-manager.ts @@ -4,7 +4,7 @@ import { Config, IConstantConfig, IConstantInfo } from './config-interface'; export type ModeType = 'EDITOR' | 'PREVIEW' | 'BUILD' | 'TEST'; export type PlatformType = 'HTML5' | 'NATIVE' | - 'WECHAT' | 'BAIDU' | 'XIAOMI' | 'ALIPAY' | 'BYTEDANCE' | + 'WECHAT' | 'BAIDU' | 'XIAOMI' | 'ALIPAY' | 'TAOBAO' | 'BYTEDANCE' | 'OPPO' | 'VIVO' | 'HUAWEI' | 'COCOSPLAY' | 'QTT' | 'LINKSURE'; export type InternalFlagType = 'SERVER_MODE' | 'NOT_PACK_PHYSX_LIBS'; export type PublicFlagType = 'DEBUG' | 'NET_MODE'; diff --git a/templates/taobao-creative-app/app.acss b/templates/taobao-creative-app/app.acss new file mode 100644 index 00000000000..b0c2c7f0489 --- /dev/null +++ b/templates/taobao-creative-app/app.acss @@ -0,0 +1,5 @@ +page { + background: #f7f7f7; + display: flex; + flex: 1; +} diff --git a/templates/taobao-creative-app/app.ejs b/templates/taobao-creative-app/app.ejs new file mode 100644 index 00000000000..4d2ab12731a --- /dev/null +++ b/templates/taobao-creative-app/app.ejs @@ -0,0 +1,44 @@ +$global._onShowCB = null; +$global._onHideCB = null; + +App({ + onLaunch: function onLaunch(options) { + console.info('App onLaunched'); + + $global.__onCanvasCreated = function () { + require('./<%= polyfillsBundleFile %>'); + require('./<%= systemJsBundleFile %>'); + require('./load-module.js'); + const importMap = require('./<%= importMapFile %>').default; + let System = $global.System; + System.warmup({ + importMap, + importMapUrl: 'src/import-map.js', + }); + System.import('./web-adapter.js') + .then(() => { + return System.import('cc'); + }) + .then((cc) => { + return System.import('./engine-adapter.js') + .then(() => { + return System.import('<%= applicationJs %>') + .then(({ Application }) => { + const application = new Application(); + application.init(cc); + return application.start(); + }); + }); + }) + .catch((err) => { + console.error(err); + }); + }; + }, + onShow: function onShow(options) { + $global._onShowCB && $global._onShowCB(); + }, + onHide: function onHide(options) { + $global._onHideCB && $global._onHideCB(); + } +}); \ No newline at end of file diff --git a/templates/taobao-creative-app/app.json b/templates/taobao-creative-app/app.json new file mode 100644 index 00000000000..f5cc8326b34 --- /dev/null +++ b/templates/taobao-creative-app/app.json @@ -0,0 +1,11 @@ +{ + "pages": [ + "pages/index/index" + ], + "window": { + "defaultTitle": "CocosCreator", + "allowsBounceVertical":"NO", + "enableMultiAudio":true, + "enableSkia":true + } +} diff --git a/templates/taobao-creative-app/mini.project.json b/templates/taobao-creative-app/mini.project.json new file mode 100644 index 00000000000..84539fa4c17 --- /dev/null +++ b/templates/taobao-creative-app/mini.project.json @@ -0,0 +1,9 @@ +{ + "include": [ + "**/assets/**/*", + "**/remote/**/*", + "**/src/**/*" + ], + "enableAppxNg": true, + "component2": true +} diff --git a/templates/taobao-creative-app/pages/index/index.axml b/templates/taobao-creative-app/pages/index/index.axml new file mode 100644 index 00000000000..b4c6524ebdc --- /dev/null +++ b/templates/taobao-creative-app/pages/index/index.axml @@ -0,0 +1,12 @@ + + + \ No newline at end of file diff --git a/templates/taobao-creative-app/pages/index/index.js b/templates/taobao-creative-app/pages/index/index.js new file mode 100644 index 00000000000..5bd0c416a12 --- /dev/null +++ b/templates/taobao-creative-app/pages/index/index.js @@ -0,0 +1,39 @@ +$global._touchstartCB = null; +$global._touchcancelCB = null; +$global._touchendCB = null; +$global._touchmoveCB = null; + +Page({ + onReady () { }, + onError (err) { + console.error('error in page: ', err); + }, + onTouchStart (event) { + $global._touchstartCB && $global._touchstartCB(event); + }, + onTouchCancel (event) { + $global._touchcancelCB && $global._touchcancelCB(event); + }, + onTouchEnd (event) { + $global._touchendCB && $global._touchendCB(event); + }, + onTouchMove (event) { + $global._touchmoveCB && $global._touchmoveCB(event); + }, + canvasOnReady () { + my.createCanvas({ + id:'GameCanvas', + success(canvas){ + $global.screencanvas = canvas; + if (!canvas.addEventListener) { + // fix: undefined addEventListener + canvas.addEventListener = function () {} + } + $global.__onCanvasCreated(); + }, + fail (err) { + console.error('failed to init on screen canvas', err) + } + }); + } +}); diff --git a/templates/taobao-creative-app/pages/index/index.json b/templates/taobao-creative-app/pages/index/index.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/templates/taobao-creative-app/pages/index/index.json @@ -0,0 +1 @@ +{} \ No newline at end of file From 31ad5ab9e13f4ea752ac001214e54573df9e209e Mon Sep 17 00:00:00 2001 From: ycg <1670543365@qq.com> Date: Tue, 27 Sep 2022 09:52:30 +0800 Subject: [PATCH 002/829] Adapter System-info on Taobao (#12867) * Adapter System-info on Taobao * add 'zh_CN' for iPad --- @types/pal/minigame.d.ts | 2 +- pal/minigame/taobao.ts | 40 ++++++++++++------------- pal/system-info/minigame/system-info.ts | 2 +- 3 files changed, 21 insertions(+), 23 deletions(-) diff --git a/@types/pal/minigame.d.ts b/@types/pal/minigame.d.ts index 54fe041bc8d..83bb7a3acd6 100644 --- a/@types/pal/minigame.d.ts +++ b/@types/pal/minigame.d.ts @@ -23,7 +23,7 @@ declare module 'pal/minigame' { * @returns {SafeArea} An interface displaying the data of safe area, including 'top', 'bottom', 'left', 'right', 'width' and 'height'. */ getSafeArea(): SafeArea; - triggerGC(): void; + triggerGC?(): void; getBatteryInfoSync(): BatteryInfo; exitMiniProgram? (): void; diff --git a/pal/minigame/taobao.ts b/pal/minigame/taobao.ts index f025ef3ae58..ea3d9989930 100644 --- a/pal/minigame/taobao.ts +++ b/pal/minigame/taobao.ts @@ -1,6 +1,15 @@ -import { IMiniGame } from 'pal/minigame'; +import { IMiniGame, SystemInfo } from 'pal/minigame'; import { Orientation } from '../screen-adapter/enum-type'; import { cloneObject } from '../utils'; +import { Language } from '../system-info/enum-type'; + +//taobao IDE language ("Chinese") +//taobao phone language (Andrond: "cn", iPad: 'zh_CN') +const languageMap: Record = { + Chinese: Language.CHINESE, + cn: Language.CHINESE, + zh_CN: Language.CHINESE, +}; declare let my: any; @@ -10,6 +19,9 @@ cloneObject(minigame, my); // #region SystemInfo const systemInfo = minigame.getSystemInfoSync(); +systemInfo.language = languageMap[systemInfo.language] || systemInfo.language; +minigame.getSystemInfoSync = () => systemInfo; + minigame.isDevTool = my.isIDE; minigame.isLandscape = systemInfo.screenWidth > systemInfo.screenHeight; @@ -30,19 +42,6 @@ Object.defineProperty(minigame, 'orientation', { }); // #endregion SystemInfo -minigame.createInnerAudioContext = function (): InnerAudioContext { - const audio: InnerAudioContext = my.createInnerAudioContext(); - // @ts-expect-error InnerAudioContext has onCanPlay - audio.onCanplay = audio.onCanPlay.bind(audio); - // @ts-expect-error InnerAudioContext has offCanPlay - audio.offCanplay = audio.offCanPlay.bind(audio); - // @ts-expect-error InnerAudioContext has onCanPlay - delete audio.onCanPlay; - // @ts-expect-error InnerAudioContext has offCanPlay - delete audio.offCanPlay; - return audio; -}; - // #region Font minigame.loadFont = function (url) { // my.loadFont crash when url is not in user data path @@ -57,13 +56,12 @@ minigame.onAccelerometerChange = function (cb: AccelerometerChangeCallback) { // onAccelerometerChange would start accelerometer // so we won't call this method here _accelerometerCb = (res: any) => { - let x = res.x; - let y = res.y; + let x: number = res.x; + let y: number = res.y; if (minigame.isLandscape) { - const orientationFactor = (landscapeOrientation === Orientation.LANDSCAPE_RIGHT ? 1 : -1); - const tmp = x; - x = -y * orientationFactor; - y = tmp * orientationFactor; + const orientationFactor: number = (landscapeOrientation === Orientation.LANDSCAPE_RIGHT ? 1 : -1); + x = -res.y * orientationFactor; + y = res.x * orientationFactor; } const resClone = { @@ -85,7 +83,7 @@ minigame.startAccelerometer = function (res: any) { my.onAccelerometerChange(_accelerometerCb); } else { // my.startAccelerometer() is not implemented. - console.error('minigame.onAccelerometerChange() should be invoked before minigame.startAccelerometer() on alipay platform'); + console.error('minigame.onAccelerometerChange() should be invoked before minigame.startAccelerometer() on taobao platform'); } }; minigame.stopAccelerometer = function (res: any) { diff --git a/pal/system-info/minigame/system-info.ts b/pal/system-info/minigame/system-info.ts index a640c5b4e11..8c45b35c77c 100644 --- a/pal/system-info/minigame/system-info.ts +++ b/pal/system-info/minigame/system-info.ts @@ -145,7 +145,7 @@ class SystemInfo extends EventTarget { return minigame.getBatteryInfoSync().level / 100; } public triggerGC (): void { - minigame.triggerGC(); + minigame.triggerGC?.(); } public openURL (url: string): void { if (DEBUG) { From 6bb3c084cd083130345c57dd2de7bbf29f1e581e Mon Sep 17 00:00:00 2001 From: PP Date: Tue, 27 Sep 2022 10:13:50 +0800 Subject: [PATCH 003/829] fix: undefined window.__globalAdapter && loading remote image on Taobao IDE (#12901) * fix: undefined window.__globalAdapter * fix: loading remote image on Taobao IDE --- .../taobao/wrapper/engine/AssetManager.js | 65 +++++++++++++------ .../platforms/taobao/wrapper/unify.js | 1 + 2 files changed, 45 insertions(+), 21 deletions(-) diff --git a/platforms/minigame/platforms/taobao/wrapper/engine/AssetManager.js b/platforms/minigame/platforms/taobao/wrapper/engine/AssetManager.js index 613db05359f..eac926acbb2 100644 --- a/platforms/minigame/platforms/taobao/wrapper/engine/AssetManager.js +++ b/platforms/minigame/platforms/taobao/wrapper/engine/AssetManager.js @@ -2,25 +2,48 @@ const parser = cc.assetManager.parser; const downloader = cc.assetManager.downloader; const debug = cc.debug; -function downloadImage (url, options, onComplete) { +function downloadImage(url, options, onComplete) { + onComplete(null, url); +} + +if (my.isIDE) { + // NOTE: image can't load from cached downloaded file on Taobao IDE + downloader.register({ + // Image + '.png': downloadImage, + '.jpg': downloadImage, + '.bmp': downloadImage, + '.jpeg': downloadImage, + '.gif': downloadImage, + '.ico': downloadImage, + '.tiff': downloadImage, + '.image': downloadImage, + '.webp': downloadImage, + '.pvr': downloadImage, + '.pkm': downloadImage, + '.astc': downloadImage, + }); +} + +function loadImage(url, options, onComplete) { const img = window.screencanvas.createImage(); function loadCallback() { - img.onload = null; - img.onerror = null; + img.onload = null; + img.onerror = null; - if (onComplete) { - onComplete(null, img); - } + if (onComplete) { + onComplete(null, img); + } } function errorCallback() { - img.onload = null; - img.onerror = null; + img.onload = null; + img.onerror = null; - if (onComplete) { - onComplete(new Error(debug.getError(4930, url))); - } + if (onComplete) { + onComplete(new Error(debug.getError(4930, url))); + } } img.onload = loadCallback; @@ -29,16 +52,16 @@ function downloadImage (url, options, onComplete) { return img; } -downloader.downloadDomImage = downloadImage; +downloader.downloadDomImage = loadImage; parser.register({ - '.png': downloadImage, - '.jpg': downloadImage, - '.bmp': downloadImage, - '.jpeg': downloadImage, - '.gif': downloadImage, - '.ico': downloadImage, - '.tiff': downloadImage, - '.image': downloadImage, - '.webp': downloadImage, + '.png': loadImage, + '.jpg': loadImage, + '.bmp': loadImage, + '.jpeg': loadImage, + '.gif': loadImage, + '.ico': loadImage, + '.tiff': loadImage, + '.image': loadImage, + '.webp': loadImage, }); diff --git a/platforms/minigame/platforms/taobao/wrapper/unify.js b/platforms/minigame/platforms/taobao/wrapper/unify.js index 34213eaf361..fb2f1f99edf 100644 --- a/platforms/minigame/platforms/taobao/wrapper/unify.js +++ b/platforms/minigame/platforms/taobao/wrapper/unify.js @@ -45,6 +45,7 @@ my.onHide = function (cb) { $global._onHideCB = cb; }; +window.__globalAdapter = window.__globalAdapter || {}; if (window.__globalAdapter) { let globalAdapter = window.__globalAdapter; // SystemInfo From 92071ef73893e2e5e64c25b8735991f39a074f9b Mon Sep 17 00:00:00 2001 From: lingzhan Date: Tue, 27 Sep 2022 15:53:59 +0800 Subject: [PATCH 004/829] physx backend remove updateCenterOfMass --- cocos/physics/physx/physx-shared-body.ts | 14 -------------- cocos/physics/physx/shapes/physx-shape.ts | 3 --- native/cocos/physics/physx/PhysXSharedBody.cpp | 12 ------------ native/cocos/physics/physx/PhysXSharedBody.h | 1 - native/cocos/physics/physx/shapes/PhysXShape.cpp | 1 - 5 files changed, 31 deletions(-) diff --git a/cocos/physics/physx/physx-shared-body.ts b/cocos/physics/physx/physx-shared-body.ts index 3c9ec0a9c27..66a6a0d4297 100644 --- a/cocos/physics/physx/physx-shared-body.ts +++ b/cocos/physics/physx/physx-shared-body.ts @@ -211,7 +211,6 @@ export class PhysXSharedBody { this.impl.attachShape(ws.impl); this.wrappedShapes.push(ws); if (!ws.collider.isTrigger) { - if (!Vec3.strictEquals(ws.collider.center, Vec3.ZERO)) this.updateCenterOfMass(); if (this.isDynamic) setMassAndUpdateInertia(this.impl, this._wrappedBody!.rigidBody.mass); } } @@ -224,7 +223,6 @@ export class PhysXSharedBody { this.impl.detachShape(ws.impl, true); fastRemoveAt(this.wrappedShapes, index); if (!ws.collider.isTrigger) { - if (!Vec3.strictEquals(ws.collider.center, Vec3.ZERO)) this.updateCenterOfMass(); if (this.isDynamic) setMassAndUpdateInertia(this.impl, this._wrappedBody!.rigidBody.mass); } } @@ -388,18 +386,6 @@ export class PhysXSharedBody { } } - updateCenterOfMass (): void { - this._initActor(); - if (this._isStatic) return; - const center = VEC3_0; - center.set(0, 0, 0); - for (let i = 0; i < this.wrappedShapes.length; i++) { - const collider = this.wrappedShapes[i].collider; - if (!collider.isTrigger) center.subtract(collider.center); - } - this.impl.setCMassLocalPose(getTempTransform(center, Quat.IDENTITY)); - } - clearForces (): void { if (this._isStatic || this._isKinematic) return; this.impl.clearForce(PX.ForceMode.eFORCE); // this.impl.clearForce(PX.ForceMode.eACCELERATION); diff --git a/cocos/physics/physx/shapes/physx-shape.ts b/cocos/physics/physx/shapes/physx-shape.ts index 9f1cb4f9f0d..20db8510a87 100644 --- a/cocos/physics/physx/shapes/physx-shape.ts +++ b/cocos/physics/physx/shapes/physx-shape.ts @@ -168,9 +168,6 @@ export class PhysXShape implements IBaseShape { Quat.copy(rot, this._rotation); const trans = getTempTransform(pos, rot); this._impl.setLocalPose(trans); - if (this._collider.enabled && !this._collider.isTrigger) { - this._sharedBody.updateCenterOfMass(); - } } getAABB (v: AABB): void { diff --git a/native/cocos/physics/physx/PhysXSharedBody.cpp b/native/cocos/physics/physx/PhysXSharedBody.cpp index 9641ac3ac05..67163860be8 100644 --- a/native/cocos/physics/physx/PhysXSharedBody.cpp +++ b/native/cocos/physics/physx/PhysXSharedBody.cpp @@ -197,16 +197,6 @@ void PhysXSharedBody::initDynamicActor() { } } -void PhysXSharedBody::updateCenterOfMass() { - initActor(); - if (isStatic()) return; - PxTransform com{PxIdentity}; - for (auto const &ws : _mWrappedShapes) { - if (!ws->isTrigger()) com.p -= ws->getCenter(); - } - _mDynamicActor->setCMassLocalPose(com); -} - void PhysXSharedBody::syncScale() { for (auto const &sb : _mWrappedShapes) { sb->updateScale(); @@ -281,7 +271,6 @@ void PhysXSharedBody::addShape(const PhysXShape &shape) { getImpl().rigidActor->attachShape(shape.getShape()); _mWrappedShapes.push_back(&const_cast(shape)); if (!shape.isTrigger()) { - if (!const_cast(shape).getCenter().isZero()) updateCenterOfMass(); if (isDynamic()) PxRigidBodyExt::setMassAndUpdateInertia(*getImpl().rigidDynamic, _mMass); } } @@ -295,7 +284,6 @@ void PhysXSharedBody::removeShape(const PhysXShape &shape) { _mWrappedShapes.erase(iter); getImpl().rigidActor->detachShape(shape.getShape(), true); if (!const_cast(shape).isTrigger()) { - if (!const_cast(shape).getCenter().isZero()) updateCenterOfMass(); if (isDynamic()) PxRigidBodyExt::setMassAndUpdateInertia(*getImpl().rigidDynamic, _mMass); } } diff --git a/native/cocos/physics/physx/PhysXSharedBody.h b/native/cocos/physics/physx/PhysXSharedBody.h index f3639d215e6..13fe99a8145 100644 --- a/native/cocos/physics/physx/PhysXSharedBody.h +++ b/native/cocos/physics/physx/PhysXSharedBody.h @@ -68,7 +68,6 @@ class PhysXSharedBody final { void syncSceneToPhysics(); void syncSceneWithCheck(); void syncPhysicsToScene(); - void updateCenterOfMass(); void addShape(const PhysXShape &shape); void removeShape(const PhysXShape &shape); void addJoint(const PhysXJoint &joint, physx::PxJointActorIndex::Enum index); diff --git a/native/cocos/physics/physx/shapes/PhysXShape.cpp b/native/cocos/physics/physx/shapes/PhysXShape.cpp index b273f24ed36..19154c285fe 100644 --- a/native/cocos/physics/physx/shapes/PhysXShape.cpp +++ b/native/cocos/physics/physx/shapes/PhysXShape.cpp @@ -137,7 +137,6 @@ void PhysXShape::updateCenter() { node->updateWorldTransform(); physx::PxTransform local{_mCenter * node->getWorldScale(), _mRotation}; getShape().setLocalPose(local); - if (_mEnabled && !isTrigger()) sb.updateCenterOfMass(); } void PhysXShape::insertToShapeMap() { From 1eef64d2ca6a6e35adf410f25d7eddeb1fde8747 Mon Sep 17 00:00:00 2001 From: lingzhan Date: Tue, 27 Sep 2022 18:18:10 +0800 Subject: [PATCH 005/829] more --- cocos/physics/physx/physx-shared-body.ts | 7 ------- native/cocos/physics/physx/PhysXSharedBody.cpp | 5 ----- 2 files changed, 12 deletions(-) diff --git a/cocos/physics/physx/physx-shared-body.ts b/cocos/physics/physx/physx-shared-body.ts index 66a6a0d4297..54584ecc34f 100644 --- a/cocos/physics/physx/physx-shared-body.ts +++ b/cocos/physics/physx/physx-shared-body.ts @@ -193,13 +193,6 @@ export class PhysXSharedBody { if (isStaticBefore) { const da = this._dynamicActor; setMassAndUpdateInertia(da, this._wrappedBody!.rigidBody.mass); - const center = VEC3_0; - center.set(0, 0, 0); - for (let i = 0; i < this.wrappedShapes.length; i++) { - const collider = this.wrappedShapes[i].collider; - if (!collider.isTrigger) center.subtract(collider.center); - } - da.setCMassLocalPose(getTempTransform(center, Quat.IDENTITY)); } } diff --git a/native/cocos/physics/physx/PhysXSharedBody.cpp b/native/cocos/physics/physx/PhysXSharedBody.cpp index 67163860be8..87c0c1c4689 100644 --- a/native/cocos/physics/physx/PhysXSharedBody.cpp +++ b/native/cocos/physics/physx/PhysXSharedBody.cpp @@ -162,11 +162,6 @@ void PhysXSharedBody::switchActor(const bool isStaticBefore) { if (isDynamic()) _mDynamicActor->wakeUp(); _mDynamicActor->setRigidBodyFlag(PxRigidBodyFlag::eKINEMATIC, isKinematic()); PxRigidBodyExt::setMassAndUpdateInertia(*_mDynamicActor, _mMass); - PxTransform com{PxIdentity}; - for (auto const &ws : _mWrappedShapes) { - if (!ws->isTrigger()) com.p -= ws->getCenter(); - } - _mDynamicActor->setCMassLocalPose(com); } } From 1181b10f2925080b10f911445df13b189c9f4698 Mon Sep 17 00:00:00 2001 From: ycg <1670543365@qq.com> Date: Wed, 28 Sep 2022 13:36:19 +0800 Subject: [PATCH 006/829] Adapter screen-adapter on Taobao (#12922) * Adapter System-info on Taobao * add 'zh_CN' for iPad * Adapter screen-adapter on Taobao * Remove useless comments --- pal/minigame/taobao.ts | 11 ++++++----- platforms/minigame/platforms/taobao/wrapper/unify.js | 3 --- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/pal/minigame/taobao.ts b/pal/minigame/taobao.ts index ea3d9989930..bc17e0247b6 100644 --- a/pal/minigame/taobao.ts +++ b/pal/minigame/taobao.ts @@ -93,16 +93,17 @@ minigame.stopAccelerometer = function (res: any) { // #endregion Accelerometer // #region SafeArea +// It should be a value that is not multiplied by dpr minigame.getSafeArea = function () { console.warn('getSafeArea is not supported on this platform'); - const systemInfo = minigame.getSystemInfoSync(); + const systemInfo = minigame.getSystemInfoSync(); return { top: 0, left: 0, - bottom: systemInfo.screenHeight, - right: systemInfo.screenWidth, - width: systemInfo.screenWidth, - height: systemInfo.screenHeight, + bottom: systemInfo.windowHeight, + right: systemInfo.windowWidth, + width: systemInfo.windowWidth, + height: systemInfo.windowHeight, }; }; // #endregion SafeArea diff --git a/platforms/minigame/platforms/taobao/wrapper/unify.js b/platforms/minigame/platforms/taobao/wrapper/unify.js index fb2f1f99edf..aba15f39505 100644 --- a/platforms/minigame/platforms/taobao/wrapper/unify.js +++ b/platforms/minigame/platforms/taobao/wrapper/unify.js @@ -1,9 +1,6 @@ const utils = require('./utils'); function handleTouchEvent (event) { - if (my.isIDE) { - return; - } let changedTouches = event.changedTouches; if (changedTouches) { for (let touch of changedTouches) { From e5f4a78f84f37a241dd6f4616ffaf5e4d6a2d1d2 Mon Sep 17 00:00:00 2001 From: Cocos Robot <48829427+cocos-robot@users.noreply.github.com> Date: Wed, 12 Oct 2022 13:37:48 +0800 Subject: [PATCH 007/829] [ci skip][AUTO]: Automated code generating update: 0c6e952eaa007a90994f529547de2b0335f11b22 (#12964) (#13016) Co-authored-by: cocos-robot --- native/cocos/core/builtin/DebugInfos.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/native/cocos/core/builtin/DebugInfos.cpp b/native/cocos/core/builtin/DebugInfos.cpp index 78ac73a4b72..5db5f4b9051 100644 --- a/native/cocos/core/builtin/DebugInfos.cpp +++ b/native/cocos/core/builtin/DebugInfos.cpp @@ -450,6 +450,7 @@ ccstd::unordered_map debugInfos = { { 15002, "Diffuse map resource is missing, please change environment lighting type to regenerate resource" }, { 15003, "The shadow visible distance is so small that CSM stratification is not effective, Please change the value of shadowDistance so that it is 10 times greater than 0.1" }, { 15004, "The native folder may be generated from older versions, please refer https://docs.cocos.com/creator/manual/en/release-notes/ to upgrade." }, +{ 15100, "Camera '%s' clear flag is skybox, but skybox is disabled, may cause strange background effect, please set camera clear flag to solid color." }, { 16000, "'%s' is deprecated since v%s." }, { 16001, "'%s' is deprecated since v%s, please use '%s' instead." }, { 16002, "'%s' is removed since v%s." }, From e606512a115df175d82c793951a04c2248eb74d6 Mon Sep 17 00:00:00 2001 From: GengineJS <476393671@qq.com> Date: Wed, 12 Oct 2022 16:08:35 +0800 Subject: [PATCH 008/829] clear skybox (#13019) --- cocos/core/pipeline/render-pipeline.ts | 3 +-- cocos/core/pipeline/scene-culling.ts | 6 +++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/cocos/core/pipeline/render-pipeline.ts b/cocos/core/pipeline/render-pipeline.ts index ec8abc0521f..5d4837ff83b 100644 --- a/cocos/core/pipeline/render-pipeline.ts +++ b/cocos/core/pipeline/render-pipeline.ts @@ -37,7 +37,6 @@ import { MacroRecord } from '../renderer/core/pass-utils'; import { RenderWindow } from '../renderer/core/render-window'; import { Camera, SKYBOX_FLAG } from '../renderer/scene/camera'; import { Model } from '../renderer/scene/model'; -import { Root } from '../root'; import { GlobalDSManager } from './global-descriptor-set-manager'; import { GeometryRenderer } from './geometry-renderer'; import { PipelineSceneData } from './pipeline-scene-data'; @@ -306,7 +305,7 @@ export abstract class RenderPipeline extends Asset implements IPipelineEvent, Pi if (!(clearFlags & ClearFlagBit.COLOR)) { if (clearFlags & SKYBOX_FLAG) { - colorAttachment.loadOp = LoadOp.DISCARD; + colorAttachment.loadOp = LoadOp.CLEAR; } else { colorAttachment.loadOp = LoadOp.LOAD; colorAttachment.barrier = device.getGeneralBarrier(new GeneralBarrierInfo( diff --git a/cocos/core/pipeline/scene-culling.ts b/cocos/core/pipeline/scene-culling.ts index 2988cf73f25..8a9c70dc3fe 100644 --- a/cocos/core/pipeline/scene-culling.ts +++ b/cocos/core/pipeline/scene-culling.ts @@ -30,10 +30,10 @@ import { Vec3 } from '../math'; import { RenderPipeline } from './render-pipeline'; import { Pool } from '../memop'; import { IRenderObject, UBOShadow } from './define'; -import { ShadowType, Shadows, CSMOptimizationMode } from '../renderer/scene/shadows'; +import { ShadowType, CSMOptimizationMode } from '../renderer/scene/shadows'; import { PipelineSceneData } from './pipeline-scene-data'; import { ShadowLayerVolume } from './shadow/csm-layers'; -import { warnID } from '../platform'; +import { legacyCC } from '../global-exports'; const _tempVec3 = new Vec3(); const _sphere = Sphere.create(0, 0, 0, 1); @@ -150,7 +150,7 @@ export function sceneCulling (pipeline: RenderPipeline, camera: Camera) { if (skybox.enabled && skybox.model) { renderObjects.push(getRenderObject(skybox.model, camera)); } else { - warnID(15100, camera.name); + legacyCC.warnID(15100, camera.name); } } From 1f95dc7b8adf83aa333b772e468051a6556369d8 Mon Sep 17 00:00:00 2001 From: bofeng-song Date: Wed, 12 Oct 2022 16:23:24 +0800 Subject: [PATCH 009/829] Fix the problem of opposite vertical offset of shadow at ios (#13023) * Fix the problem of opposite vertical offset of shadow at ios --- .../modules/CanvasRenderingContext2DDelegate.mm | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/native/cocos/platform/apple/modules/CanvasRenderingContext2DDelegate.mm b/native/cocos/platform/apple/modules/CanvasRenderingContext2DDelegate.mm index 0e79e12d8a2..00483962f33 100644 --- a/native/cocos/platform/apple/modules/CanvasRenderingContext2DDelegate.mm +++ b/native/cocos/platform/apple/modules/CanvasRenderingContext2DDelegate.mm @@ -380,7 +380,12 @@ - (void)fillText:(NSString *)text x:(CGFloat)x y:(CGFloat)y maxWidth:(CGFloat)ma CGContextBeginTransparencyLayerWithRect(_context, CGRectMake(0, 0, _width, _height), nullptr); CGContextSetTextDrawingMode(_context, kCGTextFill); if ([self isShadowEnabled]) { - CGContextSetShadowWithColor(_context, CGSizeMake(_shadowOffsetX, _shadowOffsetY), _shadowBlur, _shadowColor.CGColor); + // https://developer.apple.com/library/archive/documentation/2DDrawing/Conceptual/DrawingPrintingiOS/GraphicsDrawingOverview/GraphicsDrawingOverview.html + /* Core Graphics uses lower-left-origin coordinate system; + but the api CGContextSetShadowWithColor's parameter 'offset' accept base space(relative to view: upper-left-origin coordinate system), + and _shadowOffsetY is edited by lower-left-origin coordinate system, so here we need to multiply the change in y direction by -1 + */ + CGContextSetShadowWithColor(_context, CGSizeMake(_shadowOffsetX, -_shadowOffsetY), _shadowBlur, _shadowColor.CGColor); } NSAttributedString *stringWithAttributes = [[[NSAttributedString alloc] initWithString:text @@ -423,7 +428,12 @@ - (void)strokeText:(NSString *)text x:(CGFloat)x y:(CGFloat)y maxWidth:(CGFloat) CGContextSetTextDrawingMode(_context, kCGTextStroke); if ([self isShadowEnabled]) { - CGContextSetShadowWithColor(_context, CGSizeMake(_shadowOffsetX, _shadowOffsetY), _shadowBlur, _shadowColor.CGColor); + // https://developer.apple.com/library/archive/documentation/2DDrawing/Conceptual/DrawingPrintingiOS/GraphicsDrawingOverview/GraphicsDrawingOverview.html + /* Core Graphics uses lower-left-origin coordinate system; + but the api CGContextSetShadowWithColor's parameter 'offset' accept base space(relative to view: upper-left-origin coordinate system), + and _shadowOffsetY is edited by lower-left-origin coordinate system, so here we need to multiply the change in y direction by -1 + */ + CGContextSetShadowWithColor(_context, CGSizeMake(_shadowOffsetX, -_shadowOffsetY), _shadowBlur, _shadowColor.CGColor); } NSAttributedString *stringWithAttributes = [[[NSAttributedString alloc] initWithString:text From cb94696fd77ceac466fcf7bd53cd7c78ed6a6811 Mon Sep 17 00:00:00 2001 From: jk20012001 Date: Thu, 13 Oct 2022 10:57:05 +0800 Subject: [PATCH 010/829] [fix] AO texture and switch #14141 (#13029) --- editor/assets/effects/builtin-standard.effect | 4 ++-- .../assets/effects/dcc/imported-metallic-roughness.effect | 7 ++++--- .../dcc/surfaces-imported-metallic-roughness.effect | 7 ++++--- editor/assets/effects/surfaces/standard.effect | 4 ++-- 4 files changed, 12 insertions(+), 10 deletions(-) diff --git a/editor/assets/effects/builtin-standard.effect b/editor/assets/effects/builtin-standard.effect index 22f9a4ba2f2..ecbb299029c 100644 --- a/editor/assets/effects/builtin-standard.effect +++ b/editor/assets/effects/builtin-standard.effect @@ -274,7 +274,7 @@ CCProgram standard-fs %{ HIGHP_VALUE_TO_STRUCT_DEFINED(v_position, s.position); vec4 pbr = pbrParams; - pbr.x = 1.0 - pbr.x; + pbr.x = 1.0; #if USE_PBR_MAP vec4 res = texture(pbrMap, PBR_UV); pbr.x *= res.OCCLUSION_CHANNEL; @@ -288,7 +288,7 @@ CCProgram standard-fs %{ pbr.y *= metallicRoughness.ROUGHNESS_CHANNEL; #endif #if USE_OCCLUSION_MAP - pbr.x *= texture(occlusionMap, PBR_UV).OCCLUSION_CHANNEL; + pbr.x = mix(1.0, texture(occlusionMap, PBR_UV).OCCLUSION_CHANNEL, pbrParams.x); #endif s.occlusion = pbr.x; s.roughness = pbr.y; diff --git a/editor/assets/effects/dcc/imported-metallic-roughness.effect b/editor/assets/effects/dcc/imported-metallic-roughness.effect index c704fc96cea..02799beee2f 100644 --- a/editor/assets/effects/dcc/imported-metallic-roughness.effect +++ b/editor/assets/effects/dcc/imported-metallic-roughness.effect @@ -307,14 +307,15 @@ CCProgram standard-fs %{ s.roughness = max(0.02, roughnessValue); - float occlusionValue = 1.0 - occlusion; + float occlusionValue = 1.0; #if USE_OCCLUSION_MAP vec4 occlusionColor = texture(occlusionMap, TEXTURE_UV); - occlusionValue = discolor(occlusionColor.rgb); + float occlusionColorValue = discolor(occlusionColor.rgb); #if USE_OCCLUSION_CHANNEL occlusionColor.rgb = SRGBToLinear(occlusionColor.rgb); - occlusionValue = occlusionColor.OCCLUSION_CHANNEL; + occlusionColorValue = occlusionColor.OCCLUSION_CHANNEL; #endif + occlusionValue = mix(1.0, occlusionColorValue, occlusion); #endif s.occlusion = occlusionValue; diff --git a/editor/assets/effects/dcc/surfaces-imported-metallic-roughness.effect b/editor/assets/effects/dcc/surfaces-imported-metallic-roughness.effect index 1886e628d07..3c7d35539ab 100644 --- a/editor/assets/effects/dcc/surfaces-imported-metallic-roughness.effect +++ b/editor/assets/effects/dcc/surfaces-imported-metallic-roughness.effect @@ -291,14 +291,15 @@ CCProgram surface-fragment %{ { vec4 pbr = vec4(1.0,1.0,1.0,1.0); //ao - float occlusionValue = 1.0 - occlusion; + float occlusionValue = 1.0; #if USE_OCCLUSION_MAP vec4 occlusionColor = texture(occlusionMap, TEXTURE_UV); - occlusionValue = discolor(occlusionColor.rgb); + float occlusionColorValue = discolor(occlusionColor.rgb); #if USE_OCCLUSION_CHANNEL occlusionColor.rgb = SRGBToLinear(occlusionColor.rgb); - occlusionValue = occlusionColor.OCCLUSION_CHANNEL; + occlusionColorValue = occlusionColor.OCCLUSION_CHANNEL; #endif + occlusionValue = mix(1.0, occlusionColorValue, occlusion); #endif pbr.x = occlusionValue; diff --git a/editor/assets/effects/surfaces/standard.effect b/editor/assets/effects/surfaces/standard.effect index 4d8c94aac5b..7baac5fbe6b 100644 --- a/editor/assets/effects/surfaces/standard.effect +++ b/editor/assets/effects/surfaces/standard.effect @@ -276,7 +276,7 @@ CCProgram surface-fragment %{ vec4 SurfacesFragmentModifyPBRParams() { vec4 pbr = pbrParams; - pbr.x = 1.0 - pbr.x; + pbr.x = 1.0; #if USE_PBR_MAP vec4 res = texture(pbrMap, DEFAULT_UV); pbr.x *= res.OCCLUSION_CHANNEL; @@ -285,7 +285,7 @@ CCProgram surface-fragment %{ pbr.w *= res.SPECULAR_INTENSITY_CHANNEL; #endif #if USE_OCCLUSION_MAP - pbr.x *= texture(occlusionMap, DEFAULT_UV).OCCLUSION_CHANNEL; + pbr.x = mix(1.0, texture(occlusionMap, DEFAULT_UV).OCCLUSION_CHANNEL, pbrParams.x); #endif return pbr; From 77aa17c70e52114bc66f9973812d7f8702d5af23 Mon Sep 17 00:00:00 2001 From: ChiaNing Date: Thu, 13 Oct 2022 17:24:56 +0800 Subject: [PATCH 011/829] fix earcut type error (#13037) Co-authored-by: ChiaNing --- cocos/2d/assembler/graphics/webgl/earcut.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/cocos/2d/assembler/graphics/webgl/earcut.ts b/cocos/2d/assembler/graphics/webgl/earcut.ts index b1a68828778..8302387d299 100644 --- a/cocos/2d/assembler/graphics/webgl/earcut.ts +++ b/cocos/2d/assembler/graphics/webgl/earcut.ts @@ -36,8 +36,7 @@ class Aim { public next: Aim | null = null; // z-order curve value - // public z = null; - public z = 0; + public z: number = null as any; // previous and next nodes in z-order public prevZ: Aim | null = null; From 7f9b27da9415dea3ca8b2ef1222cf7f0c0692f5f Mon Sep 17 00:00:00 2001 From: troublemaker52025 Date: Thu, 13 Oct 2022 17:53:26 +0800 Subject: [PATCH 012/829] [Bug] fix v_tangent.w in vulkan error (#13039) --- editor/assets/chunks/surfaces/module-functions/common-vs.chunk | 2 +- editor/assets/effects/builtin-standard.effect | 2 +- editor/assets/effects/builtin-toon.effect | 2 +- editor/assets/effects/dcc/imported-metallic-roughness.effect | 2 +- editor/assets/effects/dcc/imported-specular-glossiness.effect | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/editor/assets/chunks/surfaces/module-functions/common-vs.chunk b/editor/assets/chunks/surfaces/module-functions/common-vs.chunk index bf5d875629f..026ba89e3a6 100644 --- a/editor/assets/chunks/surfaces/module-functions/common-vs.chunk +++ b/editor/assets/chunks/surfaces/module-functions/common-vs.chunk @@ -28,7 +28,7 @@ void CCSurfacesVertexOutput(in SurfacesStandardVertexIntermediate In) #if CC_SURFACES_USE_TANGENT_SPACE VSOutput_worldTangent = In.worldTangent.xyz; // VSOutput_worldBitangent = In.worldBinormal; - VSOutput_mirrorNormal = In.tangent.w; + VSOutput_mirrorNormal = In.tangent.w > 0.0 ? 1.0 : -1.0; #endif #if CC_SURFACES_USE_VERTEX_COLOR diff --git a/editor/assets/effects/builtin-standard.effect b/editor/assets/effects/builtin-standard.effect index ecbb299029c..8a08a7e727b 100644 --- a/editor/assets/effects/builtin-standard.effect +++ b/editor/assets/effects/builtin-standard.effect @@ -264,7 +264,7 @@ CCProgram standard-fs %{ #if USE_NORMAL_MAP vec3 nmmp = texture(normalMap, NORMAL_UV).xyz - vec3(0.5); - vec3 bitangent = cross(v_normal, v_tangent.xyz) * v_tangent.w; // note the cross order + vec3 bitangent = cross(v_normal, v_tangent.xyz) * (v_tangent.w > 0.0 ? 1.0 : -1.0); // note the cross order s.normal = (nmmp.x * emissiveScaleParam.w) * normalize(v_tangent.xyz) + (nmmp.y * emissiveScaleParam.w) * normalize(bitangent) + diff --git a/editor/assets/effects/builtin-toon.effect b/editor/assets/effects/builtin-toon.effect index a36b279efcf..431d5e4f4dd 100644 --- a/editor/assets/effects/builtin-toon.effect +++ b/editor/assets/effects/builtin-toon.effect @@ -227,7 +227,7 @@ CCProgram toon-fs %{ #if USE_NORMAL_MAP vec3 nmmp = texture(normalMap, v_uv).xyz - vec3(0.5); - vec3 bitangent = cross(v_normal, v_tangent.xyz) * v_tangent.w; // note the cross order + vec3 bitangent = cross(v_normal, v_tangent.xyz) * (v_tangent.w > 0.0 ? 1.0 : -1.0); // note the cross order s.normal = (nmmp.x * emissiveScaleAndStrenth.w) * normalize(v_tangent.xyz) + (nmmp.y * emissiveScaleAndStrenth.w) * normalize(bitangent) + diff --git a/editor/assets/effects/dcc/imported-metallic-roughness.effect b/editor/assets/effects/dcc/imported-metallic-roughness.effect index 02799beee2f..996f7429368 100644 --- a/editor/assets/effects/dcc/imported-metallic-roughness.effect +++ b/editor/assets/effects/dcc/imported-metallic-roughness.effect @@ -154,7 +154,7 @@ CCProgram standard-vs %{ #if USE_NORMAL_MAP v_tangent = normalize((matWorld * vec4(In.tangent.xyz, 0.0)).xyz); - v_bitangent = cross(v_normal, v_tangent) * In.tangent.w; // note the cross order + v_bitangent = cross(v_normal, v_tangent) * (In.tangent.w > 0.0 ? 1.0 : -1.0); // note the cross order #endif v_uv = a_texCoord * tilingOffset.xy + tilingOffset.zw; diff --git a/editor/assets/effects/dcc/imported-specular-glossiness.effect b/editor/assets/effects/dcc/imported-specular-glossiness.effect index 785de584d97..da7d399dd5e 100644 --- a/editor/assets/effects/dcc/imported-specular-glossiness.effect +++ b/editor/assets/effects/dcc/imported-specular-glossiness.effect @@ -150,7 +150,7 @@ CCProgram standard-vs %{ #if USE_NORMAL_MAP v_tangent = normalize((matWorld * vec4(In.tangent.xyz, 0.0)).xyz); - v_bitangent = cross(v_normal, v_tangent) * In.tangent.w; // note the cross order + v_bitangent = cross(v_normal, v_tangent) * (In.tangent.w > 0.0 ? 1.0 : -1.0); // note the cross order #endif v_uv = a_texCoord * tilingOffset.xy + tilingOffset.zw; From d8b64a42e22211f96a499a64db7304f42d5b0246 Mon Sep 17 00:00:00 2001 From: jk20012001 Date: Thu, 13 Oct 2022 18:26:02 +0800 Subject: [PATCH 013/829] [Bug] warning with editor camera (#13035) --- cocos/core/pipeline/scene-culling.ts | 2 +- native/cocos/renderer/pipeline/SceneCulling.cpp | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/cocos/core/pipeline/scene-culling.ts b/cocos/core/pipeline/scene-culling.ts index 8a9c70dc3fe..eb6228a2253 100644 --- a/cocos/core/pipeline/scene-culling.ts +++ b/cocos/core/pipeline/scene-culling.ts @@ -149,7 +149,7 @@ export function sceneCulling (pipeline: RenderPipeline, camera: Camera) { if ((camera.clearFlag & SKYBOX_FLAG)) { if (skybox.enabled && skybox.model) { renderObjects.push(getRenderObject(skybox.model, camera)); - } else { + } else if(camera.clearFlag === SKYBOX_FLAG) { legacyCC.warnID(15100, camera.name); } } diff --git a/native/cocos/renderer/pipeline/SceneCulling.cpp b/native/cocos/renderer/pipeline/SceneCulling.cpp index 86f639395ac..630d2b2dace 100644 --- a/native/cocos/renderer/pipeline/SceneCulling.cpp +++ b/native/cocos/renderer/pipeline/SceneCulling.cpp @@ -147,10 +147,11 @@ void sceneCulling(const RenderPipeline *pipeline, scene::Camera *camera) { csmLayers->clearCastShadowObjects(); csmLayers->clearLayerObjects(); - if (static_cast(camera->getClearFlag()) & skyboxFlag) { + auto clearFlagValue = static_cast(camera->getClearFlag()); + if (clearFlagValue & skyboxFlag) { if (skyBox != nullptr && skyBox->isEnabled() && skyBox->getModel()) { sceneData->addRenderObject(genRenderObject(skyBox->getModel(), camera)); - } else { + } else if(clearFlagValue == skyboxFlag) { debug::warnID(15100, camera->getName()); } } From fe83e5144fb1e6644f6b1a8be865f64b61473277 Mon Sep 17 00:00:00 2001 From: Zeqiang Li Date: Fri, 14 Oct 2022 11:22:03 +0800 Subject: [PATCH 014/829] avoid incompatible regexp string match/replace on safari (#13031) --- cocos/core/gfx/webgpu/webgpu-define.ts | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/cocos/core/gfx/webgpu/webgpu-define.ts b/cocos/core/gfx/webgpu/webgpu-define.ts index 1924b9caf9a..be6f5ca7e50 100644 --- a/cocos/core/gfx/webgpu/webgpu-define.ts +++ b/cocos/core/gfx/webgpu/webgpu-define.ts @@ -196,25 +196,34 @@ WEBGPU && promiseForWebGPUInstantiation.then(() => { const referredFuncMap = new Map(); const samplerSet = new Set(); samplerTexturArr?.every((str) => { - let textureName = str.match(/(?<=uniform(.*?)sampler\w* )(\w+)(?=;)/g)!.toString(); + // `(?<=)` not compatible with str.match on safari. + // let textureName = str.match(/(?<=uniform(.*?)sampler\w* )(\w+)(?=;)/g)!.toString(); + const textureNameRegExpStr = '(?<=uniform(.*?)sampler\\w* )(\\w+)(?=;)'; + let textureName = (new RegExp(textureNameRegExpStr, 'g')).exec(str)![0]; + let samplerStr = str.replace(textureName, `${textureName}Sampler`); - let samplerFunc = samplerStr.match(/(?<=uniform(.*?))sampler(\w*)/g)!.toString(); + + // let samplerFunc = samplerStr.match(/(?<=uniform(.*?))sampler(\w*)/g)!.toString(); + const samplerRegExpStr = '(?<=uniform(.*?))sampler(\\w*)'; + let samplerFunc = (new RegExp(samplerRegExpStr, 'g')).exec(str)![0]; samplerFunc = samplerFunc.replace('sampler', ''); if (samplerFunc === '') { textureName = textureName.replace('Sampler', ''); } else { - samplerStr = samplerStr.replace(/(?<=uniform(.*?))(sampler\w*)/g, 'sampler'); + const samplerReplaceReg = new RegExp('(?<=uniform(.*?))(sampler\\w*)', 'g'); + samplerStr = samplerStr.replace(samplerReplaceReg, 'sampler'); // layout (set = a, binding = b) uniform sampler2D cctex; // to: // layout (set = a, binding = b) uniform sampler cctexSampler; // layout (set = a, binding = b + maxTextureNum) uniform texture2D cctex; - const samplerReg = /(?<=binding = )(\d+)(?=\))/g; - const samplerBindingStr = str.match(samplerReg)!.toString(); + const samplerReg = new RegExp('(?<=binding = )(\\d+)(?=\\))', 'g'); + const samplerBindingStr = samplerReg.exec(str)![0]; const samplerBinding = Number(samplerBindingStr) + 16; samplerStr = samplerStr.replace(samplerReg, samplerBinding.toString()); - - const textureStr = str.replace(/(?<=uniform(.*?))(sampler)(?=\w*)/g, 'texture'); + + const textureReg = new RegExp('(?<=uniform(.*?))(sampler)(?=\\w*)', 'g'); + const textureStr = str.replace(textureReg, 'texture'); code = code.replace(str, `${textureStr}\n${samplerStr}`); } From 50b8b1177916859ba0bfaa437640e24164f2ba2c Mon Sep 17 00:00:00 2001 From: jk20012001 Date: Fri, 14 Oct 2022 11:53:14 +0800 Subject: [PATCH 015/829] [fix] emissive factor support for dcc materials (#13046) --- editor/assets/effects/builtin-standard.effect | 5 ++-- .../dcc/imported-metallic-roughness.effect | 4 ++-- .../dcc/imported-specular-glossiness.effect | 24 +++++++++++++++---- ...urfaces-imported-metallic-roughness.effect | 4 ++-- ...rfaces-imported-specular-glossiness.effect | 17 ++++++++++++- .../assets/effects/surfaces/standard.effect | 6 ++--- 6 files changed, 46 insertions(+), 14 deletions(-) diff --git a/editor/assets/effects/builtin-standard.effect b/editor/assets/effects/builtin-standard.effect index 8a08a7e727b..35d38d5cb15 100644 --- a/editor/assets/effects/builtin-standard.effect +++ b/editor/assets/effects/builtin-standard.effect @@ -295,10 +295,11 @@ CCProgram standard-fs %{ s.metallic = pbr.z; s.specularIntensity = pbr.w; - s.emissive = emissive.rgb * emissiveScaleParam.xyz; + s.emissive = emissive.rgb; #if USE_EMISSIVE_MAP - s.emissive *= SRGBToLinear(texture(emissiveMap, EMISSIVE_UV).rgb); + s.emissive = SRGBToLinear(texture(emissiveMap, EMISSIVE_UV).rgb); #endif + s.emissive *= emissiveScaleParam.xyz; } CC_STANDARD_SURFACE_ENTRY() diff --git a/editor/assets/effects/dcc/imported-metallic-roughness.effect b/editor/assets/effects/dcc/imported-metallic-roughness.effect index 996f7429368..e8bb187ca59 100644 --- a/editor/assets/effects/dcc/imported-metallic-roughness.effect +++ b/editor/assets/effects/dcc/imported-metallic-roughness.effect @@ -18,8 +18,8 @@ CCEffect %{ metallicMap: { value: grey } occlusion: { value: 0.0, editor: { slide: true, range: [0, 1.0], step: 0.001 } } occlusionMap: { value: white } - emissiveScale: { value: 1.0, editor: { displayName: Emissive } } - emissiveScaleMap: { value: grey, editor: { displayName: EmissiveMap } } + emissiveScale: { value: 1.0 } + emissiveScaleMap: { value: grey } emissive: { value: [0.0, 0.0, 0.0, 1.0], linear: true, editor: { displayName: EmissiveColor, type: color} } emissiveMap: { value: grey, editor: { displayName: EmissiveColorMap } } alphaSource: { value: 1.0, editor: { slide: true, range: [0, 1.0], step: 0.001 } } diff --git a/editor/assets/effects/dcc/imported-specular-glossiness.effect b/editor/assets/effects/dcc/imported-specular-glossiness.effect index da7d399dd5e..d53a935454d 100644 --- a/editor/assets/effects/dcc/imported-specular-glossiness.effect +++ b/editor/assets/effects/dcc/imported-specular-glossiness.effect @@ -13,6 +13,8 @@ CCEffect %{ alphaThreshold: { value: 0.5, editor: { parent: USE_ALPHA_TEST, slide: true, range: [0, 1.0], step: 0.001 } } emissive: { value: [0.0, 0.0, 0.0, 1.0], linear: true, editor: { type: color } } emissiveMap: { value: grey } + emissiveScale: { value: 1.0 } + emissiveScaleMap: { value: grey } shininessExponentMap: { value: grey, editor: { parent: '!HAS_EXPORTED_GLOSSINESS' } } shininessExponent: { value: 100.0, editor: { parent: '!HAS_EXPORTED_GLOSSINESS' } } specularGlossinessMap: { value: grey, editor: { parent: '!HAS_EXPORTED_GLOSSINESS' } } @@ -84,6 +86,7 @@ CCProgram shared-ubos %{ vec4 diffuseColor; vec4 specularColor; vec4 emissive; + float emissiveScale; float alphaThreshold; float shininessExponent; float glossiness; @@ -243,6 +246,9 @@ CCProgram standard-fs %{ #if USE_EMISSIVE_MAP uniform sampler2D emissiveMap; #endif + #if USE_EMISSIVESCALE_MAP + uniform sampler2D emissiveScaleMap; + #endif float discolor(vec3 srcColor) { return dot(GRAY_VECTOR, srcColor); @@ -377,10 +383,20 @@ CCProgram standard-fs %{ s.roughness = 1.0 - inGlossiness; s.metallic = inMetallic; s.specularIntensity = inSpecularIntensity * 0.5; - s.emissive = emissive.rgb; - #if USE_EMISSIVE_MAP - s.emissive = texture(emissiveMap, TEXTURE_UV).xyz; - #endif + + vec3 emissiveColor = emissive.rgb; + #if USE_EMISSIVE_MAP + emissiveColor.rgb = SRGBToLinear(texture(emissiveMap, TEXTURE_UV).rgb); + #endif + //emissive color scale + #if USE_EMISSIVESCALE_MAP + vec4 emissiveScaleColor = texture(emissiveScaleMap, TEXTURE_UV); + emissiveScaleColor.rgb = SRGBToLinear(emissiveScaleColor.rgb); + emissiveColor.rgb *= emissiveScaleColor.rgb; + #else + emissiveColor.rgb *= emissiveScale; + #endif + s.emissive = emissiveColor.rgb; #if CC_USE_LIGHTMAP && !CC_FORWARD_ADD vec4 lightColor = texture(cc_lightingMap, v_luv.xy); diff --git a/editor/assets/effects/dcc/surfaces-imported-metallic-roughness.effect b/editor/assets/effects/dcc/surfaces-imported-metallic-roughness.effect index 3c7d35539ab..efe0e3c0e17 100644 --- a/editor/assets/effects/dcc/surfaces-imported-metallic-roughness.effect +++ b/editor/assets/effects/dcc/surfaces-imported-metallic-roughness.effect @@ -18,8 +18,8 @@ CCEffect %{ metallicMap: { value: grey } occlusion: { value: 0.0, editor: { slide: true, range: [0, 1.0], step: 0.001 } } occlusionMap: { value: white } - emissiveScale: { value: 1.0, editor: { displayName: Emissive } } - emissiveScaleMap: { value: grey, editor: { displayName: EmissiveMap } } + emissiveScale: { value: 1.0 } + emissiveScaleMap: { value: grey } emissive: { value: [0.0, 0.0, 0.0, 1.0], linear: true, editor: { displayName: EmissiveColor, type: color} } emissiveMap: { value: grey, editor: { displayName: EmissiveColorMap } } alphaSource: { value: 1.0, editor: { slide: true, range: [0, 1.0], step: 0.001 } } diff --git a/editor/assets/effects/dcc/surfaces-imported-specular-glossiness.effect b/editor/assets/effects/dcc/surfaces-imported-specular-glossiness.effect index a13dc7d509f..1b3b5c8ba5a 100644 --- a/editor/assets/effects/dcc/surfaces-imported-specular-glossiness.effect +++ b/editor/assets/effects/dcc/surfaces-imported-specular-glossiness.effect @@ -13,6 +13,8 @@ CCEffect %{ alphaThreshold: { value: 0.5, editor: { parent: USE_ALPHA_TEST, slide: true, range: [0, 1.0], step: 0.001 } } emissive: { value: [0.0, 0.0, 0.0, 1.0], linear: true, editor: { type: color } } emissiveMap: { value: grey } + emissiveScale: { value: 1.0 } + emissiveScaleMap: { value: grey } shininessExponentMap: { value: grey, editor: { parent: '!HAS_EXPORTED_GLOSSINESS' } } shininessExponent: { value: 100.0, editor: { parent: '!HAS_EXPORTED_GLOSSINESS' } } specularGlossinessMap: { value: grey, editor: { parent: '!HAS_EXPORTED_GLOSSINESS' } } @@ -85,6 +87,7 @@ CCProgram shared-ubos %{ vec4 diffuseColor; vec4 specularColor; vec4 emissive; + float emissiveScale; float alphaThreshold; float shininessExponent; float glossiness; @@ -170,6 +173,9 @@ CCProgram surface-fragment %{ #if USE_EMISSIVE_MAP uniform sampler2D emissiveMap; #endif + #if USE_EMISSIVESCALE_MAP + uniform sampler2D emissiveScaleMap; + #endif #if USE_NORMAL_MAP uniform sampler2D normalMap; @@ -268,8 +274,17 @@ CCProgram surface-fragment %{ { vec3 emissiveColor = emissive.rgb; #if USE_EMISSIVE_MAP - emissiveColor = texture(emissiveMap, TEXTURE_UV).xyz; + emissiveColor.rgb = SRGBToLinear(texture(emissiveMap, TEXTURE_UV).rgb); + #endif + //emissive color scale + #if USE_EMISSIVESCALE_MAP + vec4 emissiveScaleColor = texture(emissiveScaleMap, TEXTURE_UV); + emissiveScaleColor.rgb = SRGBToLinear(emissiveScaleColor.rgb); + emissiveColor.rgb *= emissiveScaleColor.rgb; + #else + emissiveColor.rgb *= emissiveScale; #endif + return emissiveColor; } diff --git a/editor/assets/effects/surfaces/standard.effect b/editor/assets/effects/surfaces/standard.effect index 7baac5fbe6b..b904f210d6a 100644 --- a/editor/assets/effects/surfaces/standard.effect +++ b/editor/assets/effects/surfaces/standard.effect @@ -265,11 +265,11 @@ CCProgram surface-fragment %{ #define CC_SURFACES_FRAGMENT_MODIFY_EMISSIVE vec3 SurfacesFragmentModifyEmissive() { - vec3 emissive = emissive.rgb * emissiveScaleParam.xyz; + vec3 emissive = emissive.rgb; #if USE_EMISSIVE_MAP - emissive *= SRGBToLinear(texture(emissiveMap, EMISSIVE_UV).rgb); + emissive = SRGBToLinear(texture(emissiveMap, EMISSIVE_UV).rgb); #endif - return emissive; + return emissive * emissiveScaleParam.xyz; } #define CC_SURFACES_FRAGMENT_MODIFY_PBRPARAMS From 56f28aa583bd5902b64e3b9bdd411b2e75edca74 Mon Sep 17 00:00:00 2001 From: PP Date: Fri, 14 Oct 2022 15:39:01 +0800 Subject: [PATCH 016/829] fix: wrong polyfill require on ByteDance platform (#13047) --- templates/bytedance-mini-game/game.ejs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/templates/bytedance-mini-game/game.ejs b/templates/bytedance-mini-game/game.ejs index 119a280f066..5c6b3e60c69 100644 --- a/templates/bytedance-mini-game/game.ejs +++ b/templates/bytedance-mini-game/game.ejs @@ -40,8 +40,10 @@ loadCC(); function loadCC() { require('./web-adapter'); +<% if(polyfillsBundleFile) { %> // Polyfills bundle. require("<%= polyfillsBundleFile %>"); +<% } %> // SystemJS support. require("<%= systemJsBundleFile %>"); From d9b3c18210bbf8465f70f5c47e330d04287e6490 Mon Sep 17 00:00:00 2001 From: ycg <1670543365@qq.com> Date: Fri, 14 Oct 2022 15:55:06 +0800 Subject: [PATCH 017/829] Adapter Rendering, Editbox, Label and Audio. (#13025) * Adapter System-info on Taobao * add 'zh_CN' for iPad * Adapter screen-adapter on Taobao * Remove useless comments * Adapter EditBox and Label * Adapter Audio * Fix: GL.getUniformLocation returns an incorrect value * Add @typescript-eslint/no-unsafe-return --- pal/audio/minigame/player-minigame.ts | 48 +++++++++- pal/minigame/taobao.ts | 30 ++++++ .../taobao/wrapper/engine/AssetManager.js | 43 +++++---- .../taobao/wrapper/engine/Editbox.js | 91 +++++++++++++++++++ .../platforms/taobao/wrapper/engine/Label.js | 22 +++++ .../platforms/taobao/wrapper/engine/index.js | 2 + 6 files changed, 215 insertions(+), 21 deletions(-) create mode 100644 platforms/minigame/platforms/taobao/wrapper/engine/Editbox.js create mode 100644 platforms/minigame/platforms/taobao/wrapper/engine/Label.js diff --git a/pal/audio/minigame/player-minigame.ts b/pal/audio/minigame/player-minigame.ts index 488a6fdc913..276a4f2890e 100644 --- a/pal/audio/minigame/player-minigame.ts +++ b/pal/audio/minigame/player-minigame.ts @@ -1,9 +1,11 @@ import { minigame } from 'pal/minigame'; import { systemInfo } from 'pal/system-info'; +import { TAOBAO } from 'internal:constants'; import { EventTarget } from '../../../cocos/core/event'; import { AudioEvent, AudioPCMDataView, AudioState, AudioType } from '../type'; import { clamp, clamp01 } from '../../../cocos/core'; import { enqueueOperation, OperationInfo, OperationQueueable } from '../operation-queue'; +import { OS } from '../../system-info/enum-type'; export class OneShotAudioMinigame { private _innerAudioContext: InnerAudioContext; @@ -87,7 +89,14 @@ export class AudioPlayerMinigame implements OperationQueueable { eventTarget.emit(AudioEvent.STOPPED); }; innerAudioContext.onStop(this._onStop); - this._onSeeked = () => { eventTarget.emit(AudioEvent.SEEKED); }; + this._onSeeked = () => { + eventTarget.emit(AudioEvent.SEEKED); + + // TaoBao iOS: After calling pause or stop, when seek is called, it will automatically play and call onPlay. + if (TAOBAO && systemInfo.os === OS.IOS && (this._state === AudioState.PAUSED || this._state === AudioState.STOPPED)) { + innerAudioContext.pause(); + } + }; innerAudioContext.onSeeked(this._onSeeked); this._onEnded = () => { this._state = AudioState.INIT; @@ -161,6 +170,11 @@ export class AudioPlayerMinigame implements OperationQueueable { innerAudioContext.offError(fail); } function success () { + // TaoBao Android: Audio is loaded after play, onCanplay will also be called. + if (TAOBAO && systemInfo.os === OS.ANDROID) { + innerAudioContext.pause(); + innerAudioContext.seek(0); + } clearEvent(); clearTimeout(timer); resolve(innerAudioContext); @@ -173,6 +187,12 @@ export class AudioPlayerMinigame implements OperationQueueable { } innerAudioContext.onCanplay(success); innerAudioContext.onError(fail); + + // TaoBao Android: Audio is loaded after play, onCanplay will also be called. + if (TAOBAO && systemInfo.os === OS.ANDROID) { + innerAudioContext.autoplay = true; + innerAudioContext.volume = 0; + } innerAudioContext.src = url; }); } @@ -225,6 +245,14 @@ export class AudioPlayerMinigame implements OperationQueueable { @enqueueOperation seek (time: number): Promise { return new Promise((resolve) => { + // TaoBao Android: After calling stop, when seek is called, it will not play and response onEnded. + // Disable calling seek and play after calling stop on TaoBao Android. + if (TAOBAO && systemInfo.os === OS.ANDROID && this._state === AudioState.STOPPED) { + console.warn('Failed to call seek.'); + resolve(); + return; + } + time = clamp(time, 0, this.duration); if (time === 0 && this.currentTime === 0) { // skip invalid seek @@ -249,6 +277,11 @@ export class AudioPlayerMinigame implements OperationQueueable { return new Promise((resolve) => { this._eventTarget.once(AudioEvent.PAUSED, resolve); this._innerAudioContext.pause(); + + // TaoBao: After calling pause or stop, when pause is called, onPause will not respond. + if (TAOBAO && (this._state === AudioState.PAUSED || this._state === AudioState.STOPPED)) { + this._onPause(); + } }); } @@ -256,7 +289,18 @@ export class AudioPlayerMinigame implements OperationQueueable { stop (): Promise { return new Promise((resolve) => { this._eventTarget.once(AudioEvent.STOPPED, resolve); - this._innerAudioContext.stop(); + + // TaoBao iOS: After calling stop, when stop is called, onStop will not respond. + // TaoBao iOS: After callsing pause, when stop is called, onStop will sometimes not respond. + if (TAOBAO && systemInfo.os === OS.IOS) { + const cacheTime = this.currentTime; + this._innerAudioContext.stop(); + if (this._state === AudioState.STOPPED || ((this._state === AudioState.PAUSED && cacheTime === this.currentTime))) { + this._onStop(); + } + } else { + this._innerAudioContext.stop(); + } }); } diff --git a/pal/minigame/taobao.ts b/pal/minigame/taobao.ts index bc17e0247b6..e100abd6988 100644 --- a/pal/minigame/taobao.ts +++ b/pal/minigame/taobao.ts @@ -42,6 +42,17 @@ Object.defineProperty(minigame, 'orientation', { }); // #endregion SystemInfo +// #region Audio +minigame.createInnerAudioContext = function (): InnerAudioContext { + const audio: InnerAudioContext = my.createInnerAudioContext(); + // @ts-expect-error InnerAudioContext has onCanPlay + audio.onCanplay = audio.onCanPlay.bind(audio); + // @ts-expect-error InnerAudioContext has onCanPlay + delete audio.onCanPlay; + return audio; +}; +// #region Audio + // #region Font minigame.loadFont = function (url) { // my.loadFont crash when url is not in user data path @@ -108,4 +119,23 @@ minigame.getSafeArea = function () { }; // #endregion SafeArea +// TODO: adapt GL.getUniformLocation +// Android return value: undefined. iOS return value: {ID: -1}. +if (!my.isIDE && my.getSystemInfoSync().platform.toLocaleLowerCase() === 'ios') { + // @ts-expect-error canvas defined in global + const locCanvas = $global.screencanvas; + if (locCanvas) { + const webglRC = locCanvas.getContext('webgl'); + const originalGetUniformLocation = webglRC.getUniformLocation.bind(webglRC); + webglRC.getUniformLocation = function (program, name) { + const glLoc = originalGetUniformLocation(program, name); + if (glLoc && glLoc.ID === -1) { + return undefined; + } + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return originalGetUniformLocation(program, name); + }; + } +} + export { minigame }; diff --git a/platforms/minigame/platforms/taobao/wrapper/engine/AssetManager.js b/platforms/minigame/platforms/taobao/wrapper/engine/AssetManager.js index eac926acbb2..27007db0e1e 100644 --- a/platforms/minigame/platforms/taobao/wrapper/engine/AssetManager.js +++ b/platforms/minigame/platforms/taobao/wrapper/engine/AssetManager.js @@ -2,33 +2,37 @@ const parser = cc.assetManager.parser; const downloader = cc.assetManager.downloader; const debug = cc.debug; -function downloadImage(url, options, onComplete) { +function doNothing (url, options, onComplete) { onComplete(null, url); } +// TODO: Image can't load from cached downloaded file on Taobao IDE if (my.isIDE) { - // NOTE: image can't load from cached downloaded file on Taobao IDE downloader.register({ - // Image - '.png': downloadImage, - '.jpg': downloadImage, - '.bmp': downloadImage, - '.jpeg': downloadImage, - '.gif': downloadImage, - '.ico': downloadImage, - '.tiff': downloadImage, - '.image': downloadImage, - '.webp': downloadImage, - '.pvr': downloadImage, - '.pkm': downloadImage, - '.astc': downloadImage, + '.png': doNothing, + '.jpg': doNothing, + '.bmp': doNothing, + '.jpeg': doNothing, + '.gif': doNothing, + '.ico': doNothing, + '.tiff': doNothing, + '.image': doNothing, + '.webp': doNothing, }); } -function loadImage(url, options, onComplete) { +// TODO: Audio can't load from cached downloaded file onTaoBao +downloader.register({ + '.mp3': doNothing, + '.ogg': doNothing, + '.wav': doNothing, + '.m4a': doNothing, +}); + +function loadImage (url, options, onComplete) { const img = window.screencanvas.createImage(); - function loadCallback() { + function loadCallback () { img.onload = null; img.onerror = null; @@ -37,7 +41,7 @@ function loadImage(url, options, onComplete) { } } - function errorCallback() { + function errorCallback () { img.onload = null; img.onerror = null; @@ -47,7 +51,7 @@ function loadImage(url, options, onComplete) { } img.onload = loadCallback; - img.onerror - errorCallback; + img.onerror = errorCallback; img.src = url; return img; } @@ -55,6 +59,7 @@ function loadImage(url, options, onComplete) { downloader.downloadDomImage = loadImage; parser.register({ + // Image '.png': loadImage, '.jpg': loadImage, '.bmp': loadImage, diff --git a/platforms/minigame/platforms/taobao/wrapper/engine/Editbox.js b/platforms/minigame/platforms/taobao/wrapper/engine/Editbox.js new file mode 100644 index 00000000000..530133d6db0 --- /dev/null +++ b/platforms/minigame/platforms/taobao/wrapper/engine/Editbox.js @@ -0,0 +1,91 @@ +(function () { + if (!(cc && cc.internal && cc.internal.EditBox)) { + return; + } + + const EditBox = cc.internal.EditBox; + const js = cc.js; + const KeyboardReturnType = EditBox.KeyboardReturnType; + const MAX_VALUE = 65535; + + function getKeyboardReturnType (type) { + switch (type) { + case KeyboardReturnType.DEFAULT: + case KeyboardReturnType.DONE: + return 'done'; + case KeyboardReturnType.SEND: + return 'send'; + case KeyboardReturnType.SEARCH: + return 'search'; + case KeyboardReturnType.GO: + return 'go'; + case KeyboardReturnType.NEXT: + return 'next'; + } + return 'done'; + } + + const BaseClass = EditBox._EditBoxImpl; + function MiniGameEditBoxImpl () { + BaseClass.call(this); + } + + js.extend(MiniGameEditBoxImpl, BaseClass); + EditBox._EditBoxImpl = MiniGameEditBoxImpl; + + Object.assign(MiniGameEditBoxImpl.prototype, { + init (delegate) { + if (!delegate) { + cc.error('EditBox init failed'); + return; + } + this._delegate = delegate; + }, + + beginEditing () { + // In case multiply register events + if (this._editing) { + return; + } + const delegate = this._delegate; + this._showPrompt(); + this._editing = true; + delegate._editBoxEditingDidBegan(); + }, + + endEditing () { + cc.warn(`Can't support to end editing.`); + }, + + _showPrompt () { + const self = this; + const delegate = this._delegate; + const multiline = (delegate.inputMode === EditBox.InputMode.ANY); + const maxLength = (delegate.maxLength < 0 ? MAX_VALUE : delegate.maxLength); + + if (multiline) { + cc.warn(`Multiline editing is not supported`); + } + + my.prompt({ + title: '', + message: delegate.placeholder, + // placeholder: delegate.placeholder, + okButtonText: getKeyboardReturnType(delegate.returnType), + cancelButtonText: 'cancel', + success: (result) => { + if (result.ok) { + let inputValue = result.inputValue; + inputValue = (maxLength <= inputValue.length) ? inputValue.substring(0, maxLength) : inputValue; + if (delegate._string !== inputValue) { + delegate._editBoxTextChanged(inputValue); + } + delegate._editBoxEditingReturn(); + } + self._editing = false; + delegate._editBoxEditingDidEnded(); + }, + }); + }, + }); +}()); diff --git a/platforms/minigame/platforms/taobao/wrapper/engine/Label.js b/platforms/minigame/platforms/taobao/wrapper/engine/Label.js new file mode 100644 index 00000000000..2b273d37808 --- /dev/null +++ b/platforms/minigame/platforms/taobao/wrapper/engine/Label.js @@ -0,0 +1,22 @@ +if (cc && cc.LabelComponent) { + const Label = cc.LabelComponent; + + // shared label canvas + const _sharedLabelCanvas = my.createOffscreenCanvas(); + const _sharedLabelCanvasCtx = _sharedLabelCanvas.getContext('2d'); + const canvasData = { + canvas: _sharedLabelCanvas, + context: _sharedLabelCanvasCtx, + }; + cc.game.on(cc.game.EVENT_ENGINE_INITED, () => { + Object.assign(Label._canvasPool, { + get () { + return canvasData; + }, + + put () { + // do nothing + }, + }); + }); +} diff --git a/platforms/minigame/platforms/taobao/wrapper/engine/index.js b/platforms/minigame/platforms/taobao/wrapper/engine/index.js index 64c05bc2f0e..563320cd45f 100644 --- a/platforms/minigame/platforms/taobao/wrapper/engine/index.js +++ b/platforms/minigame/platforms/taobao/wrapper/engine/index.js @@ -1,3 +1,5 @@ require('../fs-utils'); require('../../../../common/engine/index'); require('./AssetManager.js'); +require('./Label.js'); +require('./Editbox.js'); From c196b6da14f72ae8eeef828c11cb08af71201fec Mon Sep 17 00:00:00 2001 From: timlyeee <43355299+timlyeee@users.noreply.github.com> Date: Fri, 14 Oct 2022 16:52:00 +0800 Subject: [PATCH 018/829] Update external-config.json (#13049) --- native/external-config.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/native/external-config.json b/native/external-config.json index 2bd5b7658fe..6a54257f4e4 100644 --- a/native/external-config.json +++ b/native/external-config.json @@ -3,6 +3,6 @@ "type": "github", "owner": "cocos-creator", "name": "engine-native-external", - "checkout": "v3.6.2-3" + "checkout": "v3.6.2-4" } -} \ No newline at end of file +} From 020fd0170dec27b554f3c4f9bd68e1ceffd5fe22 Mon Sep 17 00:00:00 2001 From: timlyeee <43355299+timlyeee@users.noreply.github.com> Date: Fri, 14 Oct 2022 18:06:09 +0800 Subject: [PATCH 019/829] Update auto bindings (#13051) --- native/cocos/bindings/auto/jsb_2d_auto.cpp | 149 ++-- native/cocos/bindings/auto/jsb_2d_auto.h | 3 - .../bindings/auto/jsb_dragonbones_auto.cpp | 132 ++- .../bindings/auto/jsb_dragonbones_auto.h | 3 - .../bindings/auto/jsb_editor_support_auto.cpp | 83 +- .../bindings/auto/jsb_editor_support_auto.h | 3 - .../cocos/bindings/auto/jsb_pipeline_auto.cpp | 42 +- native/cocos/bindings/auto/jsb_scene_auto.cpp | 758 ++++++------------ native/cocos/bindings/auto/jsb_scene_auto.h | 18 +- native/cocos/bindings/auto/jsb_spine_auto.cpp | 132 ++- 10 files changed, 598 insertions(+), 725 deletions(-) diff --git a/native/cocos/bindings/auto/jsb_2d_auto.cpp b/native/cocos/bindings/auto/jsb_2d_auto.cpp index 32103206675..d283a632f6f 100644 --- a/native/cocos/bindings/auto/jsb_2d_auto.cpp +++ b/native/cocos/bindings/auto/jsb_2d_auto.cpp @@ -75,10 +75,6 @@ #define cc_UIMeshBuffer_iData_set(self_, val_) self_->setIData(val_) -#define cc_UIMeshBuffer_useLinkData_get(self_) self_->getUseLinkData() -#define cc_UIMeshBuffer_useLinkData_set(self_, val_) self_->setUseLinkData(val_) - - #define cc_RenderDrawInfo_vbBuffer_get(self_) self_->getVbBuffer() #define cc_RenderDrawInfo_vbBuffer_set(self_, val_) self_->setVbBuffer(val_) @@ -402,49 +398,79 @@ static bool js_delete_cc_UIMeshBuffer(se::State& s) } SE_BIND_FINALIZE_FUNC(js_delete_cc_UIMeshBuffer) -static bool js_cc_UIMeshBuffer_initialize(se::State& s) +static bool js_cc_UIMeshBuffer_initialize__SWIG_0(se::State& s) { - // js_function + // js_overloaded_function CC_UNUSED bool ok = true; const auto& args = s.args(); - size_t argc = args.size(); cc::UIMeshBuffer *arg1 = (cc::UIMeshBuffer *) NULL ; - cc::gfx::Device *arg2 = (cc::gfx::Device *) NULL ; - ccstd::vector< cc::gfx::Attribute > *arg3 = 0 ; - uint32_t arg4 ; - uint32_t arg5 ; - ccstd::vector< cc::gfx::Attribute > temp3 ; + ccstd::vector< cc::gfx::Attribute > *arg2 = 0 ; + bool arg3 ; + ccstd::vector< cc::gfx::Attribute > temp2 ; - if(argc != 4) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 4); - return false; - } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE* - ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "UIMeshBuffer_initialize,2,SWIGTYPE_p_cc__gfx__Device"); // %typemap(in) SWIGTYPE&& - ok &= sevalue_to_native(args[1], &temp3, s.thisObject()); - SE_PRECONDITION2(ok, false, "UIMeshBuffer_initialize,3,SWIGTYPE_p_ccstd__vectorT_cc__gfx__Attribute_t"); - arg3 = &temp3; + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "UIMeshBuffer_initialize,2,SWIGTYPE_p_ccstd__vectorT_cc__gfx__Attribute_t"); + arg2 = &temp2; + // %typemap(in) bool + ok &= sevalue_to_native(args[1], &arg3); + SE_PRECONDITION2(ok, false, "UIMeshBuffer_initialize,3,SWIGTYPE_bool"); + (arg1)->initialize((ccstd::vector< cc::gfx::Attribute > &&)*arg2,arg3); - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[2], &arg4, s.thisObject()); - SE_PRECONDITION2(ok, false, "UIMeshBuffer_initialize,4,SWIGTYPE_uint32_t"); + return true; +} + +static bool js_cc_UIMeshBuffer_initialize__SWIG_1(se::State& s) +{ + // js_overloaded_function - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[3], &arg5, s.thisObject()); - SE_PRECONDITION2(ok, false, "UIMeshBuffer_initialize,5,SWIGTYPE_uint32_t"); + CC_UNUSED bool ok = true; + const auto& args = s.args(); + cc::UIMeshBuffer *arg1 = (cc::UIMeshBuffer *) NULL ; + ccstd::vector< cc::gfx::Attribute > *arg2 = 0 ; + ccstd::vector< cc::gfx::Attribute > temp2 ; - (arg1)->initialize(arg2,(ccstd::vector< cc::gfx::Attribute > &&)*arg3,arg4,arg5); + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE&& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "UIMeshBuffer_initialize,2,SWIGTYPE_p_ccstd__vectorT_cc__gfx__Attribute_t"); + arg2 = &temp2; + + (arg1)->initialize((ccstd::vector< cc::gfx::Attribute > &&)*arg2); return true; } + +static bool js_cc_UIMeshBuffer_initialize(se::State& s) +{ + // js_function_dispatcher + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + + // js_function_dispatch_case + if (argc == 2) { + ok = js_cc_UIMeshBuffer_initialize__SWIG_0(s); + if (ok) { + return true; + } + } // js_function_dispatch_case + if (argc == 1) { + ok = js_cc_UIMeshBuffer_initialize__SWIG_1(s); + if (ok) { + return true; + } + } + SE_REPORT_ERROR("wrong number of arguments: %d", (int)argc); + return false; +} SE_BIND_FUNC(js_cc_UIMeshBuffer_initialize) static bool js_cc_UIMeshBuffer_reset(se::State& s) @@ -617,49 +643,11 @@ static bool js_cc_UIMeshBuffer_iData_get(se::State& s) } SE_BIND_PROP_GET(js_cc_UIMeshBuffer_iData_get) -static bool js_cc_UIMeshBuffer_useLinkData_set(se::State& s) -{ - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::UIMeshBuffer *arg1 = (cc::UIMeshBuffer *) NULL ; - bool arg2 ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) bool - ok &= sevalue_to_native(args[0], &arg2); - SE_PRECONDITION2(ok, false, "UIMeshBuffer_useLinkData_set,2,SWIGTYPE_bool"); - cc_UIMeshBuffer_useLinkData_set(arg1,arg2); - - - return true; -} -SE_BIND_PROP_SET(js_cc_UIMeshBuffer_useLinkData_set) - -static bool js_cc_UIMeshBuffer_useLinkData_get(se::State& s) -{ - CC_UNUSED bool ok = true; - cc::UIMeshBuffer *arg1 = (cc::UIMeshBuffer *) NULL ; - bool result; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (bool)cc_UIMeshBuffer_useLinkData_get(arg1); - // out 5 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - - - return true; -} -SE_BIND_PROP_GET(js_cc_UIMeshBuffer_useLinkData_get) - bool js_register_cc_UIMeshBuffer(se::Object* obj) { auto* cls = se::Class::create("UIMeshBuffer", obj, nullptr, _SE(js_new_cc_UIMeshBuffer)); cls->defineProperty("vData", _SE(js_cc_UIMeshBuffer_vData_get), _SE(js_cc_UIMeshBuffer_vData_set)); cls->defineProperty("iData", _SE(js_cc_UIMeshBuffer_iData_get), _SE(js_cc_UIMeshBuffer_iData_set)); - cls->defineProperty("useLinkData", _SE(js_cc_UIMeshBuffer_useLinkData_get), _SE(js_cc_UIMeshBuffer_useLinkData_set)); cls->defineFunction("initialize", _SE(js_cc_UIMeshBuffer_initialize)); cls->defineFunction("reset", _SE(js_cc_UIMeshBuffer_reset)); @@ -1640,6 +1628,32 @@ static bool js_cc_RenderDrawInfo_setStride(se::State& s) } SE_BIND_FUNC(js_cc_RenderDrawInfo_setStride) +static bool js_cc_RenderDrawInfo_setMeshBuffer(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::RenderDrawInfo *arg1 = (cc::RenderDrawInfo *) NULL ; + cc::UIMeshBuffer *arg2 = (cc::UIMeshBuffer *) NULL ; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "RenderDrawInfo_setMeshBuffer,2,SWIGTYPE_p_cc__UIMeshBuffer"); + (arg1)->setMeshBuffer(arg2); + + + return true; +} +SE_BIND_FUNC(js_cc_RenderDrawInfo_setMeshBuffer) + static bool js_cc_RenderDrawInfo_getMeshBuffer(se::State& s) { // js_function @@ -2281,6 +2295,7 @@ bool js_register_cc_RenderDrawInfo(se::Object* obj) { cls->defineFunction("getIsMeshBuffer", _SE(js_cc_RenderDrawInfo_getIsMeshBuffer)); cls->defineFunction("setIsMeshBuffer", _SE(js_cc_RenderDrawInfo_setIsMeshBuffer)); cls->defineFunction("setStride", _SE(js_cc_RenderDrawInfo_setStride)); + cls->defineFunction("setMeshBuffer", _SE(js_cc_RenderDrawInfo_setMeshBuffer)); cls->defineFunction("getMeshBuffer", _SE(js_cc_RenderDrawInfo_getMeshBuffer)); cls->defineFunction("changeMeshBuffer", _SE(js_cc_RenderDrawInfo_changeMeshBuffer)); cls->defineFunction("setRender2dBufferToNative", _SE(js_cc_RenderDrawInfo_setRender2dBufferToNative)); diff --git a/native/cocos/bindings/auto/jsb_2d_auto.h b/native/cocos/bindings/auto/jsb_2d_auto.h index eda45319ffc..e491b077a1c 100644 --- a/native/cocos/bindings/auto/jsb_2d_auto.h +++ b/native/cocos/bindings/auto/jsb_2d_auto.h @@ -62,9 +62,6 @@ JSB_REGISTER_OBJECT_TYPE(cc::UIMeshBuffer); extern se::Object *__jsb_cc_UIMeshBuffer_proto; // NOLINT extern se::Class * __jsb_cc_UIMeshBuffer_class; // NOLINT -JSB_REGISTER_OBJECT_TYPE(cc::Batcher2d); -extern se::Object *__jsb_cc_Batcher2d_proto; // NOLINT -extern se::Class * __jsb_cc_Batcher2d_class; // NOLINT JSB_REGISTER_OBJECT_TYPE(cc::Render2dLayout); extern se::Object *__jsb_cc_Render2dLayout_proto; // NOLINT diff --git a/native/cocos/bindings/auto/jsb_dragonbones_auto.cpp b/native/cocos/bindings/auto/jsb_dragonbones_auto.cpp index d448d35e5ab..082d6f882e7 100644 --- a/native/cocos/bindings/auto/jsb_dragonbones_auto.cpp +++ b/native/cocos/bindings/auto/jsb_dragonbones_auto.cpp @@ -61,6 +61,8 @@ #include "bindings/manual/jsb_global.h" +#include "bindings/auto/jsb_2d_auto.h" +#include "bindings/auto/jsb_assets_auto.h" #include "bindings/auto/jsb_dragonbones_auto.h" @@ -12262,34 +12264,6 @@ static bool js_dragonBones_CCArmatureDisplay_getSharedBufferOffset(se::State& s) } SE_BIND_FUNC(js_dragonBones_CCArmatureDisplay_getSharedBufferOffset) -static bool js_dragonBones_CCArmatureDisplay_getParamsBuffer(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - dragonBones::CCArmatureDisplay *arg1 = (dragonBones::CCArmatureDisplay *) NULL ; - se_object_ptr result; - - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = ((dragonBones::CCArmatureDisplay const *)arg1)->getParamsBuffer(); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "CCArmatureDisplay_getParamsBuffer, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - - - - return true; -} -SE_BIND_FUNC(js_dragonBones_CCArmatureDisplay_getParamsBuffer) - static bool js_dragonBones_CCArmatureDisplay_setColor(se::State& s) { // js_function @@ -12494,6 +12468,58 @@ static bool js_dragonBones_CCArmatureDisplay_getRootDisplay(se::State& s) } SE_BIND_FUNC(js_dragonBones_CCArmatureDisplay_getRootDisplay) +static bool js_dragonBones_CCArmatureDisplay_setMaterial(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + dragonBones::CCArmatureDisplay *arg1 = (dragonBones::CCArmatureDisplay *) NULL ; + cc::Material *arg2 = (cc::Material *) NULL ; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "CCArmatureDisplay_setMaterial,2,SWIGTYPE_p_cc__Material"); + (arg1)->setMaterial(arg2); + + + return true; +} +SE_BIND_FUNC(js_dragonBones_CCArmatureDisplay_setMaterial) + +static bool js_dragonBones_CCArmatureDisplay_setRenderEntity(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + dragonBones::CCArmatureDisplay *arg1 = (dragonBones::CCArmatureDisplay *) NULL ; + cc::RenderEntity *arg2 = (cc::RenderEntity *) NULL ; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "CCArmatureDisplay_setRenderEntity,2,SWIGTYPE_p_cc__RenderEntity"); + (arg1)->setRenderEntity(arg2); + + + return true; +} +SE_BIND_FUNC(js_dragonBones_CCArmatureDisplay_setRenderEntity) + bool js_register_dragonBones_CCArmatureDisplay(se::Object* obj) { auto* cls = se::Class::create("CCArmatureDisplay", obj, nullptr, _SE(js_new_dragonBones_CCArmatureDisplay)); @@ -12512,7 +12538,6 @@ bool js_register_dragonBones_CCArmatureDisplay(se::Object* obj) { cls->defineFunction("getAnimation", _SE(js_dragonBones_CCArmatureDisplay_getAnimation)); cls->defineFunction("getDebugData", _SE(js_dragonBones_CCArmatureDisplay_getDebugData)); cls->defineFunction("getSharedBufferOffset", _SE(js_dragonBones_CCArmatureDisplay_getSharedBufferOffset)); - cls->defineFunction("getParamsBuffer", _SE(js_dragonBones_CCArmatureDisplay_getParamsBuffer)); cls->defineFunction("setColor", _SE(js_dragonBones_CCArmatureDisplay_setColor)); cls->defineFunction("setDebugBonesEnabled", _SE(js_dragonBones_CCArmatureDisplay_setDebugBonesEnabled)); cls->defineFunction("setBatchEnabled", _SE(js_dragonBones_CCArmatureDisplay_setBatchEnabled)); @@ -12520,6 +12545,8 @@ bool js_register_dragonBones_CCArmatureDisplay(se::Object* obj) { cls->defineFunction("setOpacityModifyRGB", _SE(js_dragonBones_CCArmatureDisplay_setOpacityModifyRGB)); cls->defineFunction("convertToRootSpace", _SE(js_dragonBones_CCArmatureDisplay_convertToRootSpace)); cls->defineFunction("getRootDisplay", _SE(js_dragonBones_CCArmatureDisplay_getRootDisplay)); + cls->defineFunction("setMaterial", _SE(js_dragonBones_CCArmatureDisplay_setMaterial)); + cls->defineFunction("setRenderEntity", _SE(js_dragonBones_CCArmatureDisplay_setRenderEntity)); cls->defineStaticFunction("create", _SE(js_dragonBones_CCArmatureDisplay_create_static)); @@ -14124,7 +14151,7 @@ static bool js_dragonBones_CCArmatureCacheDisplay_getSharedBufferOffset(se::Stat } SE_BIND_FUNC(js_dragonBones_CCArmatureCacheDisplay_getSharedBufferOffset) -static bool js_dragonBones_CCArmatureCacheDisplay_getParamsBuffer(se::State& s) +static bool js_dragonBones_CCArmatureCacheDisplay_setMaterial(se::State& s) { // js_function @@ -14132,25 +14159,49 @@ static bool js_dragonBones_CCArmatureCacheDisplay_getParamsBuffer(se::State& s) const auto& args = s.args(); size_t argc = args.size(); dragonBones::CCArmatureCacheDisplay *arg1 = (dragonBones::CCArmatureCacheDisplay *) NULL ; - se_object_ptr result; + cc::Material *arg2 = (cc::Material *) NULL ; - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = ((dragonBones::CCArmatureCacheDisplay const *)arg1)->getParamsBuffer(); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "CCArmatureCacheDisplay_getParamsBuffer, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "CCArmatureCacheDisplay_setMaterial,2,SWIGTYPE_p_cc__Material"); + (arg1)->setMaterial(arg2); + + + return true; +} +SE_BIND_FUNC(js_dragonBones_CCArmatureCacheDisplay_setMaterial) + +static bool js_dragonBones_CCArmatureCacheDisplay_setRenderEntity(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + dragonBones::CCArmatureCacheDisplay *arg1 = (dragonBones::CCArmatureCacheDisplay *) NULL ; + cc::RenderEntity *arg2 = (cc::RenderEntity *) NULL ; + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "CCArmatureCacheDisplay_setRenderEntity,2,SWIGTYPE_p_cc__RenderEntity"); + (arg1)->setRenderEntity(arg2); return true; } -SE_BIND_FUNC(js_dragonBones_CCArmatureCacheDisplay_getParamsBuffer) +SE_BIND_FUNC(js_dragonBones_CCArmatureCacheDisplay_setRenderEntity) bool js_register_dragonBones_CCArmatureCacheDisplay(se::Object* obj) { auto* cls = se::Class::create("CCArmatureCacheDisplay", obj, nullptr, _SE(js_new_dragonBones_CCArmatureCacheDisplay)); @@ -14179,7 +14230,8 @@ bool js_register_dragonBones_CCArmatureCacheDisplay(se::Object* obj) { cls->defineFunction("updateAnimationCache", _SE(js_dragonBones_CCArmatureCacheDisplay_updateAnimationCache)); cls->defineFunction("updateAllAnimationCache", _SE(js_dragonBones_CCArmatureCacheDisplay_updateAllAnimationCache)); cls->defineFunction("getSharedBufferOffset", _SE(js_dragonBones_CCArmatureCacheDisplay_getSharedBufferOffset)); - cls->defineFunction("getParamsBuffer", _SE(js_dragonBones_CCArmatureCacheDisplay_getParamsBuffer)); + cls->defineFunction("setMaterial", _SE(js_dragonBones_CCArmatureCacheDisplay_setMaterial)); + cls->defineFunction("setRenderEntity", _SE(js_dragonBones_CCArmatureCacheDisplay_setRenderEntity)); diff --git a/native/cocos/bindings/auto/jsb_dragonbones_auto.h b/native/cocos/bindings/auto/jsb_dragonbones_auto.h index dae1d5356cf..162b64e8354 100644 --- a/native/cocos/bindings/auto/jsb_dragonbones_auto.h +++ b/native/cocos/bindings/auto/jsb_dragonbones_auto.h @@ -49,9 +49,6 @@ JSB_REGISTER_OBJECT_TYPE(dragonBones::Rectangle); extern se::Object *__jsb_dragonBones_Rectangle_proto; // NOLINT extern se::Class * __jsb_dragonBones_Rectangle_class; // NOLINT -JSB_REGISTER_OBJECT_TYPE(dragonBones::BlendState); -extern se::Object *__jsb_dragonBones_BlendState_proto; // NOLINT -extern se::Class * __jsb_dragonBones_BlendState_class; // NOLINT JSB_REGISTER_OBJECT_TYPE(dragonBones::Transform); extern se::Object *__jsb_dragonBones_Transform_proto; // NOLINT diff --git a/native/cocos/bindings/auto/jsb_editor_support_auto.cpp b/native/cocos/bindings/auto/jsb_editor_support_auto.cpp index cb332effed5..dfd9c63cb9c 100644 --- a/native/cocos/bindings/auto/jsb_editor_support_auto.cpp +++ b/native/cocos/bindings/auto/jsb_editor_support_auto.cpp @@ -2223,6 +2223,58 @@ static bool js_cc_middleware_Texture2D_setTexParamCallback(se::State& s) } SE_BIND_FUNC(js_cc_middleware_Texture2D_setTexParamCallback) +static bool js_cc_middleware_Texture2D_setRealTexture(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::middleware::Texture2D *arg1 = (cc::middleware::Texture2D *) NULL ; + void *arg2 = (void *) NULL ; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + ok &= sevalue_to_native(args[0], &arg2); + SE_PRECONDITION2(ok, false, "Texture2D_setRealTexture,2,SWIGTYPE_p_void"); + (arg1)->setRealTexture(arg2); + + + return true; +} +SE_BIND_FUNC(js_cc_middleware_Texture2D_setRealTexture) + +static bool js_cc_middleware_Texture2D_getRealTexture(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::middleware::Texture2D *arg1 = (cc::middleware::Texture2D *) NULL ; + void *result = 0 ; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (void *)((cc::middleware::Texture2D const *)arg1)->getRealTexture(); + // %typemap(out) SWIGTYPE* + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "Texture2D_getRealTexture, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + return true; +} +SE_BIND_FUNC(js_cc_middleware_Texture2D_getRealTexture) + bool js_register_cc_middleware_Texture2D(se::Object* obj) { auto* cls = se::Class::create("Texture2D", obj, nullptr, _SE(js_new_cc_middleware_Texture2D)); @@ -2234,6 +2286,8 @@ bool js_register_cc_middleware_Texture2D(se::Object* obj) { cls->defineFunction("setPixelsHigh", _SE(js_cc_middleware_Texture2D_setPixelsHigh)); cls->defineFunction("setRealTextureIndex", _SE(js_cc_middleware_Texture2D_setRealTextureIndex)); cls->defineFunction("setTexParamCallback", _SE(js_cc_middleware_Texture2D_setTexParamCallback)); + cls->defineFunction("setRealTexture", _SE(js_cc_middleware_Texture2D_setRealTexture)); + cls->defineFunction("getRealTexture", _SE(js_cc_middleware_Texture2D_getRealTexture)); @@ -2742,41 +2796,12 @@ static bool js_cc_middleware_IMiddleware_render(se::State& s) } SE_BIND_FUNC(js_cc_middleware_IMiddleware_render) -static bool js_cc_middleware_IMiddleware_getRenderOrder(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::middleware::IMiddleware *arg1 = (cc::middleware::IMiddleware *) NULL ; - uint32_t result; - - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = ((cc::middleware::IMiddleware const *)arg1)->getRenderOrder(); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "IMiddleware_getRenderOrder, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - - - - return true; -} -SE_BIND_FUNC(js_cc_middleware_IMiddleware_getRenderOrder) - bool js_register_cc_middleware_IMiddleware(se::Object* obj) { auto* cls = se::Class::create("IMiddleware", obj, nullptr, nullptr); cls->defineFunction("update", _SE(js_cc_middleware_IMiddleware_update)); cls->defineFunction("render", _SE(js_cc_middleware_IMiddleware_render)); - cls->defineFunction("getRenderOrder", _SE(js_cc_middleware_IMiddleware_getRenderOrder)); diff --git a/native/cocos/bindings/auto/jsb_editor_support_auto.h b/native/cocos/bindings/auto/jsb_editor_support_auto.h index 49db03e567b..173b4c7c5d9 100644 --- a/native/cocos/bindings/auto/jsb_editor_support_auto.h +++ b/native/cocos/bindings/auto/jsb_editor_support_auto.h @@ -124,9 +124,6 @@ JSB_REGISTER_OBJECT_TYPE(cc::middleware::Texture2D); extern se::Object *__jsb_cc_middleware_Texture2D_proto; // NOLINT extern se::Class * __jsb_cc_middleware_Texture2D_class; // NOLINT -JSB_REGISTER_OBJECT_TYPE(cc::middleware::V3F_T2F_C4B); -extern se::Object *__jsb_cc_middleware_V3F_T2F_C4B_proto; // NOLINT -extern se::Class * __jsb_cc_middleware_V3F_T2F_C4B_class; // NOLINT JSB_REGISTER_OBJECT_TYPE(cc::middleware::SpriteFrame); extern se::Object *__jsb_cc_middleware_SpriteFrame_proto; // NOLINT diff --git a/native/cocos/bindings/auto/jsb_pipeline_auto.cpp b/native/cocos/bindings/auto/jsb_pipeline_auto.cpp index e2af79b0d9c..e24ee3cc3c0 100644 --- a/native/cocos/bindings/auto/jsb_pipeline_auto.cpp +++ b/native/cocos/bindings/auto/jsb_pipeline_auto.cpp @@ -11872,24 +11872,20 @@ static bool js_cc_pipeline_InstancedBuffer_merge__SWIG_0(se::State& s) CC_UNUSED bool ok = true; const auto& args = s.args(); cc::pipeline::InstancedBuffer *arg1 = (cc::pipeline::InstancedBuffer *) NULL ; - cc::scene::Model *arg2 = (cc::scene::Model *) NULL ; - cc::scene::SubModel *arg3 = (cc::scene::SubModel *) NULL ; - uint32_t arg4 ; + cc::scene::SubModel *arg2 = (cc::scene::SubModel *) NULL ; + uint32_t arg3 ; arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE* ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "InstancedBuffer_merge,2,SWIGTYPE_p_cc__scene__Model"); - // %typemap(in) SWIGTYPE* - ok &= sevalue_to_native(args[1], &arg3, s.thisObject()); - SE_PRECONDITION2(ok, false, "InstancedBuffer_merge,3,SWIGTYPE_p_cc__scene__SubModel"); + SE_PRECONDITION2(ok, false, "InstancedBuffer_merge,2,SWIGTYPE_p_cc__scene__SubModel"); // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[2], &arg4, s.thisObject()); - SE_PRECONDITION2(ok, false, "InstancedBuffer_merge,4,SWIGTYPE_uint32_t"); + ok &= sevalue_to_native(args[1], &arg3, s.thisObject()); + SE_PRECONDITION2(ok, false, "InstancedBuffer_merge,3,SWIGTYPE_uint32_t"); - (arg1)->merge((cc::scene::Model const *)arg2,(cc::scene::SubModel const *)arg3,arg4); + (arg1)->merge(arg2,arg3); return true; @@ -11902,28 +11898,24 @@ static bool js_cc_pipeline_InstancedBuffer_merge__SWIG_1(se::State& s) CC_UNUSED bool ok = true; const auto& args = s.args(); cc::pipeline::InstancedBuffer *arg1 = (cc::pipeline::InstancedBuffer *) NULL ; - cc::scene::Model *arg2 = (cc::scene::Model *) NULL ; - cc::scene::SubModel *arg3 = (cc::scene::SubModel *) NULL ; - uint32_t arg4 ; - cc::gfx::Shader *arg5 = (cc::gfx::Shader *) NULL ; + cc::scene::SubModel *arg2 = (cc::scene::SubModel *) NULL ; + uint32_t arg3 ; + cc::gfx::Shader *arg4 = (cc::gfx::Shader *) NULL ; arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE* ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "InstancedBuffer_merge,2,SWIGTYPE_p_cc__scene__Model"); - // %typemap(in) SWIGTYPE* - ok &= sevalue_to_native(args[1], &arg3, s.thisObject()); - SE_PRECONDITION2(ok, false, "InstancedBuffer_merge,3,SWIGTYPE_p_cc__scene__SubModel"); + SE_PRECONDITION2(ok, false, "InstancedBuffer_merge,2,SWIGTYPE_p_cc__scene__SubModel"); // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[2], &arg4, s.thisObject()); - SE_PRECONDITION2(ok, false, "InstancedBuffer_merge,4,SWIGTYPE_uint32_t"); + ok &= sevalue_to_native(args[1], &arg3, s.thisObject()); + SE_PRECONDITION2(ok, false, "InstancedBuffer_merge,3,SWIGTYPE_uint32_t"); // %typemap(in) SWIGTYPE* - ok &= sevalue_to_native(args[3], &arg5, s.thisObject()); - SE_PRECONDITION2(ok, false, "InstancedBuffer_merge,5,SWIGTYPE_p_cc__gfx__Shader"); - (arg1)->merge((cc::scene::Model const *)arg2,(cc::scene::SubModel const *)arg3,arg4,arg5); + ok &= sevalue_to_native(args[2], &arg4, s.thisObject()); + SE_PRECONDITION2(ok, false, "InstancedBuffer_merge,4,SWIGTYPE_p_cc__gfx__Shader"); + (arg1)->merge(arg2,arg3,arg4); return true; @@ -11937,13 +11929,13 @@ static bool js_cc_pipeline_InstancedBuffer_merge(se::State& s) size_t argc = args.size(); // js_function_dispatch_case - if (argc == 3) { + if (argc == 2) { ok = js_cc_pipeline_InstancedBuffer_merge__SWIG_0(s); if (ok) { return true; } } // js_function_dispatch_case - if (argc == 4) { + if (argc == 3) { ok = js_cc_pipeline_InstancedBuffer_merge__SWIG_1(s); if (ok) { return true; diff --git a/native/cocos/bindings/auto/jsb_scene_auto.cpp b/native/cocos/bindings/auto/jsb_scene_auto.cpp index e197a13a180..d90bbe9251e 100644 --- a/native/cocos/bindings/auto/jsb_scene_auto.cpp +++ b/native/cocos/bindings/auto/jsb_scene_auto.cpp @@ -723,9 +723,6 @@ using namespace cc; #define cc_scene_Model_updateStamp_get(self_) self_->getUpdateStamp() -#define cc_scene_Model_isInstancingEnabled_get(self_) self_->isInstancingEnabled() - - #define cc_scene_Model_receiveShadow_get(self_) self_->isReceiveShadow() #define cc_scene_Model_receiveShadow_set(self_, val_) self_->setReceiveShadow(val_) @@ -762,10 +759,6 @@ using namespace cc; #define cc_scene_Model_type_set(self_, val_) self_->setType(val_) -#define cc_scene_Model_instancedAttributes_get(self_) self_->getInstancedAttributeBlock() -#define cc_scene_Model_instancedAttributes_set(self_, val_) self_->setInstancedAttributeBlock(val_) - - #define cc_scene_Model_isDynamicBatching_get(self_) self_->isDynamicBatching() #define cc_scene_Model_isDynamicBatching_set(self_, val_) self_->setDynamicBatching(val_) @@ -12930,207 +12923,6 @@ bool js_register_cc_scene_SphereLight(se::Object* obj) { } -se::Class* __jsb_cc_scene_InstancedAttributeBlock_class = nullptr; -se::Object* __jsb_cc_scene_InstancedAttributeBlock_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_scene_InstancedAttributeBlock) - -static bool js_cc_scene_IInstancedAttributeBlock_buffer_set(se::State& s) -{ - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::scene::InstancedAttributeBlock *arg1 = (cc::scene::InstancedAttributeBlock *) NULL ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1->buffer, s.thisObject()); - SE_PRECONDITION2(ok, false, "IInstancedAttributeBlock_buffer_set,2,SWIGTYPE_cc__TypedArrayTempT_uint8_t_t"); - - - - return true; -} -SE_BIND_PROP_SET(js_cc_scene_IInstancedAttributeBlock_buffer_set) - -static bool js_cc_scene_IInstancedAttributeBlock_buffer_get(se::State& s) -{ - CC_UNUSED bool ok = true; - cc::scene::InstancedAttributeBlock *arg1 = (cc::scene::InstancedAttributeBlock *) NULL ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(arg1->buffer, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "IInstancedAttributeBlock_buffer_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->buffer, s.thisObject(), s.rval()); - - - - return true; -} -SE_BIND_PROP_GET(js_cc_scene_IInstancedAttributeBlock_buffer_get) - -static bool js_cc_scene_IInstancedAttributeBlock_views_set(se::State& s) -{ - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::scene::InstancedAttributeBlock *arg1 = (cc::scene::InstancedAttributeBlock *) NULL ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1->views, s.thisObject()); - SE_PRECONDITION2(ok, false, "IInstancedAttributeBlock_views_set,2,SWIGTYPE_ccstd__vectorT_cc__TypedArray_t"); - - - - return true; -} -SE_BIND_PROP_SET(js_cc_scene_IInstancedAttributeBlock_views_set) - -static bool js_cc_scene_IInstancedAttributeBlock_views_get(se::State& s) -{ - CC_UNUSED bool ok = true; - cc::scene::InstancedAttributeBlock *arg1 = (cc::scene::InstancedAttributeBlock *) NULL ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(arg1->views, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "IInstancedAttributeBlock_views_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->views, s.thisObject(), s.rval()); - - - - return true; -} -SE_BIND_PROP_GET(js_cc_scene_IInstancedAttributeBlock_views_get) - -static bool js_cc_scene_IInstancedAttributeBlock_attributes_set(se::State& s) -{ - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::scene::InstancedAttributeBlock *arg1 = (cc::scene::InstancedAttributeBlock *) NULL ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1->attributes, s.thisObject()); - SE_PRECONDITION2(ok, false, "IInstancedAttributeBlock_attributes_set,2,SWIGTYPE_ccstd__vectorT_cc__gfx__Attribute_t"); - - - - return true; -} -SE_BIND_PROP_SET(js_cc_scene_IInstancedAttributeBlock_attributes_set) - -static bool js_cc_scene_IInstancedAttributeBlock_attributes_get(se::State& s) -{ - CC_UNUSED bool ok = true; - cc::scene::InstancedAttributeBlock *arg1 = (cc::scene::InstancedAttributeBlock *) NULL ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(arg1->attributes, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "IInstancedAttributeBlock_attributes_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->attributes, s.thisObject(), s.rval()); - - - - return true; -} -SE_BIND_PROP_GET(js_cc_scene_IInstancedAttributeBlock_attributes_get) - -// js_ctor -static bool js_new_cc_scene_InstancedAttributeBlock(se::State& s) // NOLINT(readability-identifier-naming) -{ - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - - cc::scene::InstancedAttributeBlock *result; - result = (cc::scene::InstancedAttributeBlock *)new cc::scene::InstancedAttributeBlock(); - - - auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); - s.thisObject()->setPrivateObject(ptr); - return true; -} -SE_BIND_CTOR(js_new_cc_scene_InstancedAttributeBlock, __jsb_cc_scene_InstancedAttributeBlock_class, js_delete_cc_scene_InstancedAttributeBlock) - -static bool js_delete_cc_scene_InstancedAttributeBlock(se::State& s) -{ - // js_dtoroverride - return true; -} -SE_BIND_FINALIZE_FUNC(js_delete_cc_scene_InstancedAttributeBlock) - -template<> -bool sevalue_to_native(const se::Value &from, cc::scene::InstancedAttributeBlock * to, se::Object *ctx) -{ - assert(from.isObject()); - se::Object *json = from.toObject(); - auto* data = reinterpret_cast(json->getPrivateData()); - if (data) { - *to = *data; - return true; - } - se::Value field; - bool ok = true; - - json->getProperty("buffer", &field, true); - if (!field.isNullOrUndefined()) { - ok &= sevalue_to_native(field, &(to->buffer), ctx); - } - - - json->getProperty("views", &field, true); - if (!field.isNullOrUndefined()) { - ok &= sevalue_to_native(field, &(to->views), ctx); - } - - - json->getProperty("attributes", &field, true); - if (!field.isNullOrUndefined()) { - ok &= sevalue_to_native(field, &(to->attributes), ctx); - } - - - return ok; -} - - -bool js_register_cc_scene_InstancedAttributeBlock(se::Object* obj) { - auto* cls = se::Class::create("IInstancedAttributeBlock", obj, nullptr, _SE(js_new_cc_scene_InstancedAttributeBlock)); - - cls->defineProperty("buffer", _SE(js_cc_scene_IInstancedAttributeBlock_buffer_get), _SE(js_cc_scene_IInstancedAttributeBlock_buffer_set)); - cls->defineProperty("views", _SE(js_cc_scene_IInstancedAttributeBlock_views_get), _SE(js_cc_scene_IInstancedAttributeBlock_views_set)); - cls->defineProperty("attributes", _SE(js_cc_scene_IInstancedAttributeBlock_attributes_get), _SE(js_cc_scene_IInstancedAttributeBlock_attributes_set)); - - - - - - cls->defineFinalizeFunction(_SE(js_delete_cc_scene_InstancedAttributeBlock)); - - - cls->install(); - JSBClassType::registerClass(cls); - - __jsb_cc_scene_InstancedAttributeBlock_proto = cls->getProto(); - __jsb_cc_scene_InstancedAttributeBlock_class = cls; - se::ScriptEngine::getInstance()->clearException(); - return true; -} - - se::Class* __jsb_cc_scene_Model_class = nullptr; se::Object* __jsb_cc_scene_Model_proto = nullptr; SE_DECLARE_FINALIZE_FUNC(js_delete_cc_scene_Model) @@ -13283,7 +13075,7 @@ static bool js_cc_scene_Model_setSubModelMaterial(se::State& s) } SE_BIND_FUNC(js_cc_scene_Model_setSubModelMaterial) -static bool js_cc_scene_Model__updateInstancedAttributes(se::State& s) +static bool js_cc_scene_Model_updateInstancedAttributes(se::State& s) { // js_function @@ -13292,7 +13084,7 @@ static bool js_cc_scene_Model__updateInstancedAttributes(se::State& s) size_t argc = args.size(); cc::scene::Model *arg1 = (cc::scene::Model *) NULL ; ccstd::vector< cc::gfx::Attribute > *arg2 = 0 ; - cc::scene::Pass *arg3 = (cc::scene::Pass *) NULL ; + cc::scene::SubModel *arg3 = (cc::scene::SubModel *) NULL ; ccstd::vector< cc::gfx::Attribute > temp2 ; if(argc != 2) { @@ -13303,18 +13095,18 @@ static bool js_cc_scene_Model__updateInstancedAttributes(se::State& s) SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE& ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Model__updateInstancedAttributes,2,SWIGTYPE_p_ccstd__vectorT_cc__gfx__Attribute_t"); + SE_PRECONDITION2(ok, false, "Model_updateInstancedAttributes,2,SWIGTYPE_p_ccstd__vectorT_cc__gfx__Attribute_t"); arg2 = &temp2; // %typemap(in) SWIGTYPE* ok &= sevalue_to_native(args[1], &arg3, s.thisObject()); - SE_PRECONDITION2(ok, false, "Model__updateInstancedAttributes,3,SWIGTYPE_p_cc__scene__Pass"); + SE_PRECONDITION2(ok, false, "Model_updateInstancedAttributes,3,SWIGTYPE_p_cc__scene__SubModel"); (arg1)->updateInstancedAttributes((ccstd::vector< cc::gfx::Attribute > const &)*arg2,arg3); return true; } -SE_BIND_FUNC(js_cc_scene_Model__updateInstancedAttributes) +SE_BIND_FUNC(js_cc_scene_Model_updateInstancedAttributes) static bool js_cc_scene_Model_updateTransform(se::State& s) { @@ -13472,41 +13264,6 @@ static bool js_cc_scene_Model_createBoundingShape(se::State& s) } SE_BIND_FUNC(js_cc_scene_Model_createBoundingShape) -static bool js_cc_scene_Model__getInstancedAttributeIndex(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::scene::Model *arg1 = (cc::scene::Model *) NULL ; - ccstd::string *arg2 = 0 ; - ccstd::string temp2 ; - int32_t result; - - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Model__getInstancedAttributeIndex,2,SWIGTYPE_p_ccstd__string"); - arg2 = &temp2; - - result = ((cc::scene::Model const *)arg1)->getInstancedAttributeIndex((ccstd::string const &)*arg2); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Model__getInstancedAttributeIndex, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - - - - return true; -} -SE_BIND_FUNC(js_cc_scene_Model__getInstancedAttributeIndex) - static bool js_cc_scene_Model_initialize(se::State& s) { // js_function @@ -13964,7 +13721,7 @@ static bool js_cc_scene_Model_detachFromScene(se::State& s) } SE_BIND_FUNC(js_cc_scene_Model_detachFromScene) -static bool js_cc_scene_Model_setInstMatWorldIdx(se::State& s) +static bool js_cc_scene_Model_setBounds(se::State& s) { // js_function @@ -13972,7 +13729,7 @@ static bool js_cc_scene_Model_setInstMatWorldIdx(se::State& s) const auto& args = s.args(); size_t argc = args.size(); cc::scene::Model *arg1 = (cc::scene::Model *) NULL ; - int32_t arg2 ; + cc::geometry::AABB *arg2 = (cc::geometry::AABB *) NULL ; if(argc != 1) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); @@ -13980,19 +13737,17 @@ static bool js_cc_scene_Model_setInstMatWorldIdx(se::State& s) } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - // %typemap(in) SWIGTYPE value in + // %typemap(in) SWIGTYPE* ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Model_setInstMatWorldIdx,2,SWIGTYPE_int32_t"); - - (arg1)->setInstMatWorldIdx(arg2); + SE_PRECONDITION2(ok, false, "Model_setBounds,2,SWIGTYPE_p_cc__geometry__AABB"); + (arg1)->setBounds(arg2); return true; } -SE_BIND_FUNC(js_cc_scene_Model_setInstMatWorldIdx) +SE_BIND_FUNC(js_cc_scene_Model_setBounds) -static bool js_cc_scene_Model_setBounds(se::State& s) +static bool js_cc_scene_Model_setCalledFromJS(se::State& s) { // js_function @@ -14000,143 +13755,7 @@ static bool js_cc_scene_Model_setBounds(se::State& s) const auto& args = s.args(); size_t argc = args.size(); cc::scene::Model *arg1 = (cc::scene::Model *) NULL ; - cc::geometry::AABB *arg2 = (cc::geometry::AABB *) NULL ; - - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE* - ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Model_setBounds,2,SWIGTYPE_p_cc__geometry__AABB"); - (arg1)->setBounds(arg2); - - - return true; -} -SE_BIND_FUNC(js_cc_scene_Model_setBounds) - -static bool js_cc_scene_Model_getInstMatWorldIdx(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::scene::Model *arg1 = (cc::scene::Model *) NULL ; - int32_t result; - - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = ((cc::scene::Model const *)arg1)->getInstMatWorldIdx(); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Model_getInstMatWorldIdx, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - - - - return true; -} -SE_BIND_FUNC(js_cc_scene_Model_getInstMatWorldIdx) - -static bool js_cc_scene_Model_getInstanceAttributes(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::scene::Model *arg1 = (cc::scene::Model *) NULL ; - ccstd::vector< cc::gfx::Attribute > *result = 0 ; - - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (ccstd::vector< cc::gfx::Attribute > *) &((cc::scene::Model const *)arg1)->getInstanceAttributes(); - // %typemap(out) SWIGTYPE& - ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Model_getInstanceAttributes, Error processing arguments"); - SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); - - - return true; -} -SE_BIND_FUNC(js_cc_scene_Model_getInstanceAttributes) - -static bool js_cc_scene_Model_getInstancedBuffer(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::scene::Model *arg1 = (cc::scene::Model *) NULL ; - uint8_t *result = 0 ; - - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (uint8_t *)((cc::scene::Model const *)arg1)->getInstancedBuffer(); - // %typemap(out) SWIGTYPE* - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Model_getInstancedBuffer, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - - - return true; -} -SE_BIND_FUNC(js_cc_scene_Model_getInstancedBuffer) - -static bool js_cc_scene_Model_getInstancedBufferSize(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::scene::Model *arg1 = (cc::scene::Model *) NULL ; - uint32_t result; - - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = ((cc::scene::Model const *)arg1)->getInstancedBufferSize(); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Model_getInstancedBufferSize, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - - - - return true; -} -SE_BIND_FUNC(js_cc_scene_Model_getInstancedBufferSize) - -static bool js_cc_scene_Model_setCalledFromJS(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::scene::Model *arg1 = (cc::scene::Model *) NULL ; - bool arg2 ; + bool arg2 ; if(argc != 1) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); @@ -14154,44 +13773,6 @@ static bool js_cc_scene_Model_setCalledFromJS(se::State& s) } SE_BIND_FUNC(js_cc_scene_Model_setCalledFromJS) -static bool js_cc_scene_Model_setInstancedAttributesViewData(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::scene::Model *arg1 = (cc::scene::Model *) NULL ; - index_t arg2 ; - index_t arg3 ; - float arg4 ; - - if(argc != 3) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Model_setInstancedAttributesViewData,2,SWIGTYPE_int32_t"); - - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[1], &arg3, s.thisObject()); - SE_PRECONDITION2(ok, false, "Model_setInstancedAttributesViewData,3,SWIGTYPE_int32_t"); - - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[2], &arg4, nullptr); - SE_PRECONDITION2(ok, false, "Model_setInstancedAttributesViewData,4,SWIGTYPE_float"); - (arg1)->setInstancedAttributesViewData(arg2,arg3,arg4); - - - return true; -} -SE_BIND_FUNC(js_cc_scene_Model_setInstancedAttributesViewData) - static bool js_cc_scene_Model_isModelImplementedInJS(se::State& s) { // js_function @@ -14602,23 +14183,6 @@ static bool js_cc_scene_Model_updateStamp_get(se::State& s) } SE_BIND_PROP_GET(js_cc_scene_Model_updateStamp_get) -static bool js_cc_scene_Model_isInstancingEnabled_get(se::State& s) -{ - CC_UNUSED bool ok = true; - cc::scene::Model *arg1 = (cc::scene::Model *) NULL ; - bool result; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (bool)cc_scene_Model_isInstancingEnabled_get(arg1); - // out 5 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - - - return true; -} -SE_BIND_PROP_GET(js_cc_scene_Model_isInstancingEnabled_get) - static bool js_cc_scene_Model_receiveShadow_set(se::State& s) { CC_UNUSED bool ok = true; @@ -14964,48 +14528,6 @@ static bool js_cc_scene_Model_type_get(se::State& s) } SE_BIND_PROP_GET(js_cc_scene_Model_type_get) -static bool js_cc_scene_Model_instancedAttributes_set(se::State& s) -{ - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::scene::Model *arg1 = (cc::scene::Model *) NULL ; - cc::scene::InstancedAttributeBlock *arg2 = 0 ; - cc::scene::InstancedAttributeBlock temp2 ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Model_instancedAttributes_set,2,SWIGTYPE_p_cc__scene__InstancedAttributeBlock"); - arg2 = &temp2; - - cc_scene_Model_instancedAttributes_set(arg1,*arg2); - - - return true; -} -SE_BIND_PROP_SET(js_cc_scene_Model_instancedAttributes_set) - -static bool js_cc_scene_Model_instancedAttributes_get(se::State& s) -{ - CC_UNUSED bool ok = true; - cc::scene::Model *arg1 = (cc::scene::Model *) NULL ; - cc::scene::InstancedAttributeBlock *result = 0 ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (cc::scene::InstancedAttributeBlock *) &cc_scene_Model_instancedAttributes_get(arg1); - // %typemap(out) SWIGTYPE& - ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Model_instancedAttributes_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); - - - return true; -} -SE_BIND_PROP_GET(js_cc_scene_Model_instancedAttributes_get) - static bool js_cc_scene_Model_isDynamicBatching_set(se::State& s) { CC_UNUSED bool ok = true; @@ -15100,7 +14622,6 @@ bool js_register_cc_scene_Model(se::Object* obj) { cls->defineProperty("worldBoundBuffer", _SE(js_cc_scene_Model_worldBoundBuffer_get), _SE(js_cc_scene_Model_worldBoundBuffer_set)); cls->defineProperty("localBuffer", _SE(js_cc_scene_Model_localBuffer_get), _SE(js_cc_scene_Model_localBuffer_set)); cls->defineProperty("updateStamp", _SE(js_cc_scene_Model_updateStamp_get), nullptr); - cls->defineProperty("isInstancingEnabled", _SE(js_cc_scene_Model_isInstancingEnabled_get), nullptr); cls->defineProperty("receiveShadow", _SE(js_cc_scene_Model_receiveShadow_get), _SE(js_cc_scene_Model_receiveShadow_set)); cls->defineProperty("castShadow", _SE(js_cc_scene_Model_castShadow_get), _SE(js_cc_scene_Model_castShadow_set)); cls->defineProperty("shadowBias", _SE(js_cc_scene_Model_shadowBias_get), _SE(js_cc_scene_Model_shadowBias_set)); @@ -15110,7 +14631,6 @@ bool js_register_cc_scene_Model(se::Object* obj) { cls->defineProperty("visFlags", _SE(js_cc_scene_Model_visFlags_get), _SE(js_cc_scene_Model_visFlags_set)); cls->defineProperty("enabled", _SE(js_cc_scene_Model_enabled_get), _SE(js_cc_scene_Model_enabled_set)); cls->defineProperty("type", _SE(js_cc_scene_Model_type_get), _SE(js_cc_scene_Model_type_set)); - cls->defineProperty("instancedAttributes", _SE(js_cc_scene_Model_instancedAttributes_get), _SE(js_cc_scene_Model_instancedAttributes_set)); cls->defineProperty("isDynamicBatching", _SE(js_cc_scene_Model_isDynamicBatching_get), _SE(js_cc_scene_Model_isDynamicBatching_set)); cls->defineProperty("priority", _SE(js_cc_scene_Model_priority_get), _SE(js_cc_scene_Model_priority_set)); @@ -15118,13 +14638,12 @@ bool js_register_cc_scene_Model(se::Object* obj) { cls->defineFunction("initSubModel", _SE(js_cc_scene_Model_initSubModel)); cls->defineFunction("getMacroPatches", _SE(js_cc_scene_Model_getMacroPatches)); cls->defineFunction("setSubModelMaterial", _SE(js_cc_scene_Model_setSubModelMaterial)); - cls->defineFunction("_updateInstancedAttributes", _SE(js_cc_scene_Model__updateInstancedAttributes)); + cls->defineFunction("updateInstancedAttributes", _SE(js_cc_scene_Model_updateInstancedAttributes)); cls->defineFunction("updateTransform", _SE(js_cc_scene_Model_updateTransform)); cls->defineFunction("updateUBOs", _SE(js_cc_scene_Model_updateUBOs)); cls->defineFunction("_updateLocalDescriptors", _SE(js_cc_scene_Model__updateLocalDescriptors)); cls->defineFunction("updateWorldBoundDescriptors", _SE(js_cc_scene_Model_updateWorldBoundDescriptors)); cls->defineFunction("createBoundingShape", _SE(js_cc_scene_Model_createBoundingShape)); - cls->defineFunction("_getInstancedAttributeIndex", _SE(js_cc_scene_Model__getInstancedAttributeIndex)); cls->defineFunction("initialize", _SE(js_cc_scene_Model_initialize)); cls->defineFunction("initLightingmap", _SE(js_cc_scene_Model_initLightingmap)); cls->defineFunction("_initLocalDescriptors", _SE(js_cc_scene_Model__initLocalDescriptors)); @@ -15142,14 +14661,8 @@ bool js_register_cc_scene_Model(se::Object* obj) { cls->defineFunction("updateLocalShadowBias", _SE(js_cc_scene_Model_updateLocalShadowBias)); cls->defineFunction("attachToScene", _SE(js_cc_scene_Model_attachToScene)); cls->defineFunction("detachFromScene", _SE(js_cc_scene_Model_detachFromScene)); - cls->defineFunction("setInstMatWorldIdx", _SE(js_cc_scene_Model_setInstMatWorldIdx)); cls->defineFunction("setBounds", _SE(js_cc_scene_Model_setBounds)); - cls->defineFunction("getInstMatWorldIdx", _SE(js_cc_scene_Model_getInstMatWorldIdx)); - cls->defineFunction("getInstanceAttributes", _SE(js_cc_scene_Model_getInstanceAttributes)); - cls->defineFunction("getInstancedBuffer", _SE(js_cc_scene_Model_getInstancedBuffer)); - cls->defineFunction("getInstancedBufferSize", _SE(js_cc_scene_Model_getInstancedBufferSize)); cls->defineFunction("setCalledFromJS", _SE(js_cc_scene_Model_setCalledFromJS)); - cls->defineFunction("setInstancedAttributesViewData", _SE(js_cc_scene_Model_setInstancedAttributesViewData)); cls->defineFunction("isModelImplementedInJS", _SE(js_cc_scene_Model_isModelImplementedInJS)); @@ -15168,6 +14681,207 @@ bool js_register_cc_scene_Model(se::Object* obj) { } +se::Class* __jsb_cc_scene_InstancedAttributeBlock_class = nullptr; +se::Object* __jsb_cc_scene_InstancedAttributeBlock_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_scene_InstancedAttributeBlock) + +static bool js_cc_scene_IInstancedAttributeBlock_buffer_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::scene::InstancedAttributeBlock *arg1 = (cc::scene::InstancedAttributeBlock *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg1->buffer, s.thisObject()); + SE_PRECONDITION2(ok, false, "IInstancedAttributeBlock_buffer_set,2,SWIGTYPE_cc__TypedArrayTempT_uint8_t_t"); + + + + return true; +} +SE_BIND_PROP_SET(js_cc_scene_IInstancedAttributeBlock_buffer_set) + +static bool js_cc_scene_IInstancedAttributeBlock_buffer_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::scene::InstancedAttributeBlock *arg1 = (cc::scene::InstancedAttributeBlock *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(arg1->buffer, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "IInstancedAttributeBlock_buffer_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(arg1->buffer, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_PROP_GET(js_cc_scene_IInstancedAttributeBlock_buffer_get) + +static bool js_cc_scene_IInstancedAttributeBlock_views_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::scene::InstancedAttributeBlock *arg1 = (cc::scene::InstancedAttributeBlock *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg1->views, s.thisObject()); + SE_PRECONDITION2(ok, false, "IInstancedAttributeBlock_views_set,2,SWIGTYPE_ccstd__vectorT_cc__TypedArray_t"); + + + + return true; +} +SE_BIND_PROP_SET(js_cc_scene_IInstancedAttributeBlock_views_set) + +static bool js_cc_scene_IInstancedAttributeBlock_views_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::scene::InstancedAttributeBlock *arg1 = (cc::scene::InstancedAttributeBlock *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(arg1->views, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "IInstancedAttributeBlock_views_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(arg1->views, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_PROP_GET(js_cc_scene_IInstancedAttributeBlock_views_get) + +static bool js_cc_scene_IInstancedAttributeBlock_attributes_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::scene::InstancedAttributeBlock *arg1 = (cc::scene::InstancedAttributeBlock *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg1->attributes, s.thisObject()); + SE_PRECONDITION2(ok, false, "IInstancedAttributeBlock_attributes_set,2,SWIGTYPE_ccstd__vectorT_cc__gfx__Attribute_t"); + + + + return true; +} +SE_BIND_PROP_SET(js_cc_scene_IInstancedAttributeBlock_attributes_set) + +static bool js_cc_scene_IInstancedAttributeBlock_attributes_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::scene::InstancedAttributeBlock *arg1 = (cc::scene::InstancedAttributeBlock *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(arg1->attributes, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "IInstancedAttributeBlock_attributes_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(arg1->attributes, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_PROP_GET(js_cc_scene_IInstancedAttributeBlock_attributes_get) + +// js_ctor +static bool js_new_cc_scene_InstancedAttributeBlock(se::State& s) // NOLINT(readability-identifier-naming) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + + cc::scene::InstancedAttributeBlock *result; + result = (cc::scene::InstancedAttributeBlock *)new cc::scene::InstancedAttributeBlock(); + + + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); + return true; +} +SE_BIND_CTOR(js_new_cc_scene_InstancedAttributeBlock, __jsb_cc_scene_InstancedAttributeBlock_class, js_delete_cc_scene_InstancedAttributeBlock) + +static bool js_delete_cc_scene_InstancedAttributeBlock(se::State& s) +{ + // js_dtoroverride + return true; +} +SE_BIND_FINALIZE_FUNC(js_delete_cc_scene_InstancedAttributeBlock) + +template<> +bool sevalue_to_native(const se::Value &from, cc::scene::InstancedAttributeBlock * to, se::Object *ctx) +{ + assert(from.isObject()); + se::Object *json = from.toObject(); + auto* data = reinterpret_cast(json->getPrivateData()); + if (data) { + *to = *data; + return true; + } + se::Value field; + bool ok = true; + + json->getProperty("buffer", &field, true); + if (!field.isNullOrUndefined()) { + ok &= sevalue_to_native(field, &(to->buffer), ctx); + } + + + json->getProperty("views", &field, true); + if (!field.isNullOrUndefined()) { + ok &= sevalue_to_native(field, &(to->views), ctx); + } + + + json->getProperty("attributes", &field, true); + if (!field.isNullOrUndefined()) { + ok &= sevalue_to_native(field, &(to->attributes), ctx); + } + + + return ok; +} + + +bool js_register_cc_scene_InstancedAttributeBlock(se::Object* obj) { + auto* cls = se::Class::create("IInstancedAttributeBlock", obj, nullptr, _SE(js_new_cc_scene_InstancedAttributeBlock)); + + cls->defineProperty("buffer", _SE(js_cc_scene_IInstancedAttributeBlock_buffer_get), _SE(js_cc_scene_IInstancedAttributeBlock_buffer_set)); + cls->defineProperty("views", _SE(js_cc_scene_IInstancedAttributeBlock_views_get), _SE(js_cc_scene_IInstancedAttributeBlock_views_set)); + cls->defineProperty("attributes", _SE(js_cc_scene_IInstancedAttributeBlock_attributes_get), _SE(js_cc_scene_IInstancedAttributeBlock_attributes_set)); + + + + + + cls->defineFinalizeFunction(_SE(js_delete_cc_scene_InstancedAttributeBlock)); + + + cls->install(); + JSBClassType::registerClass(cls); + + __jsb_cc_scene_InstancedAttributeBlock_proto = cls->getProto(); + __jsb_cc_scene_InstancedAttributeBlock_class = cls; + se::ScriptEngine::getInstance()->clearException(); + return true; +} + + se::Class* __jsb_cc_scene_SubModel_class = nullptr; se::Object* __jsb_cc_scene_SubModel_proto = nullptr; SE_DECLARE_FINALIZE_FUNC(js_delete_cc_scene_SubModel) @@ -15336,6 +15050,45 @@ static bool js_cc_scene_SubModel_setOwner(se::State& s) } SE_BIND_FUNC(js_cc_scene_SubModel_setOwner) +static bool js_cc_scene_SubModel_setInstancedAttribute(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::scene::SubModel *arg1 = (cc::scene::SubModel *) NULL ; + ccstd::string *arg2 = 0 ; + float *arg3 = (float *) NULL ; + uint32_t arg4 ; + ccstd::string temp2 ; + + if(argc != 3) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "SubModel_setInstancedAttribute,2,SWIGTYPE_p_ccstd__string"); + arg2 = &temp2; + + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[1], &arg3, s.thisObject()); + SE_PRECONDITION2(ok, false, "SubModel_setInstancedAttribute,3,SWIGTYPE_p_float"); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[2], &arg4, s.thisObject()); + SE_PRECONDITION2(ok, false, "SubModel_setInstancedAttribute,4,SWIGTYPE_uint32_t"); + + (arg1)->setInstancedAttribute((ccstd::string const &)*arg2,(float const *)arg3,arg4); + + + return true; +} +SE_BIND_FUNC(js_cc_scene_SubModel_setInstancedAttribute) + static bool js_cc_scene_SubModel_getWorldBoundDescriptorSet(se::State& s) { // js_function @@ -15955,6 +15708,7 @@ bool js_register_cc_scene_SubModel(se::Object* obj) { cls->defineFunction("getPass", _SE(js_cc_scene_SubModel_getPass)); cls->defineFunction("setWorldBoundDescriptorSet", _SE(js_cc_scene_SubModel_setWorldBoundDescriptorSet)); cls->defineFunction("setOwner", _SE(js_cc_scene_SubModel_setOwner)); + cls->defineFunction("setInstancedAttribute", _SE(js_cc_scene_SubModel_setInstancedAttribute)); cls->defineFunction("getWorldBoundDescriptorSet", _SE(js_cc_scene_SubModel_getWorldBoundDescriptorSet)); cls->defineFunction("getOwner", _SE(js_cc_scene_SubModel_getOwner)); cls->defineFunction("getId", _SE(js_cc_scene_SubModel_getId)); @@ -26836,8 +26590,8 @@ bool register_all_scene(se::Object* obj) { js_register_cc_scene_DirectionalLight(ns); js_register_cc_scene_SpotLight(ns); js_register_cc_scene_SphereLight(ns); - js_register_cc_scene_InstancedAttributeBlock(ns); js_register_cc_scene_Model(ns); + js_register_cc_scene_InstancedAttributeBlock(ns); js_register_cc_scene_SubModel(ns); js_register_cc_scene_PassDynamicsValue(ns); js_register_cc_scene_IBlockRef(ns); diff --git a/native/cocos/bindings/auto/jsb_scene_auto.h b/native/cocos/bindings/auto/jsb_scene_auto.h index e7502d153dc..84d29af6062 100644 --- a/native/cocos/bindings/auto/jsb_scene_auto.h +++ b/native/cocos/bindings/auto/jsb_scene_auto.h @@ -144,14 +144,6 @@ extern se::Object *__jsb_cc_scene_Shadows_proto; // NOLINT extern se::Class * __jsb_cc_scene_Shadows_class; // NOLINT -extern se::Object *__jsb_cc_scene_InstancedAttributeBlock_proto; // NOLINT -extern se::Class *__jsb_cc_scene_InstancedAttributeBlock_class; // NOLINT - -bool js_register_cc_scene_InstancedAttributeBlock(se::Object *obj); // NOLINT - -template <> -bool sevalue_to_native(const se::Value &, cc::scene::InstancedAttributeBlock *, se::Object *ctx); //NOLINT - JSB_REGISTER_OBJECT_TYPE(cc::scene::SkyboxInfo); extern se::Object *__jsb_cc_scene_SkyboxInfo_proto; // NOLINT extern se::Class * __jsb_cc_scene_SkyboxInfo_class; // NOLINT @@ -177,6 +169,11 @@ extern se::Object *__jsb_cc_scene_SphereLight_proto; // NOLINT extern se::Class * __jsb_cc_scene_SphereLight_class; // NOLINT +JSB_REGISTER_OBJECT_TYPE(cc::scene::Model); +extern se::Object *__jsb_cc_scene_Model_proto; // NOLINT +extern se::Class * __jsb_cc_scene_Model_class; // NOLINT + + JSB_REGISTER_OBJECT_TYPE(cc::scene::InstancedAttributeBlock); extern se::Object *__jsb_cc_scene_InstancedAttributeBlock_proto; // NOLINT extern se::Class * __jsb_cc_scene_InstancedAttributeBlock_class; // NOLINT @@ -186,11 +183,6 @@ template<> bool sevalue_to_native(const se::Value &from, cc::scene::InstancedAttributeBlock * to, se::Object *ctx); -JSB_REGISTER_OBJECT_TYPE(cc::scene::Model); -extern se::Object *__jsb_cc_scene_Model_proto; // NOLINT -extern se::Class * __jsb_cc_scene_Model_class; // NOLINT - - JSB_REGISTER_OBJECT_TYPE(cc::scene::SubModel); extern se::Object *__jsb_cc_scene_SubModel_proto; // NOLINT extern se::Class * __jsb_cc_scene_SubModel_class; // NOLINT diff --git a/native/cocos/bindings/auto/jsb_spine_auto.cpp b/native/cocos/bindings/auto/jsb_spine_auto.cpp index 9a8e2902d60..5d0e867e35d 100644 --- a/native/cocos/bindings/auto/jsb_spine_auto.cpp +++ b/native/cocos/bindings/auto/jsb_spine_auto.cpp @@ -61,6 +61,8 @@ #include "bindings/manual/jsb_global.h" +#include "bindings/auto/jsb_2d_auto.h" +#include "bindings/auto/jsb_assets_auto.h" #include "bindings/auto/jsb_spine_auto.h" using namespace spine; @@ -19499,34 +19501,6 @@ static bool js_spine_SkeletonRenderer_getSharedBufferOffset(se::State& s) } SE_BIND_FUNC(js_spine_SkeletonRenderer_getSharedBufferOffset) -static bool js_spine_SkeletonRenderer_getParamsBuffer(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - spine::SkeletonRenderer *arg1 = (spine::SkeletonRenderer *) NULL ; - se_object_ptr result; - - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = ((spine::SkeletonRenderer const *)arg1)->getParamsBuffer(); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "SkeletonRenderer_getParamsBuffer, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - - - - return true; -} -SE_BIND_FUNC(js_spine_SkeletonRenderer_getParamsBuffer) - static bool js_spine_SkeletonRenderer_setColor(se::State& s) { // js_function @@ -20339,6 +20313,58 @@ static bool js_spine_SkeletonRenderer_initialize(se::State& s) } SE_BIND_FUNC(js_spine_SkeletonRenderer_initialize) +static bool js_spine_SkeletonRenderer_setMaterial(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + spine::SkeletonRenderer *arg1 = (spine::SkeletonRenderer *) NULL ; + cc::Material *arg2 = (cc::Material *) NULL ; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "SkeletonRenderer_setMaterial,2,SWIGTYPE_p_cc__Material"); + (arg1)->setMaterial(arg2); + + + return true; +} +SE_BIND_FUNC(js_spine_SkeletonRenderer_setMaterial) + +static bool js_spine_SkeletonRenderer_setRenderEntity(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + spine::SkeletonRenderer *arg1 = (spine::SkeletonRenderer *) NULL ; + cc::RenderEntity *arg2 = (cc::RenderEntity *) NULL ; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "SkeletonRenderer_setRenderEntity,2,SWIGTYPE_p_cc__RenderEntity"); + (arg1)->setRenderEntity(arg2); + + + return true; +} +SE_BIND_FUNC(js_spine_SkeletonRenderer_setRenderEntity) + bool js_register_spine_SkeletonRenderer(se::Object* obj) { auto* cls = se::Class::create("SkeletonRenderer", obj, nullptr, _SE(js_new_SkeletonRenderer)); @@ -20364,7 +20390,6 @@ bool js_register_spine_SkeletonRenderer(se::Object* obj) { cls->defineFunction("setSlotsRange", _SE(js_spine_SkeletonRenderer_setSlotsRange)); cls->defineFunction("getDebugData", _SE(js_spine_SkeletonRenderer_getDebugData)); cls->defineFunction("getSharedBufferOffset", _SE(js_spine_SkeletonRenderer_getSharedBufferOffset)); - cls->defineFunction("getParamsBuffer", _SE(js_spine_SkeletonRenderer_getParamsBuffer)); cls->defineFunction("setColor", _SE(js_spine_SkeletonRenderer_setColor)); cls->defineFunction("setBatchEnabled", _SE(js_spine_SkeletonRenderer_setBatchEnabled)); cls->defineFunction("setDebugBonesEnabled", _SE(js_spine_SkeletonRenderer_setDebugBonesEnabled)); @@ -20380,6 +20405,8 @@ bool js_register_spine_SkeletonRenderer(se::Object* obj) { cls->defineFunction("initWithUUID", _SE(js_spine_SkeletonRenderer_initWithUUID)); cls->defineFunction("initWithSkeleton", _SE(js_spine_SkeletonRenderer_initWithSkeleton)); cls->defineFunction("initialize", _SE(js_spine_SkeletonRenderer_initialize)); + cls->defineFunction("setMaterial", _SE(js_spine_SkeletonRenderer_setMaterial)); + cls->defineFunction("setRenderEntity", _SE(js_spine_SkeletonRenderer_setRenderEntity)); cls->defineStaticFunction("create", _SE(js_spine_SkeletonRenderer_create_static)); @@ -22871,7 +22898,7 @@ static bool js_spine_SkeletonCacheAnimation_getSharedBufferOffset(se::State& s) } SE_BIND_FUNC(js_spine_SkeletonCacheAnimation_getSharedBufferOffset) -static bool js_spine_SkeletonCacheAnimation_getParamsBuffer(se::State& s) +static bool js_spine_SkeletonCacheAnimation_setMaterial(se::State& s) { // js_function @@ -22879,25 +22906,49 @@ static bool js_spine_SkeletonCacheAnimation_getParamsBuffer(se::State& s) const auto& args = s.args(); size_t argc = args.size(); spine::SkeletonCacheAnimation *arg1 = (spine::SkeletonCacheAnimation *) NULL ; - se_object_ptr result; + cc::Material *arg2 = (cc::Material *) NULL ; - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = ((spine::SkeletonCacheAnimation const *)arg1)->getParamsBuffer(); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "SkeletonCacheAnimation_getParamsBuffer, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "SkeletonCacheAnimation_setMaterial,2,SWIGTYPE_p_cc__Material"); + (arg1)->setMaterial(arg2); + + + return true; +} +SE_BIND_FUNC(js_spine_SkeletonCacheAnimation_setMaterial) + +static bool js_spine_SkeletonCacheAnimation_setRenderEntity(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + spine::SkeletonCacheAnimation *arg1 = (spine::SkeletonCacheAnimation *) NULL ; + cc::RenderEntity *arg2 = (cc::RenderEntity *) NULL ; + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "SkeletonCacheAnimation_setRenderEntity,2,SWIGTYPE_p_cc__RenderEntity"); + (arg1)->setRenderEntity(arg2); return true; } -SE_BIND_FUNC(js_spine_SkeletonCacheAnimation_getParamsBuffer) +SE_BIND_FUNC(js_spine_SkeletonCacheAnimation_setRenderEntity) bool js_register_spine_SkeletonCacheAnimation(se::Object* obj) { auto* cls = se::Class::create("SkeletonCacheAnimation", obj, nullptr, _SE(js_new_spine_SkeletonCacheAnimation)); @@ -22935,7 +22986,8 @@ bool js_register_spine_SkeletonCacheAnimation(se::Object* obj) { cls->defineFunction("setBonesToSetupPose", _SE(js_spine_SkeletonCacheAnimation_setBonesToSetupPose)); cls->defineFunction("setSlotsToSetupPose", _SE(js_spine_SkeletonCacheAnimation_setSlotsToSetupPose)); cls->defineFunction("getSharedBufferOffset", _SE(js_spine_SkeletonCacheAnimation_getSharedBufferOffset)); - cls->defineFunction("getParamsBuffer", _SE(js_spine_SkeletonCacheAnimation_getParamsBuffer)); + cls->defineFunction("setMaterial", _SE(js_spine_SkeletonCacheAnimation_setMaterial)); + cls->defineFunction("setRenderEntity", _SE(js_spine_SkeletonCacheAnimation_setRenderEntity)); From a5157507917475cb762e4c83575da30d7781a35c Mon Sep 17 00:00:00 2001 From: mmyduckx <308303735@qq.com> Date: Fri, 14 Oct 2022 18:06:26 +0800 Subject: [PATCH 020/829] fix set Bold/Italic font on mac/ios/win (#13048) --- .../canvas/CanvasRenderingContext2D.cpp | 32 ++++++++++--------- .../CanvasRenderingContext2DDelegate.cpp | 12 ++++--- 2 files changed, 25 insertions(+), 19 deletions(-) diff --git a/native/cocos/platform/interfaces/modules/canvas/CanvasRenderingContext2D.cpp b/native/cocos/platform/interfaces/modules/canvas/CanvasRenderingContext2D.cpp index 7fa5699fe52..06babed6fc3 100644 --- a/native/cocos/platform/interfaces/modules/canvas/CanvasRenderingContext2D.cpp +++ b/native/cocos/platform/interfaces/modules/canvas/CanvasRenderingContext2D.cpp @@ -233,10 +233,11 @@ void CanvasRenderingContext2D::setFont(const ccstd::string &font) { fontSizeStr = results[2].str(); fontName = results[5].str(); } - + bool isItalic = font.find("italic", 0) != ccstd::string::npos || font.find("Italic", 0) != ccstd::string::npos; auto fontSize = static_cast(atof(fontSizeStr.c_str())); - //SE_LOGD("CanvasRenderingContext2D::set_font: %s, Size: %f, isBold: %b\n", fontName.c_str(), fontSize, !boldStr.empty()); - _delegate->updateFont(fontName, fontSize, !boldStr.empty(), false, false, false); + bool isBold = !boldStr.empty() || font.find("bold", 0) != ccstd::string::npos || font.find("Bold", 0) != ccstd::string::npos; + //SE_LOGD("CanvasRenderingContext2D::set_font: %s, Size: %f, isBold: %b\n", fontName.c_str(), fontSize, isBold); + _delegate->updateFont(fontName, fontSize, isBold, isItalic, false, false); } #elif CC_PLATFORM == CC_PLATFORM_QNX if (_font != font) { @@ -254,10 +255,11 @@ void CanvasRenderingContext2D::setFont(const ccstd::string &font) { fontSizeStr = results[2].str(); fontName = results[5].str(); } - bool isItalic = font.find("italic", 0) != ccstd::string::npos; + bool isItalic = font.find("italic", 0) != ccstd::string::npos || font.find("Italic", 0) != ccstd::string::npos; auto fontSize = static_cast(atof(fontSizeStr.c_str())); - //SE_LOGD("CanvasRenderingContext2D::set_font: %s, Size: %f, isBold: %b\n", fontName.c_str(), fontSize, !boldStr.empty()); - _delegate->updateFont(fontName, fontSize, !boldStr.empty(), isItalic, false, false); + bool isBold = !boldStr.empty() || font.find("bold", 0) != ccstd::string::npos || font.find("Bold", 0) != ccstd::string::npos; + //SE_LOGD("CanvasRenderingContext2D::set_font: %s, Size: %f, isBold: %b\n", fontName.c_str(), fontSize, isBold); + _delegate->updateFont(fontName, fontSize, isBold, isItalic, false, false); } #elif CC_PLATFORM == CC_PLATFORM_LINUX if (_font != font) { @@ -280,10 +282,10 @@ void CanvasRenderingContext2D::setFont(const ccstd::string &font) { } } - bool isBold = font.find("bold", 0) != ccstd::string::npos; - bool isItalic = font.find("italic", 0) != ccstd::string::npos; + bool isBold = font.find("bold", 0) != ccstd::string::npos || font.find("Bold", 0) != ccstd::string::npos; + bool isItalic = font.find("italic", 0) != ccstd::string::npos || font.find("Italic", 0) != ccstd::string::npos; float fontSize = static_cast(atof(fontSizeStr.c_str())); - //SE_LOGD("CanvasRenderingContext2D::set_font: %s, Size: %f, isBold: %b\n", fontName.c_str(), fontSize, !boldStr.empty()); + //SE_LOGD("CanvasRenderingContext2D::set_font: %s, Size: %f, isBold: %b\n", fontName.c_str(), fontSize, isBold); _delegate->updateFont(fontName, fontSize, isBold, isItalic, false, false); } #elif CC_PLATFORM == CC_PLATFORM_ANDROID || CC_PLATFORM == CC_PLATFORM_OHOS @@ -307,10 +309,10 @@ void CanvasRenderingContext2D::setFont(const ccstd::string &font) { } double fontSize = atof(fontSizeStr.c_str()); - bool isBold = font.find("bold", 0) != ccstd::string::npos; - bool isItalic = font.find("italic", 0) != ccstd::string::npos; - bool isSmallCaps = font.find("small-caps", 0) != ccstd::string::npos; - bool isOblique = font.find("oblique", 0) != ccstd::string::npos; + bool isBold = font.find("bold", 0) != ccstd::string::npos || font.find("Bold", 0) != ccstd::string::npos; + bool isItalic = font.find("italic", 0) != ccstd::string::npos || font.find("Italic", 0) != ccstd::string::npos; + bool isSmallCaps = font.find("small-caps", 0) != ccstd::string::npos || font.find("Small-Caps") !=ccstd::string::npos; + bool isOblique = font.find("oblique", 0) != ccstd::string::npos || font.find("Oblique", 0) != ccstd::string::npos ; //font-style: italic, oblique, normal //font-weight: normal, bold //font-variant: normal, small-caps @@ -323,7 +325,7 @@ void CanvasRenderingContext2D::setFont(const ccstd::string &font) { ccstd::string boldStr; ccstd::string fontName = "Arial"; ccstd::string fontSizeStr = "30"; - bool isItalic = font.find("italic", 0) != ccstd::string::npos; + bool isItalic = font.find("italic", 0) != ccstd::string::npos || font.find("Italic", 0) != ccstd::string::npos; // support get font name from `60px American` or `60px "American abc-abc_abc"` std::regex re("(bold)?\\s*((\\d+)([\\.]\\d+)?)px\\s+([\\w-]+|\"[\\w -]+\"$)"); @@ -334,7 +336,7 @@ void CanvasRenderingContext2D::setFont(const ccstd::string &font) { fontName = results[5].str(); } float fontSize = atof(fontSizeStr.c_str()); - bool isBold = !boldStr.empty(); + bool isBold = !boldStr.empty() || font.find("bold", 0) != ccstd::string::npos || font.find("Bold", 0) != ccstd::string::npos; _delegate->updateFont(fontName, static_cast(fontSize), isBold, isItalic, false, false); } #endif diff --git a/native/cocos/platform/win32/modules/CanvasRenderingContext2DDelegate.cpp b/native/cocos/platform/win32/modules/CanvasRenderingContext2DDelegate.cpp index c5f07a520f3..0ef9bd9d620 100644 --- a/native/cocos/platform/win32/modules/CanvasRenderingContext2DDelegate.cpp +++ b/native/cocos/platform/win32/modules/CanvasRenderingContext2DDelegate.cpp @@ -186,7 +186,7 @@ CanvasRenderingContext2DDelegate::Size CanvasRenderingContext2DDelegate::measure void CanvasRenderingContext2DDelegate::updateFont(const ccstd::string &fontName, float fontSize, bool bold, - bool /* italic */, + bool italic, bool /* oblique */, bool /* smallCaps */) { do { @@ -221,13 +221,17 @@ void CanvasRenderingContext2DDelegate::updateFont(const ccstd::string &fontName, strcpy_s(tFont.lfFaceName, LF_FACESIZE, _fontName.c_str()); } - if (_fontSize) + if (_fontSize) { tFont.lfHeight = -_fontSize; + } - if (bold) + if (bold) { tFont.lfWeight = FW_BOLD; - else + } else { tFont.lfWeight = FW_NORMAL; + } + + tFont.lfItalic = italic; // disable Cleartype tFont.lfQuality = ANTIALIASED_QUALITY; From 4e2f0a29e05c144e0556380fa1b0a694bf670b3a Mon Sep 17 00:00:00 2001 From: Cocos Robot <48829427+cocos-robot@users.noreply.github.com> Date: Mon, 17 Oct 2022 10:10:57 +0800 Subject: [PATCH 021/829] [ci skip][AUTO]: Automated code generating update: dc597684a74e8bf3868b2de81962241f58800fb2 (#13051) (#13055) Co-authored-by: cocos-robot --- native/cocos/core/builtin/DebugInfos.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/native/cocos/core/builtin/DebugInfos.cpp b/native/cocos/core/builtin/DebugInfos.cpp index 70c59ef0401..10c1c7edeb3 100644 --- a/native/cocos/core/builtin/DebugInfos.cpp +++ b/native/cocos/core/builtin/DebugInfos.cpp @@ -450,6 +450,7 @@ ccstd::unordered_map debugInfos = { { 15002, "Diffuse map resource is missing, please change environment lighting type to regenerate resource" }, { 15003, "The shadow visible distance is so small that CSM stratification is not effective, Please change the value of shadowDistance so that it is 10 times greater than 0.1" }, { 15004, "The native folder may be generated from older versions, please refer https://docs.cocos.com/creator/manual/en/release-notes/ to upgrade." }, +{ 15100, "Camera '%s' clear flag is skybox, but skybox is disabled, may cause strange background effect, please set camera clear flag to solid color." }, { 16000, "'%s' is deprecated since v%s." }, { 16001, "'%s' is deprecated since v%s, please use '%s' instead." }, { 16002, "'%s' is removed since v%s." }, From 3232007e9f9441e78b721f09481d4c33f535e1dd Mon Sep 17 00:00:00 2001 From: Yiwen <15225434259xue@gmail.com> Date: Mon, 17 Oct 2022 10:41:25 +0800 Subject: [PATCH 022/829] Adapt ES/WEBGL to support 3d texture/2d array texture. (#12938) --- cocos/gfx/base/define.ts | 4 + cocos/gfx/webgl/webgl-device.ts | 3 +- cocos/gfx/webgl2/webgl2-commands.ts | 134 +++++++++++++++ cocos/gfx/webgl2/webgl2-device.ts | 2 + .../cocos/renderer/gfx-base/GFXDef-common.h | 2 + .../renderer/gfx-gles2/GLES2Commands.cpp | 156 ++++++++++++++++++ .../cocos/renderer/gfx-gles2/GLES2Device.cpp | 8 + .../renderer/gfx-gles3/GLES3Commands.cpp | 32 ++++ .../cocos/renderer/gfx-gles3/GLES3Device.cpp | 2 + .../gfx-validator/TextureValidator.cpp | 32 ++++ native/cocos/renderer/gfx-vulkan/VKDevice.cpp | 2 + native/cocos/renderer/gfx-vulkan/VKUtils.cpp | 1 - 12 files changed, 376 insertions(+), 2 deletions(-) diff --git a/cocos/gfx/base/define.ts b/cocos/gfx/base/define.ts index 748b77c137b..b14c4829ff7 100644 --- a/cocos/gfx/base/define.ts +++ b/cocos/gfx/base/define.ts @@ -736,6 +736,8 @@ export class DeviceCaps { public maxUniformBlockSize: number = 0, public maxTextureSize: number = 0, public maxCubeMapTextureSize: number = 0, + public maxArrayTextureLayers: number = 0, + public max3DTextureSize: number = 0, public uboOffsetAlignment: number = 1, public maxComputeSharedMemorySize: number = 0, public maxComputeWorkGroupInvocations: number = 0, @@ -761,6 +763,8 @@ export class DeviceCaps { this.maxUniformBlockSize = info.maxUniformBlockSize; this.maxTextureSize = info.maxTextureSize; this.maxCubeMapTextureSize = info.maxCubeMapTextureSize; + this.maxArrayTextureLayers = info.maxArrayTextureLayers; + this.max3DTextureSize = info.max3DTextureSize; this.uboOffsetAlignment = info.uboOffsetAlignment; this.maxComputeSharedMemorySize = info.maxComputeSharedMemorySize; this.maxComputeWorkGroupInvocations = info.maxComputeWorkGroupInvocations; diff --git a/cocos/gfx/webgl/webgl-device.ts b/cocos/gfx/webgl/webgl-device.ts index 30441222472..96026b88b2d 100644 --- a/cocos/gfx/webgl/webgl-device.ts +++ b/cocos/gfx/webgl/webgl-device.ts @@ -148,7 +148,8 @@ export class WebGLDevice extends Device { this._caps.maxVertexTextureUnits = gl.getParameter(gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS); this._caps.maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE); this._caps.maxCubeMapTextureSize = gl.getParameter(gl.MAX_CUBE_MAP_TEXTURE_SIZE); - + this._caps.maxArrayTextureLayers = 0; + this._caps.max3DTextureSize = 0; // WebGL doesn't support UBOs at all, so here we return // the guaranteed minimum number of available bindings in WebGL2 this._caps.maxUniformBufferBindings = 16; diff --git a/cocos/gfx/webgl2/webgl2-commands.ts b/cocos/gfx/webgl2/webgl2-commands.ts index fd674ee236d..e677f3c7b5a 100644 --- a/cocos/gfx/webgl2/webgl2-commands.ts +++ b/cocos/gfx/webgl2/webgl2-commands.ts @@ -1034,6 +1034,8 @@ export function WebGL2CmdFuncCreateTexture (device: WebGL2Device, gpuTexture: IW let w = gpuTexture.width; let h = gpuTexture.height; + const d = gpuTexture.depth; + const l = gpuTexture.arrayLayer; switch (gpuTexture.type) { case TextureType.TEX2D: { @@ -1081,6 +1083,71 @@ export function WebGL2CmdFuncCreateTexture (device: WebGL2Device, gpuTexture: IW } break; } + case TextureType.TEX2D_ARRAY: { + gpuTexture.glTarget = gl.TEXTURE_2D_ARRAY; + + const maxSize = Math.max(w, h); + if (maxSize > device.capabilities.maxTextureSize) { + errorID(9100, maxSize, device.capabilities.maxTextureSize); + } + if (l > device.capabilities.maxArrayTextureLayers) { + errorID(9100, l, device.capabilities.maxArrayTextureLayers); + } + + gpuTexture.glTexture = gl.createTexture(); + if (gpuTexture.size > 0) { + const glTexUnit = device.stateCache.glTexUnits[device.stateCache.texUnit]; + + if (glTexUnit.glTexture !== gpuTexture.glTexture) { + gl.bindTexture(gl.TEXTURE_2D_ARRAY, gpuTexture.glTexture); + glTexUnit.glTexture = gpuTexture.glTexture; + } + + if (FormatInfos[gpuTexture.format].isCompressed) { + for (let i = 0; i < gpuTexture.mipLevel; ++i) { + const imgSize = FormatSize(gpuTexture.format, w, h, l); + const view: Uint8Array = new Uint8Array(imgSize); + gl.compressedTexImage3D(gl.TEXTURE_2D_ARRAY, i, gpuTexture.glInternalFmt, w, h, l, 0, view); + w = Math.max(1, w >> 1); + h = Math.max(1, h >> 1); + } + } else { + gl.texStorage3D(gl.TEXTURE_2D_ARRAY, gpuTexture.mipLevel, gpuTexture.glInternalFmt, w, h, l); + } + } + break; + } + case TextureType.TEX3D: { + gpuTexture.glTarget = gl.TEXTURE_3D; + + const maxSize = Math.max(Math.max(w, h), d); + if (maxSize > device.capabilities.max3DTextureSize) { + errorID(9100, maxSize, device.capabilities.max3DTextureSize); + } + + gpuTexture.glTexture = gl.createTexture(); + if (gpuTexture.size > 0) { + const glTexUnit = device.stateCache.glTexUnits[device.stateCache.texUnit]; + + if (glTexUnit.glTexture !== gpuTexture.glTexture) { + gl.bindTexture(gl.TEXTURE_3D, gpuTexture.glTexture); + glTexUnit.glTexture = gpuTexture.glTexture; + } + + if (FormatInfos[gpuTexture.format].isCompressed) { + for (let i = 0; i < gpuTexture.mipLevel; ++i) { + const imgSize = FormatSize(gpuTexture.format, w, h, d); + const view: Uint8Array = new Uint8Array(imgSize); + gl.compressedTexImage3D(gl.TEXTURE_3D, i, gpuTexture.glInternalFmt, w, h, d, 0, view); + w = Math.max(1, w >> 1); + h = Math.max(1, h >> 1); + } + } else { + gl.texStorage3D(gl.TEXTURE_3D, gpuTexture.mipLevel, gpuTexture.glInternalFmt, w, h, d); + } + } + break; + } case TextureType.CUBE: { gpuTexture.glTarget = gl.TEXTURE_CUBE_MAP; @@ -1158,6 +1225,8 @@ export function WebGL2CmdFuncResizeTexture (device: WebGL2Device, gpuTexture: IW let w = gpuTexture.width; let h = gpuTexture.height; + const d = gpuTexture.depth; + const l = gpuTexture.arrayLayer; switch (gpuTexture.type) { case TextureType.TEX2D: { @@ -1200,6 +1269,71 @@ export function WebGL2CmdFuncResizeTexture (device: WebGL2Device, gpuTexture: IW } break; } + case TextureType.TEX2D_ARRAY: { + gpuTexture.glTarget = gl.TEXTURE_2D_ARRAY; + + const maxSize = Math.max(w, h); + if (maxSize > device.capabilities.maxTextureSize) { + errorID(9100, maxSize, device.capabilities.maxTextureSize); + } + if (l > device.capabilities.maxArrayTextureLayers) { + errorID(9100, l, device.capabilities.maxArrayTextureLayers); + } + + gpuTexture.glTexture = gl.createTexture(); + if (gpuTexture.size > 0) { + const glTexUnit = device.stateCache.glTexUnits[device.stateCache.texUnit]; + + if (glTexUnit.glTexture !== gpuTexture.glTexture) { + gl.bindTexture(gl.TEXTURE_2D_ARRAY, gpuTexture.glTexture); + glTexUnit.glTexture = gpuTexture.glTexture; + } + + if (FormatInfos[gpuTexture.format].isCompressed) { + for (let i = 0; i < gpuTexture.mipLevel; ++i) { + const imgSize = FormatSize(gpuTexture.format, w, h, l); + const view: Uint8Array = new Uint8Array(imgSize); + gl.compressedTexImage3D(gl.TEXTURE_2D_ARRAY, i, gpuTexture.glInternalFmt, w, h, l, 0, view); + w = Math.max(1, w >> 1); + h = Math.max(1, h >> 1); + } + } else { + gl.texStorage3D(gl.TEXTURE_2D_ARRAY, gpuTexture.mipLevel, gpuTexture.glInternalFmt, w, h, l); + } + } + break; + } + case TextureType.TEX3D: { + gpuTexture.glTarget = gl.TEXTURE_3D; + + const maxSize = Math.max(Math.max(w, h), d); + if (maxSize > device.capabilities.max3DTextureSize) { + errorID(9100, maxSize, device.capabilities.max3DTextureSize); + } + + gpuTexture.glTexture = gl.createTexture(); + if (gpuTexture.size > 0) { + const glTexUnit = device.stateCache.glTexUnits[device.stateCache.texUnit]; + + if (glTexUnit.glTexture !== gpuTexture.glTexture) { + gl.bindTexture(gl.TEXTURE_3D, gpuTexture.glTexture); + glTexUnit.glTexture = gpuTexture.glTexture; + } + + if (FormatInfos[gpuTexture.format].isCompressed) { + for (let i = 0; i < gpuTexture.mipLevel; ++i) { + const imgSize = FormatSize(gpuTexture.format, w, h, d); + const view: Uint8Array = new Uint8Array(imgSize); + gl.compressedTexImage3D(gl.TEXTURE_3D, i, gpuTexture.glInternalFmt, w, h, d, 0, view); + w = Math.max(1, w >> 1); + h = Math.max(1, h >> 1); + } + } else { + gl.texStorage3D(gl.TEXTURE_3D, gpuTexture.mipLevel, gpuTexture.glInternalFmt, w, h, d); + } + } + break; + } case TextureType.CUBE: { gpuTexture.type = TextureType.CUBE; gpuTexture.glTarget = gl.TEXTURE_CUBE_MAP; diff --git a/cocos/gfx/webgl2/webgl2-device.ts b/cocos/gfx/webgl2/webgl2-device.ts index b0ec975a70c..a9d20b4bcdb 100644 --- a/cocos/gfx/webgl2/webgl2-device.ts +++ b/cocos/gfx/webgl2/webgl2-device.ts @@ -150,6 +150,8 @@ export class WebGL2Device extends Device { this._caps.maxUniformBlockSize = gl.getParameter(gl.MAX_UNIFORM_BLOCK_SIZE); this._caps.maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE); this._caps.maxCubeMapTextureSize = gl.getParameter(gl.MAX_CUBE_MAP_TEXTURE_SIZE); + this._caps.maxArrayTextureLayers = gl.getParameter(gl.MAX_ARRAY_TEXTURE_LAYERS); + this._caps.max3DTextureSize = gl.getParameter(gl.MAX_3D_TEXTURE_SIZE); this._caps.uboOffsetAlignment = gl.getParameter(gl.UNIFORM_BUFFER_OFFSET_ALIGNMENT); const extensions = gl.getSupportedExtensions(); diff --git a/native/cocos/renderer/gfx-base/GFXDef-common.h b/native/cocos/renderer/gfx-base/GFXDef-common.h index e4a3b74be81..9f42da4be16 100644 --- a/native/cocos/renderer/gfx-base/GFXDef-common.h +++ b/native/cocos/renderer/gfx-base/GFXDef-common.h @@ -834,6 +834,8 @@ struct DeviceCaps { uint32_t maxUniformBlockSize{0}; uint32_t maxTextureSize{0}; uint32_t maxCubeMapTextureSize{0}; + uint32_t maxArrayTextureLayers{0}; + uint32_t max3DTextureSize{0}; uint32_t uboOffsetAlignment{1}; uint32_t maxComputeSharedMemorySize{0}; diff --git a/native/cocos/renderer/gfx-gles2/GLES2Commands.cpp b/native/cocos/renderer/gfx-gles2/GLES2Commands.cpp index dd0ab9b306b..2b5f621b698 100644 --- a/native/cocos/renderer/gfx-gles2/GLES2Commands.cpp +++ b/native/cocos/renderer/gfx-gles2/GLES2Commands.cpp @@ -660,6 +660,86 @@ void cmdFuncGLES2CreateTexture(GLES2Device *device, GLES2GPUTexture *gpuTexture) } break; } + case TextureType::TEX2D_ARRAY: { + gpuTexture->glTarget = GL_TEXTURE_3D; + CC_ASSERT((std::max(std::max(gpuTexture->width, gpuTexture->height), gpuTexture->arrayLayer) <= device->getCapabilities().max3DTextureSize) + && "cmdFuncGLES2CreateTexture: texture2DArray's dimension is too large"); + GL_CHECK(glGenTextures(1, &gpuTexture->glTexture)); + if (gpuTexture->size > 0) { + GLuint &glTexture = device->stateCache()->glTextures[device->stateCache()->texUint]; + if (gpuTexture->glTexture != glTexture) { + GL_CHECK(glBindTexture(GL_TEXTURE_3D, gpuTexture->glTexture)); + glTexture = gpuTexture->glTexture; + } + if (!GFX_FORMAT_INFOS[static_cast(gpuTexture->format)].isCompressed) { + uint32_t w = gpuTexture->width; + uint32_t h = gpuTexture->height; + uint32_t d = gpuTexture->arrayLayer; + for (uint32_t i = 0; i < gpuTexture->mipLevel; ++i) { + GL_CHECK(glTexImage3DOES(GL_TEXTURE_3D, i, + gpuTexture->glInternalFmt, + w, h, d, 0, + gpuTexture->glFormat, gpuTexture->glType, + nullptr)); + w = std::max(1U, w >> 1); + h = std::max(1U, h >> 1); + } + } else { + uint32_t w = gpuTexture->width; + uint32_t h = gpuTexture->height; + uint32_t d = gpuTexture->arrayLayer; + for (uint32_t i = 0; i < gpuTexture->mipLevel; ++i) { + uint32_t imgSize = formatSize(gpuTexture->format, w, h, d); + GL_CHECK(glCompressedTexImage3DOES(GL_TEXTURE_3D, i, + gpuTexture->glInternalFmt, + w, h, d, 0, imgSize, + nullptr)); + w = std::max(1U, w >> 1); + h = std::max(1U, h >> 1); + } + } + } + break; + } + case TextureType::TEX3D: { + gpuTexture->glTarget = GL_TEXTURE_3D; + GL_CHECK(glGenTextures(1, &gpuTexture->glTexture)); + if (gpuTexture->size > 0) { + GLuint &glTexture = device->stateCache()->glTextures[device->stateCache()->texUint]; + if (gpuTexture->glTexture != glTexture) { + GL_CHECK(glBindTexture(GL_TEXTURE_3D, gpuTexture->glTexture)); + glTexture = gpuTexture->glTexture; + } + if (!GFX_FORMAT_INFOS[static_cast(gpuTexture->format)].isCompressed) { + uint32_t w = gpuTexture->width; + uint32_t h = gpuTexture->height; + uint32_t d = gpuTexture->depth; + for (uint32_t i = 0; i < gpuTexture->mipLevel; ++i) { + GL_CHECK(glTexImage3DOES(GL_TEXTURE_3D, i, + gpuTexture->glInternalFmt, + w, h, d, 0, + gpuTexture->glFormat, gpuTexture->glType, + nullptr)); + w = std::max(1U, w >> 1); + h = std::max(1U, h >> 1); + } + } else { + uint32_t w = gpuTexture->width; + uint32_t h = gpuTexture->height; + uint32_t d = gpuTexture->depth; + for (uint32_t i = 0; i < gpuTexture->mipLevel; ++i) { + uint32_t imgSize = formatSize(gpuTexture->format, w, h, d); + GL_CHECK(glCompressedTexImage3DOES(GL_TEXTURE_3D, i, + gpuTexture->glInternalFmt, + w, h, d, 0, imgSize, + nullptr)); + w = std::max(1U, w >> 1); + h = std::max(1U, h >> 1); + } + } + } + break; + } case TextureType::CUBE: { gpuTexture->glTarget = GL_TEXTURE_CUBE_MAP; GL_CHECK(glGenTextures(1, &gpuTexture->glTexture)); @@ -763,6 +843,82 @@ void cmdFuncGLES2ResizeTexture(GLES2Device *device, GLES2GPUTexture *gpuTexture) } break; } + case TextureType::TEX2D_ARRAY: { + gpuTexture->glTarget = GL_TEXTURE_2D_ARRAY; + if (gpuTexture->size > 0) { + GLuint &glTexture = device->stateCache()->glTextures[device->stateCache()->texUint]; + if (gpuTexture->glTexture != glTexture) { + GL_CHECK(glBindTexture(GL_TEXTURE_3D, gpuTexture->glTexture)); + glTexture = gpuTexture->glTexture; + } + if (!GFX_FORMAT_INFOS[static_cast(gpuTexture->format)].isCompressed) { + uint32_t w = gpuTexture->width; + uint32_t h = gpuTexture->height; + uint32_t d = gpuTexture->arrayLayer; + for (uint32_t i = 0; i < gpuTexture->mipLevel; ++i) { + GL_CHECK(glTexImage3DOES(GL_TEXTURE_3D, i, + gpuTexture->glInternalFmt, + w, h, d, 0, + gpuTexture->glFormat, gpuTexture->glType, + nullptr)); + w = std::max(1U, w >> 1); + h = std::max(1U, h >> 1); + } + } else { + uint32_t w = gpuTexture->width; + uint32_t h = gpuTexture->height; + uint32_t d = gpuTexture->arrayLayer; + for (uint32_t i = 0; i < gpuTexture->mipLevel; ++i) { + uint32_t imgSize = formatSize(gpuTexture->format, w, h, d); + GL_CHECK(glCompressedTexImage3DOES(GL_TEXTURE_3D, i, + gpuTexture->glInternalFmt, + w, h, d, 0, imgSize, + nullptr)); + w = std::max(1U, w >> 1); + h = std::max(1U, h >> 1); + } + } + } + break; + } + case TextureType::TEX3D: { + gpuTexture->glTarget = GL_TEXTURE_3D; + if (gpuTexture->size > 0) { + GLuint &glTexture = device->stateCache()->glTextures[device->stateCache()->texUint]; + if (gpuTexture->glTexture != glTexture) { + GL_CHECK(glBindTexture(GL_TEXTURE_3D, gpuTexture->glTexture)); + glTexture = gpuTexture->glTexture; + } + if (!GFX_FORMAT_INFOS[static_cast(gpuTexture->format)].isCompressed) { + uint32_t w = gpuTexture->width; + uint32_t h = gpuTexture->height; + uint32_t d = gpuTexture->depth; + for (uint32_t i = 0; i < gpuTexture->mipLevel; ++i) { + GL_CHECK(glTexImage3DOES(GL_TEXTURE_3D, i, + gpuTexture->glInternalFmt, + w, h, d, 0, + gpuTexture->glFormat, gpuTexture->glType, + nullptr)); + w = std::max(1U, w >> 1); + h = std::max(1U, h >> 1); + } + } else { + uint32_t w = gpuTexture->width; + uint32_t h = gpuTexture->height; + uint32_t d = gpuTexture->depth; + for (uint32_t i = 0; i < gpuTexture->mipLevel; ++i) { + uint32_t imgSize = formatSize(gpuTexture->format, w, h, d); + GL_CHECK(glCompressedTexImage3DOES(GL_TEXTURE_3D, i, + gpuTexture->glInternalFmt, + w, h, d, 0, imgSize, + nullptr)); + w = std::max(1U, w >> 1); + h = std::max(1U, h >> 1); + } + } + } + break; + } case TextureType::CUBE: { gpuTexture->glTarget = GL_TEXTURE_CUBE_MAP; if (gpuTexture->size > 0) { diff --git a/native/cocos/renderer/gfx-gles2/GLES2Device.cpp b/native/cocos/renderer/gfx-gles2/GLES2Device.cpp index 086d008d2f9..d3d2701d5f6 100644 --- a/native/cocos/renderer/gfx-gles2/GLES2Device.cpp +++ b/native/cocos/renderer/gfx-gles2/GLES2Device.cpp @@ -188,6 +188,14 @@ bool GLES2Device::doInit(const DeviceInfo & /*info*/) { glGetIntegerv(GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS, reinterpret_cast(&_caps.maxVertexTextureUnits)); glGetIntegerv(GL_MAX_TEXTURE_SIZE, reinterpret_cast(&_caps.maxTextureSize)); glGetIntegerv(GL_MAX_CUBE_MAP_TEXTURE_SIZE, reinterpret_cast(&_caps.maxCubeMapTextureSize)); + if (checkExtension("GL_OES_texture_3D")) { + glGetIntegerv(GL_MAX_3D_TEXTURE_SIZE_OES, reinterpret_cast(&_caps.max3DTextureSize)); + // texture2DArray fallback to texture3DOES + _caps.maxArrayTextureLayers = _caps.max3DTextureSize; + } else { + _caps.max3DTextureSize = 0; + _caps.maxArrayTextureLayers = 0; + } QueueInfo queueInfo; queueInfo.type = QueueType::GRAPHICS; diff --git a/native/cocos/renderer/gfx-gles3/GLES3Commands.cpp b/native/cocos/renderer/gfx-gles3/GLES3Commands.cpp index bd7f09c5ed4..3d3ea6f9ca4 100644 --- a/native/cocos/renderer/gfx-gles3/GLES3Commands.cpp +++ b/native/cocos/renderer/gfx-gles3/GLES3Commands.cpp @@ -873,6 +873,38 @@ void cmdFuncGLES3CreateTexture(GLES3Device *device, GLES3GPUTexture *gpuTexture) } break; } + case TextureType::TEX2D_ARRAY: { + gpuTexture->glTarget = GL_TEXTURE_2D_ARRAY; + GL_CHECK(glGenTextures(1, &gpuTexture->glTexture)); + if (gpuTexture->size > 0) { + GLuint &glTexture = device->stateCache()->glTextures[device->stateCache()->texUint]; + if (gpuTexture->glTexture != glTexture) { + GL_CHECK(glBindTexture(GL_TEXTURE_2D_ARRAY, gpuTexture->glTexture)); + glTexture = gpuTexture->glTexture; + } + uint32_t w = gpuTexture->width; + uint32_t h = gpuTexture->height; + uint32_t d = gpuTexture->arrayLayer; + GL_CHECK(glTexStorage3D(GL_TEXTURE_2D_ARRAY, gpuTexture->mipLevel, gpuTexture->glInternalFmt, w, h, d)); + } + break; + } + case TextureType::TEX3D: { + gpuTexture->glTarget = GL_TEXTURE_3D; + GL_CHECK(glGenTextures(1, &gpuTexture->glTexture)); + if (gpuTexture->size > 0) { + GLuint &glTexture = device->stateCache()->glTextures[device->stateCache()->texUint]; + if (gpuTexture->glTexture != glTexture) { + GL_CHECK(glBindTexture(GL_TEXTURE_3D, gpuTexture->glTexture)); + glTexture = gpuTexture->glTexture; + } + uint32_t w = gpuTexture->width; + uint32_t h = gpuTexture->height; + uint32_t d = gpuTexture->depth; + GL_CHECK(glTexStorage3D(GL_TEXTURE_3D, gpuTexture->mipLevel, gpuTexture->glInternalFmt, w, h, d)); + } + break; + } case TextureType::CUBE: { gpuTexture->glTarget = GL_TEXTURE_CUBE_MAP; GL_CHECK(glGenTextures(1, &gpuTexture->glTexture)); diff --git a/native/cocos/renderer/gfx-gles3/GLES3Device.cpp b/native/cocos/renderer/gfx-gles3/GLES3Device.cpp index be103efe51c..87a11495b87 100644 --- a/native/cocos/renderer/gfx-gles3/GLES3Device.cpp +++ b/native/cocos/renderer/gfx-gles3/GLES3Device.cpp @@ -188,6 +188,8 @@ bool GLES3Device::doInit(const DeviceInfo & /*info*/) { glGetIntegerv(GL_MAX_TEXTURE_SIZE, reinterpret_cast(&_caps.maxTextureSize)); glGetIntegerv(GL_MAX_CUBE_MAP_TEXTURE_SIZE, reinterpret_cast(&_caps.maxCubeMapTextureSize)); glGetIntegerv(GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT, reinterpret_cast(&_caps.uboOffsetAlignment)); + glGetIntegerv(GL_MAX_ARRAY_TEXTURE_LAYERS, reinterpret_cast(&_caps.maxArrayTextureLayers)); + glGetIntegerv(GL_MAX_3D_TEXTURE_SIZE, reinterpret_cast(&_caps.max3DTextureSize)); if (_gpuConstantRegistry->glMinorVersion) { glGetIntegerv(GL_MAX_IMAGE_UNITS, reinterpret_cast(&_caps.maxImageUnits)); diff --git a/native/cocos/renderer/gfx-validator/TextureValidator.cpp b/native/cocos/renderer/gfx-validator/TextureValidator.cpp index 727cd98e479..d5893846909 100644 --- a/native/cocos/renderer/gfx-validator/TextureValidator.cpp +++ b/native/cocos/renderer/gfx-validator/TextureValidator.cpp @@ -67,6 +67,38 @@ void TextureValidator::doInit(const TextureInfo &info) { CC_ASSERT(hasAllFlags(DeviceValidator::getInstance()->getFormatFeatures(info.format), ff)); } + switch (info.type) { + case TextureType::TEX2D: { + if (std::max(info.width, info.height) > DeviceValidator::getInstance()->getCapabilities().maxTextureSize) { + CC_ASSERT(false); + } + break; + } + case TextureType::TEX2D_ARRAY: { + if (std::max(info.width, info.height) > DeviceValidator::getInstance()->getCapabilities().maxTextureSize + || info.layerCount > DeviceValidator::getInstance()->getCapabilities().maxArrayTextureLayers) { + CC_ASSERT(false); + } + break; + } + case TextureType::CUBE: { + if (std::max(info.width, info.height) > DeviceValidator::getInstance()->getCapabilities().maxCubeMapTextureSize || info.layerCount != 6) { + CC_ASSERT(false); + } + break; + } + case TextureType::TEX3D: { + if (std::max(std::max(info.width, info.height), info.depth) > DeviceValidator::getInstance()->getCapabilities().maxCubeMapTextureSize) { + CC_ASSERT(false); + } + break; + } + default: { + CC_ASSERT(false); + break; + } + } + if (hasFlag(info.flags, TextureFlagBit::GEN_MIPMAP)) { CC_ASSERT(info.levelCount > 1); diff --git a/native/cocos/renderer/gfx-vulkan/VKDevice.cpp b/native/cocos/renderer/gfx-vulkan/VKDevice.cpp index de7fc44690a..34993bf0aa5 100644 --- a/native/cocos/renderer/gfx-vulkan/VKDevice.cpp +++ b/native/cocos/renderer/gfx-vulkan/VKDevice.cpp @@ -313,6 +313,8 @@ bool CCVKDevice::doInit(const DeviceInfo & /*info*/) { _caps.maxVertexTextureUnits = limits.maxPerStageDescriptorSampledImages; _caps.maxTextureSize = limits.maxImageDimension2D; _caps.maxCubeMapTextureSize = limits.maxImageDimensionCube; + _caps.maxArrayTextureLayers = limits.maxImageArrayLayers; + _caps.max3DTextureSize = limits.maxImageDimension3D; _caps.uboOffsetAlignment = utils::toUint(limits.minUniformBufferOffsetAlignment); // compute shaders _caps.maxComputeSharedMemorySize = limits.maxComputeSharedMemorySize; diff --git a/native/cocos/renderer/gfx-vulkan/VKUtils.cpp b/native/cocos/renderer/gfx-vulkan/VKUtils.cpp index 7407e115420..3f46ff4ecde 100644 --- a/native/cocos/renderer/gfx-vulkan/VKUtils.cpp +++ b/native/cocos/renderer/gfx-vulkan/VKUtils.cpp @@ -254,7 +254,6 @@ VkImageCreateFlags mapVkImageCreateFlags(TextureType type) { uint32_t res = 0U; switch (type) { case TextureType::CUBE: res |= VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT; break; - case TextureType::TEX2D_ARRAY: res |= VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT; break; default: break; } return static_cast(res); From 16f4992837a015061b750164eb4e8316dcebb7a7 Mon Sep 17 00:00:00 2001 From: fqamic Date: Mon, 17 Oct 2022 10:42:34 +0800 Subject: [PATCH 023/829] improve: revert xr environment constant (#13058) --- cc.config.json | 12 ------------ scripts/build-engine/src/constant-manager.ts | 2 +- scripts/build-engine/src/index.ts | 2 +- 3 files changed, 2 insertions(+), 14 deletions(-) diff --git a/cc.config.json b/cc.config.json index 55852cf3b4a..f5363b2b62f 100644 --- a/cc.config.json +++ b/cc.config.json @@ -524,18 +524,6 @@ "type": "boolean", "value": false, "internal": true - }, - "XR_ENV": { - "comment": "Running in environment where using XR.\n- 0 CLOSE\n- 1 XR\n- 2 WEB_XR", - "type": "number", - "value": 0, - "internal": false - }, - "XR_TYPE": { - "comment": "Different types in the XR environment.\n- 0 OFF\n- 1 VR\n- 2 AR", - "type": "number", - "value": 0, - "internal": false } } } diff --git a/scripts/build-engine/src/constant-manager.ts b/scripts/build-engine/src/constant-manager.ts index f113044873e..bdfcf53f21c 100644 --- a/scripts/build-engine/src/constant-manager.ts +++ b/scripts/build-engine/src/constant-manager.ts @@ -7,7 +7,7 @@ export type PlatformType = 'HTML5' | 'NATIVE' | 'WECHAT' | 'BAIDU' | 'XIAOMI' | 'ALIPAY' | 'BYTEDANCE' | 'OPPO' | 'VIVO' | 'HUAWEI' | 'COCOSPLAY' | 'QTT' | 'LINKSURE'; export type InternalFlagType = 'SERVER_MODE' | 'NOT_PACK_PHYSX_LIBS' | 'WEBGPU'; -export type PublicFlagType = 'DEBUG' | 'NET_MODE' | 'XR_ENV' | 'XR_TYPE'; +export type PublicFlagType = 'DEBUG' | 'NET_MODE'; export type FlagType = InternalFlagType | PublicFlagType; export type ValueType = number | boolean; diff --git a/scripts/build-engine/src/index.ts b/scripts/build-engine/src/index.ts index 3de015217a2..e03386708eb 100644 --- a/scripts/build-engine/src/index.ts +++ b/scripts/build-engine/src/index.ts @@ -276,7 +276,7 @@ async function doBuild ({ // HACK: get platform, mode, flags from build time constants const flags: Record = {}; - ['SERVER_MODE', 'NOT_PACK_PHYSX_LIBS', 'DEBUG', 'NET_MODE', 'WEBGPU', 'XR_ENV', 'XR_TYPE'].forEach((key) => { + ['SERVER_MODE', 'NOT_PACK_PHYSX_LIBS', 'DEBUG', 'NET_MODE', 'WEBGPU'].forEach((key) => { flags[key] = buildTimeConstants[key]; }); // Wether use webgpu From 5bb8735c5261640d127f04275f2c215709f31e99 Mon Sep 17 00:00:00 2001 From: Yiwen <15225434259xue@gmail.com> Date: Mon, 17 Oct 2022 10:48:02 +0800 Subject: [PATCH 024/829] correct the texture memory statistcis (#12989) --- cocos/gfx/webgl/webgl-commands.ts | 1 - cocos/gfx/webgl/webgl-texture.ts | 19 +++++++++++-------- cocos/gfx/webgl2/webgl2-commands.ts | 1 - cocos/gfx/webgl2/webgl2-texture.ts | 15 +++++++++------ 4 files changed, 20 insertions(+), 16 deletions(-) diff --git a/cocos/gfx/webgl/webgl-commands.ts b/cocos/gfx/webgl/webgl-commands.ts index f28c87ed44d..1a12b88af48 100644 --- a/cocos/gfx/webgl/webgl-commands.ts +++ b/cocos/gfx/webgl/webgl-commands.ts @@ -819,7 +819,6 @@ export function WebGLCmdFuncCreateTexture (device: WebGLDevice, gpuTexture: IWeb switch (gpuTexture.type) { case TextureType.TEX2D: { gpuTexture.glTarget = gl.TEXTURE_2D; - if (gpuTexture.isSwapchainTexture) break; const maxSize = Math.max(w, h); if (maxSize > device.capabilities.maxTextureSize) { diff --git a/cocos/gfx/webgl/webgl-texture.ts b/cocos/gfx/webgl/webgl-texture.ts index db07e3e722f..885337b26c3 100644 --- a/cocos/gfx/webgl/webgl-texture.ts +++ b/cocos/gfx/webgl/webgl-texture.ts @@ -31,10 +31,10 @@ import { IWebGLGPUTexture } from './webgl-gpu-objects'; export class WebGLTexture extends Texture { get gpuTexture (): IWebGLGPUTexture { - return this._gpuTexture!; + return this._gpuTexture!; } - get lodLevel () :number { + get lodLevel (): number { return this._lodLevel; } @@ -86,9 +86,10 @@ export class WebGLTexture extends Texture { isSwapchainTexture: isSwapchainTexture || false, }; - WebGLCmdFuncCreateTexture(WebGLDeviceManager.instance, this._gpuTexture); - - WebGLDeviceManager.instance.memoryStatus.textureSize += this._size; + if (!this._gpuTexture.isSwapchainTexture) { + WebGLCmdFuncCreateTexture(WebGLDeviceManager.instance, this._gpuTexture); + WebGLDeviceManager.instance.memoryStatus.textureSize += this._size; + } this._viewInfo.texture = this; this._viewInfo.type = info.type; @@ -134,9 +135,11 @@ export class WebGLTexture extends Texture { this._gpuTexture.width = width; this._gpuTexture.height = height; this._gpuTexture.size = this._size; - WebGLCmdFuncResizeTexture(WebGLDeviceManager.instance, this._gpuTexture); - WebGLDeviceManager.instance.memoryStatus.textureSize -= oldSize; - WebGLDeviceManager.instance.memoryStatus.textureSize += this._size; + if (!this._gpuTexture.isSwapchainTexture) { + WebGLCmdFuncResizeTexture(WebGLDeviceManager.instance, this._gpuTexture); + WebGLDeviceManager.instance.memoryStatus.textureSize -= oldSize; + WebGLDeviceManager.instance.memoryStatus.textureSize += this._size; + } } } diff --git a/cocos/gfx/webgl2/webgl2-commands.ts b/cocos/gfx/webgl2/webgl2-commands.ts index e677f3c7b5a..7c4e99313bf 100644 --- a/cocos/gfx/webgl2/webgl2-commands.ts +++ b/cocos/gfx/webgl2/webgl2-commands.ts @@ -1040,7 +1040,6 @@ export function WebGL2CmdFuncCreateTexture (device: WebGL2Device, gpuTexture: IW switch (gpuTexture.type) { case TextureType.TEX2D: { gpuTexture.glTarget = gl.TEXTURE_2D; - if (gpuTexture.isSwapchainTexture) break; const maxSize = Math.max(w, h); if (maxSize > device.capabilities.maxTextureSize) { diff --git a/cocos/gfx/webgl2/webgl2-texture.ts b/cocos/gfx/webgl2/webgl2-texture.ts index a643d5e8b38..97180b03939 100644 --- a/cocos/gfx/webgl2/webgl2-texture.ts +++ b/cocos/gfx/webgl2/webgl2-texture.ts @@ -89,9 +89,10 @@ export class WebGL2Texture extends Texture { isSwapchainTexture: isSwapchainTexture || false, }; - WebGL2CmdFuncCreateTexture(WebGL2DeviceManager.instance, this._gpuTexture); - - WebGL2DeviceManager.instance.memoryStatus.textureSize += this._size; + if (!this._gpuTexture.isSwapchainTexture && this._gpuTexture) { + WebGL2CmdFuncCreateTexture(WebGL2DeviceManager.instance, this._gpuTexture); + WebGL2DeviceManager.instance.memoryStatus.textureSize += this._size; + } this._viewInfo.texture = this; this._viewInfo.type = info.type; @@ -156,9 +157,11 @@ export class WebGL2Texture extends Texture { this._gpuTexture.width = width; this._gpuTexture.height = height; this._gpuTexture.size = this._size; - WebGL2CmdFuncResizeTexture(WebGL2DeviceManager.instance, this._gpuTexture); - WebGL2DeviceManager.instance.memoryStatus.textureSize -= oldSize; - WebGL2DeviceManager.instance.memoryStatus.textureSize += this._size; + if (!this._gpuTexture.isSwapchainTexture) { + WebGL2CmdFuncResizeTexture(WebGL2DeviceManager.instance, this._gpuTexture); + WebGL2DeviceManager.instance.memoryStatus.textureSize -= oldSize; + WebGL2DeviceManager.instance.memoryStatus.textureSize += this._size; + } } } From eeece021346a1c10a92324abc063a79e4d9dfe33 Mon Sep 17 00:00:00 2001 From: Cocos Robot <48829427+cocos-robot@users.noreply.github.com> Date: Mon, 17 Oct 2022 10:50:32 +0800 Subject: [PATCH 025/829] [ci skip][AUTO]: Automated code generating update: 8f0764b4e8ad042f7d42c21b5dbbf59df3ae28c0 (#12938) (#13060) Co-authored-by: cocos-robot --- native/cocos/bindings/auto/jsb_gfx_auto.cpp | 90 +++++++++++++++++++++ 1 file changed, 90 insertions(+) diff --git a/native/cocos/bindings/auto/jsb_gfx_auto.cpp b/native/cocos/bindings/auto/jsb_gfx_auto.cpp index bd17e2d9023..7a04e03f684 100644 --- a/native/cocos/bindings/auto/jsb_gfx_auto.cpp +++ b/native/cocos/bindings/auto/jsb_gfx_auto.cpp @@ -1100,6 +1100,82 @@ static bool js_cc_gfx_DeviceCaps_maxCubeMapTextureSize_get(se::State& s) } SE_BIND_PROP_GET(js_cc_gfx_DeviceCaps_maxCubeMapTextureSize_get) +static bool js_cc_gfx_DeviceCaps_maxArrayTextureLayers_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gfx::DeviceCaps *arg1 = (cc::gfx::DeviceCaps *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg1->maxArrayTextureLayers, s.thisObject()); + SE_PRECONDITION2(ok, false, "DeviceCaps_maxArrayTextureLayers_set,2,SWIGTYPE_uint32_t"); + + + + return true; +} +SE_BIND_PROP_SET(js_cc_gfx_DeviceCaps_maxArrayTextureLayers_set) + +static bool js_cc_gfx_DeviceCaps_maxArrayTextureLayers_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gfx::DeviceCaps *arg1 = (cc::gfx::DeviceCaps *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(arg1->maxArrayTextureLayers, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "DeviceCaps_maxArrayTextureLayers_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(arg1->maxArrayTextureLayers, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_PROP_GET(js_cc_gfx_DeviceCaps_maxArrayTextureLayers_get) + +static bool js_cc_gfx_DeviceCaps_max3DTextureSize_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gfx::DeviceCaps *arg1 = (cc::gfx::DeviceCaps *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg1->max3DTextureSize, s.thisObject()); + SE_PRECONDITION2(ok, false, "DeviceCaps_max3DTextureSize_set,2,SWIGTYPE_uint32_t"); + + + + return true; +} +SE_BIND_PROP_SET(js_cc_gfx_DeviceCaps_max3DTextureSize_set) + +static bool js_cc_gfx_DeviceCaps_max3DTextureSize_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gfx::DeviceCaps *arg1 = (cc::gfx::DeviceCaps *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(arg1->max3DTextureSize, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "DeviceCaps_max3DTextureSize_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(arg1->max3DTextureSize, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_PROP_GET(js_cc_gfx_DeviceCaps_max3DTextureSize_get) + static bool js_cc_gfx_DeviceCaps_uboOffsetAlignment_set(se::State& s) { CC_UNUSED bool ok = true; @@ -1574,6 +1650,18 @@ bool sevalue_to_native(const se::Value &from, cc::gfx::DeviceCaps * to, se::Obje } + json->getProperty("maxArrayTextureLayers", &field, true); + if (!field.isNullOrUndefined()) { + ok &= sevalue_to_native(field, &(to->maxArrayTextureLayers), ctx); + } + + + json->getProperty("max3DTextureSize", &field, true); + if (!field.isNullOrUndefined()) { + ok &= sevalue_to_native(field, &(to->max3DTextureSize), ctx); + } + + json->getProperty("uboOffsetAlignment", &field, true); if (!field.isNullOrUndefined()) { ok &= sevalue_to_native(field, &(to->uboOffsetAlignment), ctx); @@ -1648,6 +1736,8 @@ bool js_register_cc_gfx_DeviceCaps(se::Object* obj) { cls->defineProperty("maxUniformBlockSize", _SE(js_cc_gfx_DeviceCaps_maxUniformBlockSize_get), _SE(js_cc_gfx_DeviceCaps_maxUniformBlockSize_set)); cls->defineProperty("maxTextureSize", _SE(js_cc_gfx_DeviceCaps_maxTextureSize_get), _SE(js_cc_gfx_DeviceCaps_maxTextureSize_set)); cls->defineProperty("maxCubeMapTextureSize", _SE(js_cc_gfx_DeviceCaps_maxCubeMapTextureSize_get), _SE(js_cc_gfx_DeviceCaps_maxCubeMapTextureSize_set)); + cls->defineProperty("maxArrayTextureLayers", _SE(js_cc_gfx_DeviceCaps_maxArrayTextureLayers_get), _SE(js_cc_gfx_DeviceCaps_maxArrayTextureLayers_set)); + cls->defineProperty("max3DTextureSize", _SE(js_cc_gfx_DeviceCaps_max3DTextureSize_get), _SE(js_cc_gfx_DeviceCaps_max3DTextureSize_set)); cls->defineProperty("uboOffsetAlignment", _SE(js_cc_gfx_DeviceCaps_uboOffsetAlignment_get), _SE(js_cc_gfx_DeviceCaps_uboOffsetAlignment_set)); cls->defineProperty("maxComputeSharedMemorySize", _SE(js_cc_gfx_DeviceCaps_maxComputeSharedMemorySize_get), _SE(js_cc_gfx_DeviceCaps_maxComputeSharedMemorySize_set)); cls->defineProperty("maxComputeWorkGroupInvocations", _SE(js_cc_gfx_DeviceCaps_maxComputeWorkGroupInvocations_get), _SE(js_cc_gfx_DeviceCaps_maxComputeWorkGroupInvocations_set)); From d26b12d722734f1a8a79b948e0dbb187daaae195 Mon Sep 17 00:00:00 2001 From: Zach Lee Date: Mon, 17 Oct 2022 11:04:15 +0800 Subject: [PATCH 026/829] =?UTF-8?q?Feat:=20GFXBuffer=20supports=20exposing?= =?UTF-8?q?=20staging=20buffer=20address=20to=20reduce=20me=E2=80=A6=20(#1?= =?UTF-8?q?3041)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cocos/renderer/gfx-agent/BufferAgent.cpp | 69 ++++++++----------- native/cocos/renderer/gfx-agent/BufferAgent.h | 5 +- native/cocos/renderer/gfx-base/GFXBuffer.cpp | 25 +++++++ native/cocos/renderer/gfx-base/GFXBuffer.h | 17 +++++ .../cocos/renderer/gfx-base/GFXDef-common.h | 1 + native/cocos/renderer/gfx-metal/MTLBuffer.h | 2 +- .../gfx-validator/BufferValidator.cpp | 11 ++- .../renderer/gfx-validator/BufferValidator.h | 3 + native/cocos/scene/Model.cpp | 48 ++++--------- native/cocos/scene/Model.h | 21 +++--- native/tools/swig-config/gfx.i | 9 +-- 11 files changed, 119 insertions(+), 92 deletions(-) diff --git a/native/cocos/renderer/gfx-agent/BufferAgent.cpp b/native/cocos/renderer/gfx-agent/BufferAgent.cpp index 3478a32d133..ac056400836 100644 --- a/native/cocos/renderer/gfx-agent/BufferAgent.cpp +++ b/native/cocos/renderer/gfx-agent/BufferAgent.cpp @@ -42,22 +42,16 @@ BufferAgent::~BufferAgent() { DeviceAgent::getInstance()->getMessageQueue(), BufferDestruct, actor, _actor, - stagingBuffers, _stagingBuffers, + stagingBuffer, std::move(_stagingBuffer), { - for (auto *buffer : stagingBuffers) { - free(buffer); - } - CC_SAFE_DELETE(actor); }); } void BufferAgent::doInit(const BufferInfo &info) { uint32_t size = getSize(); - if (size > STAGING_BUFFER_THRESHOLD && hasFlag(_memUsage, MemoryUsageBit::HOST)) { - for (size_t i = 0; i < DeviceAgent::MAX_FRAME_INDEX; ++i) { - _stagingBuffers.push_back(reinterpret_cast(malloc(size))); - } + if (hasFlag(info.flags, BufferFlagBit::ENABLE_STAGING_WRITE) || (size > STAGING_BUFFER_THRESHOLD && hasFlag(_memUsage, MemoryUsageBit::HOST))) { + _stagingBuffer = std::make_unique(size * DeviceAgent::MAX_FRAME_INDEX); } ENQUEUE_MESSAGE_2( @@ -89,26 +83,16 @@ void BufferAgent::doInit(const BufferViewInfo &info) { void BufferAgent::doResize(uint32_t size, uint32_t /*count*/) { auto *mq = DeviceAgent::getInstance()->getMessageQueue(); - if (!_stagingBuffers.empty()) { - auto *oldStagingBuffers = mq->allocate(DeviceAgent::MAX_FRAME_INDEX); - for (size_t i = 0; i < DeviceAgent::MAX_FRAME_INDEX; ++i) { - oldStagingBuffers[i] = _stagingBuffers[i]; - } - _stagingBuffers.clear(); + if (_stagingBuffer) { ENQUEUE_MESSAGE_1( mq, BufferFreeStagingBuffer, - stagingBuffers, oldStagingBuffers, + stagingBuffer, std::move(_stagingBuffer), { - for (size_t i = 0; i < DeviceAgent::MAX_FRAME_INDEX; ++i) { - free(stagingBuffers[i]); - } }); } - if (size > STAGING_BUFFER_THRESHOLD && hasFlag(_memUsage, MemoryUsageBit::HOST)) { - for (size_t i = 0; i < DeviceAgent::MAX_FRAME_INDEX; ++i) { - _stagingBuffers.push_back(reinterpret_cast(malloc(size))); - } + if (hasFlag(_flags, BufferFlagBit::ENABLE_STAGING_WRITE) || (size > STAGING_BUFFER_THRESHOLD && hasFlag(_memUsage, MemoryUsageBit::HOST))) { + _stagingBuffer = std::make_unique(size * DeviceAgent::MAX_FRAME_INDEX); } ENQUEUE_MESSAGE_2( @@ -122,26 +106,13 @@ void BufferAgent::doResize(uint32_t size, uint32_t /*count*/) { void BufferAgent::doDestroy() { auto *mq = DeviceAgent::getInstance()->getMessageQueue(); - uint8_t **oldStagingBuffers{nullptr}; - if (!_stagingBuffers.empty()) { - oldStagingBuffers = mq->allocate(DeviceAgent::MAX_FRAME_INDEX); - for (size_t i = 0; i < DeviceAgent::MAX_FRAME_INDEX; ++i) { - oldStagingBuffers[i] = _stagingBuffers[i]; - } - _stagingBuffers.clear(); - } ENQUEUE_MESSAGE_2( mq, BufferDestroy, actor, getActor(), - stagingBuffers, oldStagingBuffers, + stagingBuffer, std::move(_stagingBuffer), { actor->destroy(); - if (stagingBuffers) { - for (size_t i = 0; i < DeviceAgent::MAX_FRAME_INDEX; ++i) { - free(stagingBuffers[i]); - } - } }); } @@ -165,10 +136,22 @@ void BufferAgent::update(const void *buffer, uint32_t size) { }); } +void BufferAgent::flush(const uint8_t *buffer) { + auto *mq = DeviceAgent::getInstance()->getMessageQueue(); + ENQUEUE_MESSAGE_3( + mq, BufferUpdate, + actor, getActor(), + buffer, buffer, + size, _size, + { + actor->update(buffer, size); + }); +} + void BufferAgent::getActorBuffer(const BufferAgent *buffer, MessageQueue *mq, uint32_t size, uint8_t **pActorBuffer, bool *pNeedFreeing) { - if (!buffer->_stagingBuffers.empty()) { // for frequent updates on big buffers + if (buffer->_stagingBuffer) { // for frequent updates on big buffers uint32_t frameIndex = DeviceAgent::getInstance()->getCurrentIndex(); - *pActorBuffer = buffer->_stagingBuffers[frameIndex]; + *pActorBuffer = buffer->_stagingBuffer.get() + frameIndex * buffer->_size; } else if (size > STAGING_BUFFER_THRESHOLD) { // less frequent updates on big buffers *pActorBuffer = reinterpret_cast(malloc(size)); *pNeedFreeing = true; @@ -177,5 +160,13 @@ void BufferAgent::getActorBuffer(const BufferAgent *buffer, MessageQueue *mq, ui } } +uint8_t *BufferAgent::getStagingAddress() const { + if (!_stagingBuffer) { + return nullptr; + } + uint32_t frameIndex = DeviceAgent::getInstance()->getCurrentIndex(); + return _stagingBuffer.get() + _size * frameIndex; +} + } // namespace gfx } // namespace cc diff --git a/native/cocos/renderer/gfx-agent/BufferAgent.h b/native/cocos/renderer/gfx-agent/BufferAgent.h index bd89701e8db..f0e91f2eacc 100644 --- a/native/cocos/renderer/gfx-agent/BufferAgent.h +++ b/native/cocos/renderer/gfx-agent/BufferAgent.h @@ -50,9 +50,12 @@ class CC_DLL BufferAgent final : public Agent { void doResize(uint32_t size, uint32_t count) override; void doDestroy() override; + void flush(const uint8_t *buffer) override; + uint8_t *getStagingAddress() const override; + static constexpr uint32_t STAGING_BUFFER_THRESHOLD = MessageQueue::MEMORY_CHUNK_SIZE / 2; - ccstd::vector _stagingBuffers; + std::unique_ptr _stagingBuffer; }; } // namespace gfx diff --git a/native/cocos/renderer/gfx-base/GFXBuffer.cpp b/native/cocos/renderer/gfx-base/GFXBuffer.cpp index cca6a1f6d29..943c41d196f 100644 --- a/native/cocos/renderer/gfx-base/GFXBuffer.cpp +++ b/native/cocos/renderer/gfx-base/GFXBuffer.cpp @@ -48,6 +48,10 @@ void Buffer::initialize(const BufferInfo &info) { _count = _size / _stride; doInit(info); + + if (hasFlag(info.flags, BufferFlagBit::ENABLE_STAGING_WRITE) && getStagingAddress() == nullptr) { + _data = std::make_unique(_size); + } } void Buffer::initialize(const BufferViewInfo &info) { @@ -78,5 +82,26 @@ void Buffer::resize(uint32_t size) { } } +void Buffer::write(const uint8_t *value, uint32_t offset, uint32_t size) const { + CC_ASSERT(hasFlag(_flags, BufferFlagBit::ENABLE_STAGING_WRITE)); + uint8_t *dst = getStagingAddress(); + if (dst == nullptr || offset + size >= _size) { + return; + } + memcpy(dst + offset, value, size); +} + +void Buffer::update() { + flush(getStagingAddress()); +} + +uint8_t *Buffer::getBufferStagingAddress(Buffer *buffer) { + return buffer->getStagingAddress(); +} + +void Buffer::flushBuffer(Buffer *buffer, const uint8_t *data) { + buffer->flush(data); +} + } // namespace gfx } // namespace cc diff --git a/native/cocos/renderer/gfx-base/GFXBuffer.h b/native/cocos/renderer/gfx-base/GFXBuffer.h index 276984d2b53..7cbe2045782 100644 --- a/native/cocos/renderer/gfx-base/GFXBuffer.h +++ b/native/cocos/renderer/gfx-base/GFXBuffer.h @@ -43,10 +43,19 @@ class CC_DLL Buffer : public GFXObject, public RefCounted { void resize(uint32_t size); void destroy(); + template + void write(const T& value, uint32_t offset) const { + write(reinterpret_cast(&value), offset, sizeof(T)); + } + + void write(const uint8_t *value, uint32_t offset, uint32_t size) const; + virtual void update(const void *buffer, uint32_t size) = 0; inline void update(const void *buffer) { update(buffer, _size); } + void update(); + inline BufferUsage getUsage() const { return _usage; } inline MemoryUsage getMemUsage() const { return _memUsage; } inline uint32_t getStride() const { return _stride; } @@ -61,6 +70,12 @@ class CC_DLL Buffer : public GFXObject, public RefCounted { virtual void doResize(uint32_t size, uint32_t count) = 0; virtual void doDestroy() = 0; + static uint8_t *getBufferStagingAddress(Buffer *buffer); + static void flushBuffer(Buffer *buffer, const uint8_t *data); + + virtual void flush(const uint8_t *data) { update(reinterpret_cast(data), _size); } + virtual uint8_t *getStagingAddress() const { return _data.get(); } + BufferUsage _usage = BufferUsageBit::NONE; MemoryUsage _memUsage = MemoryUsageBit::NONE; uint32_t _stride = 0U; @@ -69,6 +84,8 @@ class CC_DLL Buffer : public GFXObject, public RefCounted { uint32_t _offset = 0U; BufferFlags _flags = BufferFlagBit::NONE; bool _isBufferView = false; + uint8_t _rsv[3] = {0}; + std::unique_ptr _data; }; } // namespace gfx diff --git a/native/cocos/renderer/gfx-base/GFXDef-common.h b/native/cocos/renderer/gfx-base/GFXDef-common.h index 9f42da4be16..51b5baf04e5 100644 --- a/native/cocos/renderer/gfx-base/GFXDef-common.h +++ b/native/cocos/renderer/gfx-base/GFXDef-common.h @@ -431,6 +431,7 @@ CC_ENUM_BITWISE_OPERATORS(BufferUsageBit); enum class BufferFlagBit : uint32_t { NONE = 0, + ENABLE_STAGING_WRITE = 0x01, }; using BufferFlags = BufferFlagBit; CC_ENUM_BITWISE_OPERATORS(BufferFlagBit); diff --git a/native/cocos/renderer/gfx-metal/MTLBuffer.h b/native/cocos/renderer/gfx-metal/MTLBuffer.h index 91875a2208d..b1f0a645c72 100644 --- a/native/cocos/renderer/gfx-metal/MTLBuffer.h +++ b/native/cocos/renderer/gfx-metal/MTLBuffer.h @@ -43,7 +43,7 @@ class CCMTLBuffer final : public Buffer { ~CCMTLBuffer(); CCMTLBuffer(const CCMTLBuffer &) = delete; CCMTLBuffer(CCMTLBuffer &&) = delete; - CCMTLBuffer &operator=(const CCMTLBuffer &) = default; + CCMTLBuffer &operator=(const CCMTLBuffer &) = delete; CCMTLBuffer &operator=(CCMTLBuffer &&) = delete; void update(const void *buffer, uint32_t offset) override; diff --git a/native/cocos/renderer/gfx-validator/BufferValidator.cpp b/native/cocos/renderer/gfx-validator/BufferValidator.cpp index 3394db77b63..7b1512b47ca 100644 --- a/native/cocos/renderer/gfx-validator/BufferValidator.cpp +++ b/native/cocos/renderer/gfx-validator/BufferValidator.cpp @@ -193,9 +193,18 @@ void BufferValidator::removeView(BufferValidator *view) { } void BufferValidator::onExpire() { - _source = nullptr; + _source = nullptr; _expired = true; } +void BufferValidator::flush(const uint8_t *buffer) { + Buffer::flushBuffer(_actor, buffer); +} + +uint8_t *BufferValidator::getStagingAddress() const { + return Buffer::getBufferStagingAddress(_actor); +} + + } // namespace gfx } // namespace cc diff --git a/native/cocos/renderer/gfx-validator/BufferValidator.h b/native/cocos/renderer/gfx-validator/BufferValidator.h index aaa5abd882f..79de15b5cea 100644 --- a/native/cocos/renderer/gfx-validator/BufferValidator.h +++ b/native/cocos/renderer/gfx-validator/BufferValidator.h @@ -50,6 +50,9 @@ class CC_DLL BufferValidator final : public Agent { void doResize(uint32_t size, uint32_t count) override; void doDestroy() override; + void flush(const uint8_t *buffer) override; + uint8_t *getStagingAddress() const override; + void addView(BufferValidator *view); void removeView(BufferValidator *view); void onExpire(); diff --git a/native/cocos/scene/Model.cpp b/native/cocos/scene/Model.cpp index fab3914141f..adac9570fcd 100644 --- a/native/cocos/scene/Model.cpp +++ b/native/cocos/scene/Model.cpp @@ -1,8 +1,8 @@ /**************************************************************************** Copyright (c) 2021 Xiamen Yaji Software Co., Ltd. - + http://www.cocos.com - + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated engine source code (the "Software"), a limited, worldwide, royalty-free, non-assignable, revocable and non-exclusive license @@ -10,10 +10,10 @@ not use Cocos Creator software for developing other software or tools that's used for developing games. You are not granted to publish, distribute, sublicense, and/or sell copies of Cocos Creator. - + The software or tools in this License Agreement are licensed, not sold. Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. - + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -40,20 +40,6 @@ #include "scene/SubModel.h" namespace { - -cc::Float32Array &vec4ToFloat32Array(const cc::Vec4 &v, cc::Float32Array &out, index_t ofs = 0) { - out[ofs + 0] = v.x; - out[ofs + 1] = v.y; - out[ofs + 2] = v.z; - out[ofs + 3] = v.w; - return out; -} - -cc::Float32Array &mat4ToFloat32Array(const cc::Mat4 &mat, cc::Float32Array &out, index_t ofs = 0) { - memcpy(reinterpret_cast(const_cast(out.buffer()->getData())) + ofs, mat.m, 16 * sizeof(float)); - return out; -} - const cc::gfx::SamplerInfo LIGHTMAP_SAMPLER_HASH{ cc::gfx::Filter::LINEAR, cc::gfx::Filter::LINEAR, @@ -91,7 +77,6 @@ void Model::initialize() { _enabled = true; _visFlags = Layers::Enum::NONE; _inited = true; - _localData.reset(pipeline::UBOLocal::COUNT); } void Model::destroy() { @@ -195,11 +180,14 @@ void Model::updateUBOs(uint32_t stamp) { if (hasNonInstancingPass && _localBuffer) { Mat4 mat4; - mat4ToFloat32Array(worldMatrix, _localData, pipeline::UBOLocal::MAT_WORLD_OFFSET); Mat4::inverseTranspose(worldMatrix, &mat4); - mat4ToFloat32Array(mat4, _localData, pipeline::UBOLocal::MAT_WORLD_IT_OFFSET); - _localBuffer->update(_localData.buffer()->getData()); + _localBuffer->write(worldMatrix, sizeof(float) * pipeline::UBOLocal::MAT_WORLD_OFFSET); + _localBuffer->write(mat4, sizeof(float) * pipeline::UBOLocal::MAT_WORLD_IT_OFFSET); + _localBuffer->write(_lightmapUVParam, sizeof(float) * pipeline::UBOLocal::LIGHTINGMAP_UVPARAM); + _localBuffer->write(_shadowBias, sizeof(float) * (pipeline::UBOLocal::LOCAL_SHADOW_BIAS)); + + _localBuffer->update(); const bool enableOcclusionQuery = Root::getInstance()->getPipeline()->isOcclusionQueryEnabled(); if (enableOcclusionQuery) { updateWorldBoundUBOs(); @@ -216,14 +204,13 @@ void Model::updateOctree() { void Model::updateWorldBoundUBOs() { if (_worldBoundBuffer) { - ccstd::array worldBoundBufferView; const Vec3 ¢er = _worldBounds ? _worldBounds->getCenter() : Vec3{0.0F, 0.0F, 0.0F}; const Vec3 &halfExtents = _worldBounds ? _worldBounds->getHalfExtents() : Vec3{1.0F, 1.0F, 1.0F}; const Vec4 worldBoundCenter{center.x, center.y, center.z, 0.0F}; const Vec4 worldBoundHalfExtents{halfExtents.x, halfExtents.y, halfExtents.z, 1.0F}; - memcpy(worldBoundBufferView.data() + pipeline::UBOWorldBound::WORLD_BOUND_CENTER, &worldBoundCenter.x, sizeof(Vec4)); - memcpy(worldBoundBufferView.data() + pipeline::UBOWorldBound::WORLD_BOUND_HALF_EXTENTS, &worldBoundHalfExtents.x, sizeof(Vec4)); - _worldBoundBuffer->update(worldBoundBufferView.data(), pipeline::UBOWorldBound::SIZE); + _worldBoundBuffer->write(worldBoundCenter, sizeof(float) * pipeline::UBOWorldBound::WORLD_BOUND_CENTER); + _worldBoundBuffer->write(worldBoundHalfExtents, sizeof(float) * pipeline::UBOWorldBound::WORLD_BOUND_HALF_EXTENTS); + _worldBoundBuffer->update(); } } @@ -303,7 +290,6 @@ void Model::initLightingmap(Texture2D *texture, const Vec4 &uvParam) { } void Model::updateLightingmap(Texture2D *texture, const Vec4 &uvParam) { - vec4ToFloat32Array(uvParam, _localData, pipeline::UBOLocal::LIGHTINGMAP_UVPARAM); //TODO(xwx): toArray not implemented in Math _localDataUpdated = true; _lightmap = texture; _lightmapUVParam = uvParam; @@ -376,7 +362,7 @@ void Model::initLocalDescriptors(index_t /*subModelIndex*/) { gfx::MemoryUsageBit::DEVICE, pipeline::UBOLocal::SIZE, pipeline::UBOLocal::SIZE, - }); + gfx::BufferFlagBit::ENABLE_STAGING_WRITE}); } } @@ -387,7 +373,7 @@ void Model::initWorldBoundDescriptors(index_t /*subModelIndex*/) { gfx::MemoryUsageBit::DEVICE, pipeline::UBOLocal::SIZE, pipeline::UBOLocal::SIZE, - }); + gfx::BufferFlagBit::ENABLE_STAGING_WRITE}); } } @@ -420,10 +406,6 @@ void Model::updateWorldBoundDescriptors(index_t subModelIndex, gfx::DescriptorSe } void Model::updateLocalShadowBias() { - _localData[pipeline::UBOLocal::LOCAL_SHADOW_BIAS + 0] = _shadowBias; - _localData[pipeline::UBOLocal::LOCAL_SHADOW_BIAS + 1] = _shadowNormalBias; - _localData[pipeline::UBOLocal::LOCAL_SHADOW_BIAS + 2] = 0; - _localData[pipeline::UBOLocal::LOCAL_SHADOW_BIAS + 3] = 0; _localDataUpdated = true; } diff --git a/native/cocos/scene/Model.h b/native/cocos/scene/Model.h index c669c8b0d28..01829269719 100644 --- a/native/cocos/scene/Model.h +++ b/native/cocos/scene/Model.h @@ -2,7 +2,7 @@ Copyright (c) 2021-2022 Xiamen Yaji Software Co., Ltd. http://www.cocos.com - + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated engine source code (the "Software"), a limited, worldwide, royalty-free, non-assignable, revocable and non-exclusive license @@ -10,10 +10,10 @@ not use Cocos Creator software for developing other software or tools that's used for developing games. You are not granted to publish, distribute, sublicense, and/or sell copies of Cocos Creator. - + The software or tools in this License Agreement are licensed, not sold. Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. - + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -113,8 +113,8 @@ class Model : public RefCounted { _receiveShadow = value; onMacroPatchesStateChanged(); } - inline void setShadowBias(float bias) { _shadowBias = bias; } - inline void setShadowNormalBias(float normalBias) { _shadowNormalBias = normalBias; } + inline void setShadowBias(float bias) { _shadowBias.x = bias; } + inline void setShadowNormalBias(float normalBias) { _shadowBias.y = normalBias; } inline void setTransform(Node *node) { _transform = node; } inline void setVisFlags(Layers::Enum flags) { _visFlags = flags; } inline void setBounds(geometry::AABB *world) { @@ -133,7 +133,6 @@ class Model : public RefCounted { inline bool isEnabled() const { return _enabled; } inline gfx::Buffer *getLocalBuffer() const { return _localBuffer.get(); } inline gfx::Buffer *getWorldBoundBuffer() const { return _worldBoundBuffer.get(); } - inline Float32Array getLocalData() const { return _localData; } inline geometry::AABB *getModelBounds() const { return _modelBounds; } inline Node *getNode() const { return _node.get(); } inline bool isReceiveShadow() const { return _receiveShadow; } @@ -149,8 +148,8 @@ class Model : public RefCounted { inline RenderScene *getScene() const { return _scene; } inline void setDynamicBatching(bool val) { _isDynamicBatching = val; } inline bool isDynamicBatching() const { return _isDynamicBatching; } - inline float getShadowBias() const { return _shadowBias; } - inline float getShadowNormalBias() const { return _shadowNormalBias; } + inline float getShadowBias() const { return _shadowBias.x; } + inline float getShadowNormalBias() const { return _shadowBias.y; } inline uint32_t getPriority() const { return _priority; } inline void setPriority(uint32_t value) { _priority = value; } @@ -200,15 +199,11 @@ class Model : public RefCounted { // For JS bool _isCalledFromJS{false}; - float _shadowBias{0.0F}; - float _shadowNormalBias{0.0F}; - + Vec4 _shadowBias; Vec4 _lightmapUVParam; // For JS CallbacksInvoker _eventProcessor; - - Float32Array _localData; ccstd::vector> _subModels; private: diff --git a/native/tools/swig-config/gfx.i b/native/tools/swig-config/gfx.i index dfddbce9169..35c7de93413 100644 --- a/native/tools/swig-config/gfx.i +++ b/native/tools/swig-config/gfx.i @@ -26,7 +26,7 @@ // %ignore your_namespace::your_class_name::your_method_name; // %ignore your_namespace::your_class_name::your_attribute_name; // -// Note: +// Note: // 1. 'Ignore Section' should be placed before attribute definition and %import/%include // 2. namespace is needed // @@ -39,7 +39,7 @@ // %rename(rename_to_name) your_namespace::original_class_name; // %rename(rename_to_name) your_namespace::original_class_name::method_name; // %rename(rename_to_name) your_namespace::original_class_name::attribute_name; -// +// // Note: // 1. 'Rename Section' should be placed before attribute definition and %import/%include // 2. namespace is needed @@ -56,6 +56,7 @@ namespace cc { namespace gfx { %ignore Buffer::initialize; %ignore Buffer::update; +%ignore Buffer::write; %ignore CommandBuffer::execute; %ignore CommandBuffer::updateBuffer; @@ -105,7 +106,7 @@ namespace cc { namespace gfx { // %attribute_writeonly(your_namespace::your_class_name, cpp_member_variable_type, js_property_name, cpp_setter_name) // // Note: -// 1. Don't need to add 'const' prefix for cpp_member_variable_type +// 1. Don't need to add 'const' prefix for cpp_member_variable_type // 2. The return type of getter should keep the same as the type of setter's parameter // 3. If using reference, add '&' suffix for cpp_member_variable_type to avoid generated code using value assignment // 4. 'Attribute Section' should be placed before 'Import Section' and 'Include Section' @@ -229,7 +230,7 @@ namespace cc { namespace gfx { // ----- Import Section ------ // Brief: Import header files which are depended by 'Include Section' -// Note: +// Note: // %import "your_header_file.h" will not generate code for that header file // %import "base/Macros.h" From 1f2eb27fa07462a10ea25767a99dcd084d5f3a4d Mon Sep 17 00:00:00 2001 From: hyde zhou Date: Mon, 17 Oct 2022 11:33:48 +0800 Subject: [PATCH 027/829] [develop] added default sampler and deferred layout setup (#13034) Co-authored-by: GengineJS <476393671@qq.com> --- cocos/rendering/custom/executor.ts | 4 +++- cocos/rendering/custom/index.jsb.ts | 6 +++--- cocos/rendering/custom/index.ts | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/cocos/rendering/custom/executor.ts b/cocos/rendering/custom/executor.ts index b7a243330d5..b93ea32def1 100644 --- a/cocos/rendering/custom/executor.ts +++ b/cocos/rendering/custom/executor.ts @@ -483,6 +483,8 @@ class RenderPassLayoutInfo { if (!gfxTex) { throw Error(`Could not find texture with resource name ${this._inputName}`); } + const resId = context.resourceGraph.vertex(this._inputName); + const samplerInfo = context.resourceGraph.getSampler(resId); // bind descriptors for (const descriptor of input[1]) { const descriptorName = descriptor.name; @@ -492,7 +494,7 @@ class RenderPassLayoutInfo { for (let i = 0; i !== block.descriptors.length; ++i) { if (descriptorID === block.descriptors[i].descriptorID) { layoutData.descriptorSet!.bindTexture(block.offset + i, gfxTex); - layoutData.descriptorSet!.bindSampler(block.offset + i, context.device.getSampler(new SamplerInfo())); + layoutData.descriptorSet!.bindSampler(block.offset + i, context.device.getSampler(samplerInfo)); if (!this._descriptorSet) this._descriptorSet = layoutData.descriptorSet; } } diff --git a/cocos/rendering/custom/index.jsb.ts b/cocos/rendering/custom/index.jsb.ts index de3bc6a7241..1eb1236a995 100644 --- a/cocos/rendering/custom/index.jsb.ts +++ b/cocos/rendering/custom/index.jsb.ts @@ -25,9 +25,9 @@ declare const render: any; -import { legacyCC } from '../../core/global-exports'; import { Pipeline, PipelineBuilder } from './pipeline'; import { buildDeferredLayout, buildForwardLayout } from './effect'; +import { macro } from '../../core/platform/macro'; import { DeferredPipelineBuilder, ForwardPipelineBuilder } from './builtin-pipelines'; import { CustomPipelineBuilder } from './custom-pipeline'; @@ -35,9 +35,9 @@ export * from './types'; export * from './pipeline'; export function createCustomPipeline (): Pipeline { - const root = legacyCC.director.root; const ppl = render.Factory.createPipeline(); - if (root.useDeferredPipeline) { + const pplName = macro.CUSTOM_PIPELINE_NAME; + if (pplName === 'Deferred') { buildDeferredLayout(ppl); } else { buildForwardLayout(ppl); diff --git a/cocos/rendering/custom/index.ts b/cocos/rendering/custom/index.ts index 42feb4b16dd..82f290ecb31 100644 --- a/cocos/rendering/custom/index.ts +++ b/cocos/rendering/custom/index.ts @@ -39,7 +39,7 @@ export function createCustomPipeline (): Pipeline { const ppl = new WebPipeline(); const pplName = macro.CUSTOM_PIPELINE_NAME; ppl.setCustomPipelineName(pplName); - if (ppl.usesDeferredPipeline) { + if (pplName === 'Deferred') { buildDeferredLayout(ppl); } else { buildForwardLayout(ppl); From 1333ff1f43a10d164fca06738acbae76043d2c0a Mon Sep 17 00:00:00 2001 From: hyde zhou Date: Mon, 17 Oct 2022 14:43:36 +0800 Subject: [PATCH 028/829] [develop] add layout graph serialization (#13020) --- cocos/rendering/custom/custom-pipeline.ts | 2 +- cocos/rendering/custom/executor.ts | 17 +- cocos/rendering/custom/layout-graph.ts | 342 +++++++++++++++++- cocos/rendering/custom/serialization.ts | 87 +++++ cocos/rendering/custom/types.ts | 204 +++++++++++ native/CMakeLists.txt | 1 + .../renderer/pipeline/custom/ArchiveTypes.h | 3 + .../renderer/pipeline/custom/LayoutGraphFwd.h | 4 + .../pipeline/custom/LayoutGraphNames.h | 4 + .../custom/LayoutGraphSerialization.h | 250 +++++++++++++ .../pipeline/custom/LayoutGraphTypes.cpp | 28 ++ .../pipeline/custom/LayoutGraphTypes.h | 70 ++++ .../custom/RenderCommonSerialization.h | 1 + .../pipeline/custom/SerializationUtils.h | 320 +++++++++++++++- 14 files changed, 1314 insertions(+), 19 deletions(-) create mode 100644 cocos/rendering/custom/serialization.ts create mode 100644 native/cocos/renderer/pipeline/custom/LayoutGraphSerialization.h diff --git a/cocos/rendering/custom/custom-pipeline.ts b/cocos/rendering/custom/custom-pipeline.ts index 1d7bbd8a954..70959c80103 100644 --- a/cocos/rendering/custom/custom-pipeline.ts +++ b/cocos/rendering/custom/custom-pipeline.ts @@ -14,7 +14,7 @@ export class CustomPipelineBuilder implements PipelineBuilder { // forward pass const forwardInfo = buildForwardPass(camera, ppl, isGameView); if (!isGameView) { - return; + continue; } // bloom passes const bloomInfo = buildBloomPasses(camera, ppl, forwardInfo.rtName); diff --git a/cocos/rendering/custom/executor.ts b/cocos/rendering/custom/executor.ts index b93ea32def1..87183996213 100644 --- a/cocos/rendering/custom/executor.ts +++ b/cocos/rendering/custom/executor.ts @@ -703,9 +703,10 @@ class DeviceRenderPass { protected _applyViewport (frameTex: Texture) { this._viewport = null; const viewport = this._rasterInfo.pass.viewport; - if (viewport.left !== 0 || viewport.top !== 0 - || viewport.width !== frameTex.width - || viewport.height !== frameTex.height) { + if (viewport.left !== 0 + || viewport.top !== 0 + || viewport.width !== 0 + || viewport.height !== 0) { this._viewport = viewport; } } @@ -714,7 +715,8 @@ class DeviceRenderPass { const tex = this.framebuffer.colorTextures[0]!; this._applyViewport(tex); const cmdBuff = this._context.commandBuffer; - const renderArea = this._viewport ? new Rect(this._viewport.left, this._viewport.top, this._viewport.width, this._viewport.height) + const renderArea = this._viewport + ? new Rect(this._viewport.left, this._viewport.top, this._viewport.width, this._viewport.height) : new Rect(0, 0, tex.width, tex.height); cmdBuff.beginRenderPass(this.renderPass, this.framebuffer, renderArea, this.clearColor, this.clearDepth, this.clearStencil); @@ -1262,9 +1264,10 @@ class DeviceSceneTask extends WebSceneTask { const context = devicePass.context; if (!this._currentQueue.devicePass.viewport) { const texture = this._currentQueue.devicePass.framebuffer.colorTextures[0]!; - const lightInfo = this.graphScene.scene!.light; - const area = this._isShadowMap() && lightInfo.light - ? getRenderArea(this.camera!, texture.width, texture.height, lightInfo.light, lightInfo.level) + const graphScene = this.graphScene; + const lightInfo = graphScene.scene ? graphScene.scene.light : null; + const area = this._isShadowMap() && graphScene.scene && lightInfo!.light + ? getRenderArea(this.camera!, texture.width, texture.height, lightInfo!.light, lightInfo!.level) : getRenderArea(this.camera!, texture.width, texture.height); this.visitor.setViewport(new Viewport(area.x, area.y, area.width, area.height)); this.visitor.setScissor(area); diff --git a/cocos/rendering/custom/layout-graph.ts b/cocos/rendering/custom/layout-graph.ts index 7b90dacc2ec..4f0ee6214c5 100644 --- a/cocos/rendering/custom/layout-graph.ts +++ b/cocos/rendering/custom/layout-graph.ts @@ -31,9 +31,10 @@ /* eslint-disable max-len */ import * as impl from './graph'; import { DescriptorSet, DescriptorSetLayout, DescriptorSetLayoutInfo, ShaderStageFlagBit, Type, UniformBlock } from '../../gfx'; -import { DescriptorBlock, DescriptorBlockIndex, DescriptorTypeOrder, UpdateFrequency } from './types'; +import { DescriptorBlock, saveDescriptorBlock, loadDescriptorBlock, DescriptorBlockIndex, saveDescriptorBlockIndex, loadDescriptorBlockIndex, DescriptorTypeOrder, UpdateFrequency } from './types'; import { ccclass } from '../../core/data/decorators'; -import { OutputArchive } from './archive'; +import { OutputArchive, InputArchive } from './archive'; +import { saveUniformBlock, loadUniformBlock, saveDescriptorSetLayoutInfo, loadDescriptorSetLayoutInfo } from './serialization'; export class DescriptorDB { readonly blocks: Map = new Map(); @@ -602,7 +603,7 @@ export class DescriptorSetLayoutData { } export class DescriptorSetData { - constructor (descriptorSetLayoutData: DescriptorSetLayoutData, descriptorSetLayout: DescriptorSetLayout | null, descriptorSet: DescriptorSet | null) { + constructor (descriptorSetLayoutData: DescriptorSetLayoutData = new DescriptorSetLayoutData(), descriptorSetLayout: DescriptorSetLayout | null = null, descriptorSet: DescriptorSet | null = null) { this.descriptorSetLayoutData = descriptorSetLayoutData; this.descriptorSetLayout = descriptorSetLayout; this.descriptorSet = descriptorSet; @@ -617,6 +618,23 @@ export class PipelineLayoutData { readonly descriptorSets: Map = new Map(); } +export class ShaderBindingData { + readonly descriptorBindings: Map = new Map(); +} + +export class ShaderLayoutData { + readonly layoutData: Map = new Map(); + readonly bindingData: Map = new Map(); +} + +export class TechniqueData { + readonly passes: ShaderLayoutData[] = []; +} + +export class EffectData { + readonly techniques: Map = new Map(); +} + export class ShaderProgramData { readonly layout: PipelineLayoutData = new PipelineLayoutData(); } @@ -811,6 +829,7 @@ export class LayoutGraphData implements impl.BidirectionalGraph this.attributeIndex.clear(); this.constantIndex.clear(); this.shaderLayoutIndex.clear(); + this.effects.clear(); // ComponentGraph this._names.length = 0; this._updateFrequencies.length = 0; @@ -1178,4 +1197,321 @@ export class LayoutGraphData implements impl.BidirectionalGraph readonly attributeIndex: Map = new Map(); readonly constantIndex: Map = new Map(); readonly shaderLayoutIndex: Map = new Map(); + readonly effects: Map = new Map(); +} + +export function saveDescriptorDB (ar: OutputArchive, v: DescriptorDB) { + ar.writeNumber(v.blocks.size); // Map + for (const [k1, v1] of v.blocks) { + saveDescriptorBlockIndex(ar, JSON.parse(k1)); + saveDescriptorBlock(ar, v1); + } +} + +export function loadDescriptorDB (ar: InputArchive, v: DescriptorDB) { + let sz = 0; + sz = ar.readNumber(); // Map + for (let i1 = 0; i1 !== sz; ++i1) { + const k1 = new DescriptorBlockIndex(); + loadDescriptorBlockIndex(ar, k1); + const v1 = new DescriptorBlock(); + loadDescriptorBlock(ar, v1); + v.blocks.set(JSON.stringify(k1), v1); + } +} + +export function saveRenderPhase (ar: OutputArchive, v: RenderPhase) { + ar.writeNumber(v.shaders.size); // Set + for (const v1 of v.shaders) { + ar.writeString(v1); + } +} + +export function loadRenderPhase (ar: InputArchive, v: RenderPhase) { + let sz = 0; + sz = ar.readNumber(); // Set + for (let i1 = 0; i1 !== sz; ++i1) { + const v1 = ar.readString(); + v.shaders.add(v1); + } +} + +export function saveUniformData (ar: OutputArchive, v: UniformData) { + ar.writeNumber(v.uniformID); + ar.writeNumber(v.uniformType); + ar.writeNumber(v.offset); + ar.writeNumber(v.size); +} + +export function loadUniformData (ar: InputArchive, v: UniformData) { + v.uniformID = ar.readNumber(); + v.uniformType = ar.readNumber(); + v.offset = ar.readNumber(); + v.size = ar.readNumber(); +} + +export function saveUniformBlockData (ar: OutputArchive, v: UniformBlockData) { + ar.writeNumber(v.bufferSize); + ar.writeNumber(v.uniforms.length); // UniformData[] + for (const v1 of v.uniforms) { + saveUniformData(ar, v1); + } +} + +export function loadUniformBlockData (ar: InputArchive, v: UniformBlockData) { + v.bufferSize = ar.readNumber(); + let sz = 0; + sz = ar.readNumber(); // UniformData[] + v.uniforms.length = sz; + for (let i1 = 0; i1 !== sz; ++i1) { + const v1 = new UniformData(); + loadUniformData(ar, v1); + v.uniforms[i1] = v1; + } +} + +export function saveDescriptorData (ar: OutputArchive, v: DescriptorData) { + ar.writeNumber(v.descriptorID); + ar.writeNumber(v.count); +} + +export function loadDescriptorData (ar: InputArchive, v: DescriptorData) { + v.descriptorID = ar.readNumber(); + v.count = ar.readNumber(); +} + +export function saveDescriptorBlockData (ar: OutputArchive, v: DescriptorBlockData) { + ar.writeNumber(v.type); + ar.writeNumber(v.visibility); + ar.writeNumber(v.offset); + ar.writeNumber(v.capacity); + ar.writeNumber(v.descriptors.length); // DescriptorData[] + for (const v1 of v.descriptors) { + saveDescriptorData(ar, v1); + } +} + +export function loadDescriptorBlockData (ar: InputArchive, v: DescriptorBlockData) { + v.type = ar.readNumber(); + v.visibility = ar.readNumber(); + v.offset = ar.readNumber(); + v.capacity = ar.readNumber(); + let sz = 0; + sz = ar.readNumber(); // DescriptorData[] + v.descriptors.length = sz; + for (let i1 = 0; i1 !== sz; ++i1) { + const v1 = new DescriptorData(); + loadDescriptorData(ar, v1); + v.descriptors[i1] = v1; + } +} + +export function saveDescriptorSetLayoutData (ar: OutputArchive, v: DescriptorSetLayoutData) { + ar.writeNumber(v.slot); + ar.writeNumber(v.capacity); + ar.writeNumber(v.descriptorBlocks.length); // DescriptorBlockData[] + for (const v1 of v.descriptorBlocks) { + saveDescriptorBlockData(ar, v1); + } + ar.writeNumber(v.uniformBlocks.size); // Map + for (const [k1, v1] of v.uniformBlocks) { + ar.writeNumber(k1); + saveUniformBlock(ar, v1); + } +} + +export function loadDescriptorSetLayoutData (ar: InputArchive, v: DescriptorSetLayoutData) { + v.slot = ar.readNumber(); + v.capacity = ar.readNumber(); + let sz = 0; + sz = ar.readNumber(); // DescriptorBlockData[] + v.descriptorBlocks.length = sz; + for (let i1 = 0; i1 !== sz; ++i1) { + const v1 = new DescriptorBlockData(); + loadDescriptorBlockData(ar, v1); + v.descriptorBlocks[i1] = v1; + } + sz = ar.readNumber(); // Map + for (let i1 = 0; i1 !== sz; ++i1) { + const k1 = ar.readNumber(); + const v1 = new UniformBlock(); + loadUniformBlock(ar, v1); + v.uniformBlocks.set(k1, v1); + } +} + +export function saveDescriptorSetData (ar: OutputArchive, v: DescriptorSetData) { + saveDescriptorSetLayoutData(ar, v.descriptorSetLayoutData); + saveDescriptorSetLayoutInfo(ar, v.descriptorSetLayoutInfo); + // skip, v.descriptorSetLayout: DescriptorSetLayout + // skip, v.descriptorSet: DescriptorSet +} + +export function loadDescriptorSetData (ar: InputArchive, v: DescriptorSetData) { + loadDescriptorSetLayoutData(ar, v.descriptorSetLayoutData); + loadDescriptorSetLayoutInfo(ar, v.descriptorSetLayoutInfo); + // skip, v.descriptorSetLayout: DescriptorSetLayout + // skip, v.descriptorSet: DescriptorSet +} + +export function savePipelineLayoutData (ar: OutputArchive, v: PipelineLayoutData) { + ar.writeNumber(v.descriptorSets.size); // Map + for (const [k1, v1] of v.descriptorSets) { + ar.writeNumber(k1); + saveDescriptorSetData(ar, v1); + } +} + +export function loadPipelineLayoutData (ar: InputArchive, v: PipelineLayoutData) { + let sz = 0; + sz = ar.readNumber(); // Map + for (let i1 = 0; i1 !== sz; ++i1) { + const k1 = ar.readNumber(); + const v1 = new DescriptorSetData(); + loadDescriptorSetData(ar, v1); + v.descriptorSets.set(k1, v1); + } +} + +export function saveShaderBindingData (ar: OutputArchive, v: ShaderBindingData) { + ar.writeNumber(v.descriptorBindings.size); // Map + for (const [k1, v1] of v.descriptorBindings) { + ar.writeNumber(k1); + ar.writeNumber(v1); + } +} + +export function loadShaderBindingData (ar: InputArchive, v: ShaderBindingData) { + let sz = 0; + sz = ar.readNumber(); // Map + for (let i1 = 0; i1 !== sz; ++i1) { + const k1 = ar.readNumber(); + const v1 = ar.readNumber(); + v.descriptorBindings.set(k1, v1); + } +} + +export function saveShaderLayoutData (ar: OutputArchive, v: ShaderLayoutData) { + ar.writeNumber(v.layoutData.size); // Map + for (const [k1, v1] of v.layoutData) { + ar.writeNumber(k1); + saveDescriptorSetLayoutData(ar, v1); + } + ar.writeNumber(v.bindingData.size); // Map + for (const [k1, v1] of v.bindingData) { + ar.writeNumber(k1); + saveShaderBindingData(ar, v1); + } +} + +export function loadShaderLayoutData (ar: InputArchive, v: ShaderLayoutData) { + let sz = 0; + sz = ar.readNumber(); // Map + for (let i1 = 0; i1 !== sz; ++i1) { + const k1 = ar.readNumber(); + const v1 = new DescriptorSetLayoutData(); + loadDescriptorSetLayoutData(ar, v1); + v.layoutData.set(k1, v1); + } + sz = ar.readNumber(); // Map + for (let i1 = 0; i1 !== sz; ++i1) { + const k1 = ar.readNumber(); + const v1 = new ShaderBindingData(); + loadShaderBindingData(ar, v1); + v.bindingData.set(k1, v1); + } +} + +export function saveTechniqueData (ar: OutputArchive, v: TechniqueData) { + ar.writeNumber(v.passes.length); // ShaderLayoutData[] + for (const v1 of v.passes) { + saveShaderLayoutData(ar, v1); + } +} + +export function loadTechniqueData (ar: InputArchive, v: TechniqueData) { + let sz = 0; + sz = ar.readNumber(); // ShaderLayoutData[] + v.passes.length = sz; + for (let i1 = 0; i1 !== sz; ++i1) { + const v1 = new ShaderLayoutData(); + loadShaderLayoutData(ar, v1); + v.passes[i1] = v1; + } +} + +export function saveEffectData (ar: OutputArchive, v: EffectData) { + ar.writeNumber(v.techniques.size); // Map + for (const [k1, v1] of v.techniques) { + ar.writeString(k1); + saveTechniqueData(ar, v1); + } +} + +export function loadEffectData (ar: InputArchive, v: EffectData) { + let sz = 0; + sz = ar.readNumber(); // Map + for (let i1 = 0; i1 !== sz; ++i1) { + const k1 = ar.readString(); + const v1 = new TechniqueData(); + loadTechniqueData(ar, v1); + v.techniques.set(k1, v1); + } +} + +export function saveShaderProgramData (ar: OutputArchive, v: ShaderProgramData) { + savePipelineLayoutData(ar, v.layout); +} + +export function loadShaderProgramData (ar: InputArchive, v: ShaderProgramData) { + loadPipelineLayoutData(ar, v.layout); +} + +export function saveRenderStageData (ar: OutputArchive, v: RenderStageData) { + ar.writeNumber(v.descriptorVisibility.size); // Map + for (const [k1, v1] of v.descriptorVisibility) { + ar.writeNumber(k1); + ar.writeNumber(v1); + } +} + +export function loadRenderStageData (ar: InputArchive, v: RenderStageData) { + let sz = 0; + sz = ar.readNumber(); // Map + for (let i1 = 0; i1 !== sz; ++i1) { + const k1 = ar.readNumber(); + const v1 = ar.readNumber(); + v.descriptorVisibility.set(k1, v1); + } +} + +export function saveRenderPhaseData (ar: OutputArchive, v: RenderPhaseData) { + ar.writeString(v.rootSignature); + ar.writeNumber(v.shaderPrograms.length); // ShaderProgramData[] + for (const v1 of v.shaderPrograms) { + saveShaderProgramData(ar, v1); + } + ar.writeNumber(v.shaderIndex.size); // Map + for (const [k1, v1] of v.shaderIndex) { + ar.writeString(k1); + ar.writeNumber(v1); + } +} + +export function loadRenderPhaseData (ar: InputArchive, v: RenderPhaseData) { + v.rootSignature = ar.readString(); + let sz = 0; + sz = ar.readNumber(); // ShaderProgramData[] + v.shaderPrograms.length = sz; + for (let i1 = 0; i1 !== sz; ++i1) { + const v1 = new ShaderProgramData(); + loadShaderProgramData(ar, v1); + v.shaderPrograms[i1] = v1; + } + sz = ar.readNumber(); // Map + for (let i1 = 0; i1 !== sz; ++i1) { + const k1 = ar.readString(); + const v1 = ar.readNumber(); + v.shaderIndex.set(k1, v1); + } } diff --git a/cocos/rendering/custom/serialization.ts b/cocos/rendering/custom/serialization.ts new file mode 100644 index 00000000000..dea1e78df2f --- /dev/null +++ b/cocos/rendering/custom/serialization.ts @@ -0,0 +1,87 @@ +import { OutputArchive, InputArchive } from './archive'; +import { Color, DescriptorSetLayoutBinding, DescriptorSetLayoutInfo, Uniform, UniformBlock } from '../../gfx'; + +export function saveColor (ar: OutputArchive, v: Color) { + ar.writeNumber(v.x); + ar.writeNumber(v.y); + ar.writeNumber(v.z); + ar.writeNumber(v.w); +} + +export function loadColor (ar: InputArchive, v: Color) { + v.x = ar.readNumber(); + v.y = ar.readNumber(); + v.z = ar.readNumber(); + v.w = ar.readNumber(); +} + +export function saveUniform (ar: OutputArchive, v: Uniform) { + ar.writeString(v.name); + ar.writeNumber(v.type); + ar.writeNumber(v.count); +} + +export function loadUniform (ar: InputArchive, v: Uniform) { + v.name = ar.readString(); + v.type = ar.readNumber(); + v.count = ar.readNumber(); +} + +export function saveUniformBlock (ar: OutputArchive, v: UniformBlock) { + ar.writeNumber(v.set); + ar.writeNumber(v.binding); + ar.writeString(v.name); + ar.writeNumber(v.members.length); + for (const v1 of v.members) { + saveUniform(ar, v1); + } + ar.writeNumber(v.count); +} + +export function loadUniformBlock (ar: InputArchive, v: UniformBlock) { + v.set = ar.readNumber(); + v.binding = ar.readNumber(); + v.name = ar.readString(); + let sz = 0; + sz = ar.readNumber(); + v.members.length = sz; + for (let i = 0; i !== sz; ++i) { + const v1 = new Uniform(); + loadUniform(ar, v1); + v.members[i] = v1; + } + v.count = ar.readNumber(); +} + +export function saveDescriptorSetLayoutBinding (ar: OutputArchive, v: DescriptorSetLayoutBinding) { + ar.writeNumber(v.binding); + ar.writeNumber(v.descriptorType); + ar.writeNumber(v.count); + ar.writeNumber(v.stageFlags); + // skip immutableSamplers; +} + +export function loadDescriptorSetLayoutBinding (ar: InputArchive, v: DescriptorSetLayoutBinding) { + v.binding = ar.readNumber(); + v.descriptorType = ar.readNumber(); + v.count = ar.readNumber(); + v.stageFlags = ar.readNumber(); + // skip immutableSamplers; +} + +export function saveDescriptorSetLayoutInfo (ar: OutputArchive, v: DescriptorSetLayoutInfo) { + ar.writeNumber(v.bindings.length); + for (const v1 of v.bindings) { + saveDescriptorSetLayoutBinding(ar, v1); + } +} + +export function loadDescriptorSetLayoutInfo (ar: InputArchive, v: DescriptorSetLayoutInfo) { + const sz = ar.readNumber(); + v.bindings.length = sz; + for (let i = 0; i !== sz; ++i) { + const v1 = new DescriptorSetLayoutBinding(); + loadDescriptorSetLayoutBinding(ar, v1); + v.bindings[i] = v1; + } +} diff --git a/cocos/rendering/custom/types.ts b/cocos/rendering/custom/types.ts index 13c82c69167..b5f88ccd3a0 100644 --- a/cocos/rendering/custom/types.ts +++ b/cocos/rendering/custom/types.ts @@ -31,6 +31,8 @@ /* eslint-disable max-len */ import { ClearFlagBit, Color, LoadOp, ShaderStageFlagBit, StoreOp, Type, UniformBlock } from '../../gfx'; import { Light } from '../../render-scene/scene'; +import { OutputArchive, InputArchive } from './archive'; +import { saveColor, loadColor, saveUniformBlock, loadUniformBlock } from './serialization'; export enum UpdateFrequency { PER_INSTANCE, @@ -449,3 +451,205 @@ export class MovePair { targetFirstSlice: number; targetPlaneSlice: number; } + +export function saveRasterView (ar: OutputArchive, v: RasterView) { + ar.writeString(v.slotName); + ar.writeNumber(v.accessType); + ar.writeNumber(v.attachmentType); + ar.writeNumber(v.loadOp); + ar.writeNumber(v.storeOp); + ar.writeNumber(v.clearFlags); + saveColor(ar, v.clearColor); +} + +export function loadRasterView (ar: InputArchive, v: RasterView) { + v.slotName = ar.readString(); + v.accessType = ar.readNumber(); + v.attachmentType = ar.readNumber(); + v.loadOp = ar.readNumber(); + v.storeOp = ar.readNumber(); + v.clearFlags = ar.readNumber(); + loadColor(ar, v.clearColor); +} + +export function saveComputeView (ar: OutputArchive, v: ComputeView) { + ar.writeString(v.name); + ar.writeNumber(v.accessType); + ar.writeNumber(v.clearFlags); + saveColor(ar, v.clearColor); + ar.writeNumber(v.clearValueType); +} + +export function loadComputeView (ar: InputArchive, v: ComputeView) { + v.name = ar.readString(); + v.accessType = ar.readNumber(); + v.clearFlags = ar.readNumber(); + loadColor(ar, v.clearColor); + v.clearValueType = ar.readNumber(); +} + +export function saveLightInfo (ar: OutputArchive, v: LightInfo) { + // skip, v.light: Light + ar.writeNumber(v.level); +} + +export function loadLightInfo (ar: InputArchive, v: LightInfo) { + // skip, v.light: Light + v.level = ar.readNumber(); +} + +export function saveDescriptor (ar: OutputArchive, v: Descriptor) { + ar.writeNumber(v.type); + ar.writeNumber(v.count); +} + +export function loadDescriptor (ar: InputArchive, v: Descriptor) { + v.type = ar.readNumber(); + v.count = ar.readNumber(); +} + +export function saveDescriptorBlock (ar: OutputArchive, v: DescriptorBlock) { + ar.writeNumber(v.descriptors.size); // Map + for (const [k1, v1] of v.descriptors) { + ar.writeString(k1); + saveDescriptor(ar, v1); + } + ar.writeNumber(v.uniformBlocks.size); // Map + for (const [k1, v1] of v.uniformBlocks) { + ar.writeString(k1); + saveUniformBlock(ar, v1); + } + ar.writeNumber(v.capacity); + ar.writeNumber(v.count); +} + +export function loadDescriptorBlock (ar: InputArchive, v: DescriptorBlock) { + let sz = 0; + sz = ar.readNumber(); // Map + for (let i1 = 0; i1 !== sz; ++i1) { + const k1 = ar.readString(); + const v1 = new Descriptor(); + loadDescriptor(ar, v1); + v.descriptors.set(k1, v1); + } + sz = ar.readNumber(); // Map + for (let i1 = 0; i1 !== sz; ++i1) { + const k1 = ar.readString(); + const v1 = new UniformBlock(); + loadUniformBlock(ar, v1); + v.uniformBlocks.set(k1, v1); + } + v.capacity = ar.readNumber(); + v.count = ar.readNumber(); +} + +export function saveDescriptorBlockFlattened (ar: OutputArchive, v: DescriptorBlockFlattened) { + ar.writeNumber(v.descriptorNames.length); // string[] + for (const v1 of v.descriptorNames) { + ar.writeString(v1); + } + ar.writeNumber(v.uniformBlockNames.length); // string[] + for (const v1 of v.uniformBlockNames) { + ar.writeString(v1); + } + ar.writeNumber(v.descriptors.length); // Descriptor[] + for (const v1 of v.descriptors) { + saveDescriptor(ar, v1); + } + ar.writeNumber(v.uniformBlocks.length); // UniformBlock[] + for (const v1 of v.uniformBlocks) { + saveUniformBlock(ar, v1); + } + ar.writeNumber(v.capacity); + ar.writeNumber(v.count); +} + +export function loadDescriptorBlockFlattened (ar: InputArchive, v: DescriptorBlockFlattened) { + let sz = 0; + sz = ar.readNumber(); // string[] + v.descriptorNames.length = sz; + for (let i1 = 0; i1 !== sz; ++i1) { + v.descriptorNames[i1] = ar.readString(); + } + sz = ar.readNumber(); // string[] + v.uniformBlockNames.length = sz; + for (let i1 = 0; i1 !== sz; ++i1) { + v.uniformBlockNames[i1] = ar.readString(); + } + sz = ar.readNumber(); // Descriptor[] + v.descriptors.length = sz; + for (let i1 = 0; i1 !== sz; ++i1) { + const v1 = new Descriptor(); + loadDescriptor(ar, v1); + v.descriptors[i1] = v1; + } + sz = ar.readNumber(); // UniformBlock[] + v.uniformBlocks.length = sz; + for (let i1 = 0; i1 !== sz; ++i1) { + const v1 = new UniformBlock(); + loadUniformBlock(ar, v1); + v.uniformBlocks[i1] = v1; + } + v.capacity = ar.readNumber(); + v.count = ar.readNumber(); +} + +export function saveDescriptorBlockIndex (ar: OutputArchive, v: DescriptorBlockIndex) { + ar.writeNumber(v.updateFrequency); + ar.writeNumber(v.parameterType); + ar.writeNumber(v.descriptorType); + ar.writeNumber(v.visibility); +} + +export function loadDescriptorBlockIndex (ar: InputArchive, v: DescriptorBlockIndex) { + v.updateFrequency = ar.readNumber(); + v.parameterType = ar.readNumber(); + v.descriptorType = ar.readNumber(); + v.visibility = ar.readNumber(); +} + +export function saveCopyPair (ar: OutputArchive, v: CopyPair) { + ar.writeString(v.source); + ar.writeString(v.target); + ar.writeNumber(v.mipLevels); + ar.writeNumber(v.numSlices); + ar.writeNumber(v.sourceMostDetailedMip); + ar.writeNumber(v.sourceFirstSlice); + ar.writeNumber(v.sourcePlaneSlice); + ar.writeNumber(v.targetMostDetailedMip); + ar.writeNumber(v.targetFirstSlice); + ar.writeNumber(v.targetPlaneSlice); +} + +export function loadCopyPair (ar: InputArchive, v: CopyPair) { + v.source = ar.readString(); + v.target = ar.readString(); + v.mipLevels = ar.readNumber(); + v.numSlices = ar.readNumber(); + v.sourceMostDetailedMip = ar.readNumber(); + v.sourceFirstSlice = ar.readNumber(); + v.sourcePlaneSlice = ar.readNumber(); + v.targetMostDetailedMip = ar.readNumber(); + v.targetFirstSlice = ar.readNumber(); + v.targetPlaneSlice = ar.readNumber(); +} + +export function saveMovePair (ar: OutputArchive, v: MovePair) { + ar.writeString(v.source); + ar.writeString(v.target); + ar.writeNumber(v.mipLevels); + ar.writeNumber(v.numSlices); + ar.writeNumber(v.targetMostDetailedMip); + ar.writeNumber(v.targetFirstSlice); + ar.writeNumber(v.targetPlaneSlice); +} + +export function loadMovePair (ar: InputArchive, v: MovePair) { + v.source = ar.readString(); + v.target = ar.readString(); + v.mipLevels = ar.readNumber(); + v.numSlices = ar.readNumber(); + v.targetMostDetailedMip = ar.readNumber(); + v.targetFirstSlice = ar.readNumber(); + v.targetPlaneSlice = ar.readNumber(); +} diff --git a/native/CMakeLists.txt b/native/CMakeLists.txt index abeb2d7ced6..91de546f16a 100644 --- a/native/CMakeLists.txt +++ b/native/CMakeLists.txt @@ -1278,6 +1278,7 @@ cocos_source_files( cocos/renderer/pipeline/custom/LayoutGraphNames.h cocos/renderer/pipeline/custom/LayoutGraphReflection.cpp cocos/renderer/pipeline/custom/LayoutGraphReflection.h + cocos/renderer/pipeline/custom/LayoutGraphSerialization.h cocos/renderer/pipeline/custom/LayoutGraphTypes.cpp cocos/renderer/pipeline/custom/LayoutGraphTypes.h cocos/renderer/pipeline/custom/NativeExecutor.cpp diff --git a/native/cocos/renderer/pipeline/custom/ArchiveTypes.h b/native/cocos/renderer/pipeline/custom/ArchiveTypes.h index 2bb12b9abf8..848afd5b9ec 100644 --- a/native/cocos/renderer/pipeline/custom/ArchiveTypes.h +++ b/native/cocos/renderer/pipeline/custom/ArchiveTypes.h @@ -30,6 +30,7 @@ */ // clang-format off #pragma once +#include #include #include "cocos/renderer/pipeline/custom/ArchiveFwd.h" @@ -49,6 +50,7 @@ class OutputArchive { virtual void writeBool(bool value) = 0; virtual void writeNumber(double value) = 0; virtual void writeString(std::string_view value) = 0; + virtual boost::container::pmr::memory_resource* scratch() const noexcept = 0; }; class InputArchive { @@ -63,6 +65,7 @@ class InputArchive { virtual bool readBool() = 0; virtual double readNumber() = 0; virtual std::string_view readString() = 0; + virtual boost::container::pmr::memory_resource* scratch() const noexcept = 0; }; } // namespace render diff --git a/native/cocos/renderer/pipeline/custom/LayoutGraphFwd.h b/native/cocos/renderer/pipeline/custom/LayoutGraphFwd.h index 06759deade0..3b81207401a 100644 --- a/native/cocos/renderer/pipeline/custom/LayoutGraphFwd.h +++ b/native/cocos/renderer/pipeline/custom/LayoutGraphFwd.h @@ -54,6 +54,10 @@ struct DescriptorBlockData; struct DescriptorSetLayoutData; struct DescriptorSetData; struct PipelineLayoutData; +struct ShaderBindingData; +struct ShaderLayoutData; +struct TechniqueData; +struct EffectData; struct ShaderProgramData; struct RenderStageData; struct RenderPhaseData; diff --git a/native/cocos/renderer/pipeline/custom/LayoutGraphNames.h b/native/cocos/renderer/pipeline/custom/LayoutGraphNames.h index a828de82a61..3c63405d849 100644 --- a/native/cocos/renderer/pipeline/custom/LayoutGraphNames.h +++ b/native/cocos/renderer/pipeline/custom/LayoutGraphNames.h @@ -50,6 +50,10 @@ inline const char* getName(const DescriptorBlockData& /*v*/) noexcept { return " inline const char* getName(const DescriptorSetLayoutData& /*v*/) noexcept { return "DescriptorSetLayoutData"; } inline const char* getName(const DescriptorSetData& /*v*/) noexcept { return "DescriptorSetData"; } inline const char* getName(const PipelineLayoutData& /*v*/) noexcept { return "PipelineLayoutData"; } +inline const char* getName(const ShaderBindingData& /*v*/) noexcept { return "ShaderBindingData"; } +inline const char* getName(const ShaderLayoutData& /*v*/) noexcept { return "ShaderLayoutData"; } +inline const char* getName(const TechniqueData& /*v*/) noexcept { return "TechniqueData"; } +inline const char* getName(const EffectData& /*v*/) noexcept { return "EffectData"; } inline const char* getName(const ShaderProgramData& /*v*/) noexcept { return "ShaderProgramData"; } inline const char* getName(const RenderStageData& /*v*/) noexcept { return "RenderStageData"; } inline const char* getName(const RenderPhaseData& /*v*/) noexcept { return "RenderPhaseData"; } diff --git a/native/cocos/renderer/pipeline/custom/LayoutGraphSerialization.h b/native/cocos/renderer/pipeline/custom/LayoutGraphSerialization.h new file mode 100644 index 00000000000..6d0b7a6ba41 --- /dev/null +++ b/native/cocos/renderer/pipeline/custom/LayoutGraphSerialization.h @@ -0,0 +1,250 @@ +/**************************************************************************** + Copyright (c) 2021-2022 Xiamen Yaji Software Co., Ltd. + + http://www.cocos.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated engine source code (the "Software"), a limited, + worldwide, royalty-free, non-assignable, revocable and non-exclusive license + to use Cocos Creator solely to develop games on your target platforms. You shall + not use Cocos Creator software for developing other software or tools that's + used for developing games. You are not granted to publish, distribute, + sublicense, and/or sell copies of Cocos Creator. + + The software or tools in this License Agreement are licensed, not sold. + Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +****************************************************************************/ + +/** + * ========================= !DO NOT CHANGE THE FOLLOWING SECTION MANUALLY! ========================= + * The following section is auto-generated. + * ========================= !DO NOT CHANGE THE FOLLOWING SECTION MANUALLY! ========================= + */ +#pragma once +#include +#include "cocos/renderer/pipeline/custom/ArchiveTypes.h" +#include "cocos/renderer/pipeline/custom/LayoutGraphTypes.h" +#include "cocos/renderer/pipeline/custom/Range.h" +#include "cocos/renderer/pipeline/custom/RenderCommonSerialization.h" +#include "cocos/renderer/pipeline/custom/SerializationUtils.h" + +namespace cc { + +namespace render { + +inline void save(OutputArchive& ar, const DescriptorDB& v) { + save(ar, v.blocks); +} + +inline void load(InputArchive& ar, DescriptorDB& v) { + load(ar, v.blocks); +} + +inline void save(OutputArchive& ar, const RenderPhase& v) { + save(ar, v.shaders); +} + +inline void load(InputArchive& ar, RenderPhase& v) { + load(ar, v.shaders); +} + +inline void save(OutputArchive& ar, const LayoutGraph& g) { + using Graph = LayoutGraph; + using VertexT = Graph::vertex_descriptor; + using SizeT = Graph::vertices_size_type; + static_assert(std::is_same_v); + + const auto numVertices = num_vertices(g); + const auto numEdges = num_edges(g); + save(ar, numVertices); + save(ar, numEdges); + save(ar, static_cast(g.stages.size())); + save(ar, static_cast(g.phases.size())); + for (const auto& v : makeRange(vertices(g))) { + save(ar, get(LayoutGraph::Name, g, v)); + } +} + +inline void save(OutputArchive& ar, const UniformData& v) { + save(ar, v.uniformID); + save(ar, v.uniformType); + save(ar, v.offset); + save(ar, v.size); +} + +inline void load(InputArchive& ar, UniformData& v) { + load(ar, v.uniformID); + load(ar, v.uniformType); + load(ar, v.offset); + load(ar, v.size); +} + +inline void save(OutputArchive& ar, const UniformBlockData& v) { + save(ar, v.bufferSize); + save(ar, v.uniforms); +} + +inline void load(InputArchive& ar, UniformBlockData& v) { + load(ar, v.bufferSize); + load(ar, v.uniforms); +} + +inline void save(OutputArchive& ar, const NameLocalID& v) { + save(ar, v.value); +} + +inline void load(InputArchive& ar, NameLocalID& v) { + load(ar, v.value); +} + +inline void save(OutputArchive& ar, const DescriptorData& v) { + save(ar, v.descriptorID); + save(ar, v.count); +} + +inline void load(InputArchive& ar, DescriptorData& v) { + load(ar, v.descriptorID); + load(ar, v.count); +} + +inline void save(OutputArchive& ar, const DescriptorBlockData& v) { + save(ar, v.type); + save(ar, v.visibility); + save(ar, v.offset); + save(ar, v.capacity); + save(ar, v.descriptors); +} + +inline void load(InputArchive& ar, DescriptorBlockData& v) { + load(ar, v.type); + load(ar, v.visibility); + load(ar, v.offset); + load(ar, v.capacity); + load(ar, v.descriptors); +} + +inline void save(OutputArchive& ar, const DescriptorSetLayoutData& v) { + save(ar, v.slot); + save(ar, v.capacity); + save(ar, v.descriptorBlocks); + save(ar, v.uniformBlocks); +} + +inline void load(InputArchive& ar, DescriptorSetLayoutData& v) { + load(ar, v.slot); + load(ar, v.capacity); + load(ar, v.descriptorBlocks); + load(ar, v.uniformBlocks); +} + +inline void save(OutputArchive& ar, const DescriptorSetData& v) { + save(ar, v.descriptorSetLayoutData); + save(ar, v.descriptorSetLayoutInfo); + // skip, descriptorSetLayout: IntrusivePtr + // skip, descriptorSet: IntrusivePtr +} + +inline void load(InputArchive& ar, DescriptorSetData& v) { + load(ar, v.descriptorSetLayoutData); + load(ar, v.descriptorSetLayoutInfo); + // skip, descriptorSetLayout: IntrusivePtr + // skip, descriptorSet: IntrusivePtr +} + +inline void save(OutputArchive& ar, const PipelineLayoutData& v) { + save(ar, v.descriptorSets); +} + +inline void load(InputArchive& ar, PipelineLayoutData& v) { + load(ar, v.descriptorSets); +} + +inline void save(OutputArchive& ar, const ShaderBindingData& v) { + save(ar, v.descriptorBindings); +} + +inline void load(InputArchive& ar, ShaderBindingData& v) { + load(ar, v.descriptorBindings); +} + +inline void save(OutputArchive& ar, const ShaderLayoutData& v) { + save(ar, v.layoutData); + save(ar, v.bindingData); +} + +inline void load(InputArchive& ar, ShaderLayoutData& v) { + load(ar, v.layoutData); + load(ar, v.bindingData); +} + +inline void save(OutputArchive& ar, const TechniqueData& v) { + save(ar, v.passes); +} + +inline void load(InputArchive& ar, TechniqueData& v) { + load(ar, v.passes); +} + +inline void save(OutputArchive& ar, const EffectData& v) { + save(ar, v.techniques); +} + +inline void load(InputArchive& ar, EffectData& v) { + load(ar, v.techniques); +} + +inline void save(OutputArchive& ar, const ShaderProgramData& v) { + save(ar, v.layout); +} + +inline void load(InputArchive& ar, ShaderProgramData& v) { + load(ar, v.layout); +} + +inline void save(OutputArchive& ar, const RenderStageData& v) { + save(ar, v.descriptorVisibility); +} + +inline void load(InputArchive& ar, RenderStageData& v) { + load(ar, v.descriptorVisibility); +} + +inline void save(OutputArchive& ar, const RenderPhaseData& v) { + save(ar, v.rootSignature); + save(ar, v.shaderPrograms); + save(ar, v.shaderIndex); +} + +inline void load(InputArchive& ar, RenderPhaseData& v) { + load(ar, v.rootSignature); + load(ar, v.shaderPrograms); + load(ar, v.shaderIndex); +} + +inline void save(OutputArchive& ar, const LayoutGraphData& g) { + using Graph = LayoutGraphData; + using VertexT = Graph::vertex_descriptor; + using SizeT = Graph::vertices_size_type; + static_assert(std::is_same_v); + + const auto numVertices = num_vertices(g); + const auto numEdges = num_edges(g); + save(ar, numVertices); + save(ar, numEdges); + save(ar, static_cast(g.stages.size())); + save(ar, static_cast(g.phases.size())); + for (const auto& v : makeRange(vertices(g))) { + } +} + +} // namespace render + +} // namespace cc diff --git a/native/cocos/renderer/pipeline/custom/LayoutGraphTypes.cpp b/native/cocos/renderer/pipeline/custom/LayoutGraphTypes.cpp index 20e9538476b..61a2f79de43 100644 --- a/native/cocos/renderer/pipeline/custom/LayoutGraphTypes.cpp +++ b/native/cocos/renderer/pipeline/custom/LayoutGraphTypes.cpp @@ -168,6 +168,32 @@ PipelineLayoutData::PipelineLayoutData(const allocator_type& alloc) noexcept PipelineLayoutData::PipelineLayoutData(PipelineLayoutData&& rhs, const allocator_type& alloc) : descriptorSets(std::move(rhs.descriptorSets), alloc) {} +ShaderBindingData::ShaderBindingData(const allocator_type& alloc) noexcept +: descriptorBindings(alloc) {} + +ShaderBindingData::ShaderBindingData(ShaderBindingData&& rhs, const allocator_type& alloc) +: descriptorBindings(std::move(rhs.descriptorBindings), alloc) {} + +ShaderLayoutData::ShaderLayoutData(const allocator_type& alloc) noexcept +: layoutData(alloc), + bindingData(alloc) {} + +ShaderLayoutData::ShaderLayoutData(ShaderLayoutData&& rhs, const allocator_type& alloc) +: layoutData(std::move(rhs.layoutData), alloc), + bindingData(std::move(rhs.bindingData), alloc) {} + +TechniqueData::TechniqueData(const allocator_type& alloc) noexcept +: passes(alloc) {} + +TechniqueData::TechniqueData(TechniqueData&& rhs, const allocator_type& alloc) +: passes(std::move(rhs.passes), alloc) {} + +EffectData::EffectData(const allocator_type& alloc) noexcept +: techniques(alloc) {} + +EffectData::EffectData(EffectData&& rhs, const allocator_type& alloc) +: techniques(std::move(rhs.techniques), alloc) {} + ShaderProgramData::ShaderProgramData(const allocator_type& alloc) noexcept : layout(alloc) {} @@ -201,6 +227,7 @@ LayoutGraphData::LayoutGraphData(const allocator_type& alloc) noexcept attributeIndex(alloc), constantIndex(alloc), shaderLayoutIndex(alloc), + effects(alloc), pathIndex(alloc) {} LayoutGraphData::LayoutGraphData(LayoutGraphData&& rhs, const allocator_type& alloc) @@ -214,6 +241,7 @@ LayoutGraphData::LayoutGraphData(LayoutGraphData&& rhs, const allocator_type& al attributeIndex(std::move(rhs.attributeIndex), alloc), constantIndex(std::move(rhs.constantIndex), alloc), shaderLayoutIndex(std::move(rhs.shaderLayoutIndex), alloc), + effects(std::move(rhs.effects), alloc), pathIndex(std::move(rhs.pathIndex), alloc) {} // ContinuousContainer diff --git a/native/cocos/renderer/pipeline/custom/LayoutGraphTypes.h b/native/cocos/renderer/pipeline/custom/LayoutGraphTypes.h index 3b5fb3e328f..e44f042ac81 100644 --- a/native/cocos/renderer/pipeline/custom/LayoutGraphTypes.h +++ b/native/cocos/renderer/pipeline/custom/LayoutGraphTypes.h @@ -397,6 +397,75 @@ struct PipelineLayoutData { ccstd::pmr::map descriptorSets; }; +struct ShaderBindingData { + using allocator_type = boost::container::pmr::polymorphic_allocator; + allocator_type get_allocator() const noexcept { // NOLINT + return {descriptorBindings.get_allocator().resource()}; + } + + ShaderBindingData(const allocator_type& alloc) noexcept; // NOLINT + ShaderBindingData(ShaderBindingData&& rhs, const allocator_type& alloc); + + ShaderBindingData(ShaderBindingData&& rhs) noexcept = default; + ShaderBindingData(ShaderBindingData const& rhs) = delete; + ShaderBindingData& operator=(ShaderBindingData&& rhs) = default; + ShaderBindingData& operator=(ShaderBindingData const& rhs) = delete; + + PmrFlatMap descriptorBindings; +}; + +struct ShaderLayoutData { + using allocator_type = boost::container::pmr::polymorphic_allocator; + allocator_type get_allocator() const noexcept { // NOLINT + return {layoutData.get_allocator().resource()}; + } + + ShaderLayoutData(const allocator_type& alloc) noexcept; // NOLINT + ShaderLayoutData(ShaderLayoutData&& rhs, const allocator_type& alloc); + + ShaderLayoutData(ShaderLayoutData&& rhs) noexcept = default; + ShaderLayoutData(ShaderLayoutData const& rhs) = delete; + ShaderLayoutData& operator=(ShaderLayoutData&& rhs) = default; + ShaderLayoutData& operator=(ShaderLayoutData const& rhs) = delete; + + ccstd::pmr::map layoutData; + ccstd::pmr::map bindingData; +}; + +struct TechniqueData { + using allocator_type = boost::container::pmr::polymorphic_allocator; + allocator_type get_allocator() const noexcept { // NOLINT + return {passes.get_allocator().resource()}; + } + + TechniqueData(const allocator_type& alloc) noexcept; // NOLINT + TechniqueData(TechniqueData&& rhs, const allocator_type& alloc); + + TechniqueData(TechniqueData&& rhs) noexcept = default; + TechniqueData(TechniqueData const& rhs) = delete; + TechniqueData& operator=(TechniqueData&& rhs) = default; + TechniqueData& operator=(TechniqueData const& rhs) = delete; + + ccstd::pmr::vector passes; +}; + +struct EffectData { + using allocator_type = boost::container::pmr::polymorphic_allocator; + allocator_type get_allocator() const noexcept { // NOLINT + return {techniques.get_allocator().resource()}; + } + + EffectData(const allocator_type& alloc) noexcept; // NOLINT + EffectData(EffectData&& rhs, const allocator_type& alloc); + + EffectData(EffectData&& rhs) noexcept = default; + EffectData(EffectData const& rhs) = delete; + EffectData& operator=(EffectData&& rhs) = default; + EffectData& operator=(EffectData const& rhs) = delete; + + ccstd::pmr::map techniques; +}; + struct ShaderProgramData { using allocator_type = boost::container::pmr::polymorphic_allocator; allocator_type get_allocator() const noexcept { // NOLINT @@ -621,6 +690,7 @@ struct LayoutGraphData { PmrFlatMap attributeIndex; PmrFlatMap constantIndex; PmrFlatMap shaderLayoutIndex; + PmrFlatMap effects; // Path PmrTransparentMap pathIndex; }; diff --git a/native/cocos/renderer/pipeline/custom/RenderCommonSerialization.h b/native/cocos/renderer/pipeline/custom/RenderCommonSerialization.h index 66ba539ad6a..ef530ff08ce 100644 --- a/native/cocos/renderer/pipeline/custom/RenderCommonSerialization.h +++ b/native/cocos/renderer/pipeline/custom/RenderCommonSerialization.h @@ -30,6 +30,7 @@ */ #pragma once #include "cocos/renderer/pipeline/custom/ArchiveTypes.h" +#include "cocos/renderer/pipeline/custom/Range.h" #include "cocos/renderer/pipeline/custom/RenderCommonTypes.h" #include "cocos/renderer/pipeline/custom/SerializationUtils.h" diff --git a/native/cocos/renderer/pipeline/custom/SerializationUtils.h b/native/cocos/renderer/pipeline/custom/SerializationUtils.h index 5b3cade2bf3..1594ee3111e 100644 --- a/native/cocos/renderer/pipeline/custom/SerializationUtils.h +++ b/native/cocos/renderer/pipeline/custom/SerializationUtils.h @@ -24,10 +24,15 @@ ****************************************************************************/ #pragma once +#include +#include #include #include +#include #include #include +#include +#include #include #include "cocos/renderer/gfx-base/GFXDef-common.h" #include "cocos/renderer/pipeline/custom/ArchiveTypes.h" @@ -51,6 +56,7 @@ template || std::is_integral_v || std::is_floating_point_v, bool> = false> void save(OutputArchive& ar, const T& v) { + static_assert(!std::is_enum_v || sizeof(T) <= sizeof(uint32_t)); // enum can only be 1, 2, 4 bytes ar.writeNumber(static_cast(v)); } @@ -59,6 +65,7 @@ template || std::is_integral_v || std::is_floating_point_v, bool> = false> void load(InputArchive& ar, T& v) { + static_assert(!std::is_enum_v || sizeof(T) <= sizeof(uint32_t)); // enum can only be 1, 2, 4 bytes v = static_cast(ar.readNumber()); } @@ -92,6 +99,107 @@ void load(InputArchive& ar, std::vector& vec) { } } +// set +template +void save(OutputArchive& ar, const std::set& set) { + save(ar, static_cast(set.size())); + for (const auto& value : set) { + save(ar, value); + } +} + +template , bool> = false> +void load(InputArchive& ar, std::set& set) { + uint32_t sz = 0; + load(ar, sz); + for (uint32_t i = 0; i != sz; ++i) { + Value value; + load(ar, value); + set.emplace(std::move(value)); + } +} + +template , bool> = false> +void load(InputArchive& ar, std::set& set) { + uint32_t sz = 0; + load(ar, sz); + for (uint32_t i = 0; i != sz; ++i) { + Value value(set.get_allocator()); + load(ar, value); + set.emplace(std::move(value)); + } +} + +// flat_set +template +void save(OutputArchive& ar, const boost::container::flat_set& set) { + save(ar, static_cast(set.size())); + for (const auto& value : set) { + save(ar, value); + } +} + +template , bool> = false> +void load(InputArchive& ar, boost::container::flat_set& set) { + uint32_t sz = 0; + load(ar, sz); + set.reserve(sz); + for (uint32_t i = 0; i != sz; ++i) { + Value value; + load(ar, value); + set.emplace(std::move(value)); + } +} + +template , bool> = false> +void load(InputArchive& ar, boost::container::flat_set& set) { + uint32_t sz = 0; + load(ar, sz); + set.reserve(sz); + for (uint32_t i = 0; i != sz; ++i) { + Value value(set.get_allocator()); + load(ar, value); + set.emplace(std::move(value)); + } +} + +// unordered_set +template +void save(OutputArchive& ar, const std::unordered_set& set) { + save(ar, static_cast(set.size())); + for (const auto& value : set) { + save(ar, value); + } +} + +template , bool> = false> +void load(InputArchive& ar, std::unordered_set& set) { + uint32_t sz = 0; + load(ar, sz); + for (uint32_t i = 0; i != sz; ++i) { + Value value; + load(ar, value); + set.emplace(std::move(value)); + } +} + +template , bool> = false> +void load(InputArchive& ar, std::unordered_set& set) { + uint32_t sz = 0; + load(ar, sz); + for (uint32_t i = 0; i != sz; ++i) { + Value value(set.get_allocator()); + load(ar, value); + set.emplace(std::move(value)); + } +} + // map template void save(OutputArchive& ar, const std::map& map) { @@ -162,19 +270,215 @@ void load(InputArchive& ar, std::map& map) { } } +// flat_map +template +void save(OutputArchive& ar, const boost::container::flat_map& map) { + save(ar, static_cast(map.size())); + for (const auto& [key, value] : map) { + save(ar, key); + save(ar, value); + } +} + +template , bool> = false, + std::enable_if_t, bool> = false> +void load(InputArchive& ar, boost::container::flat_map& map) { + uint32_t sz = 0; + load(ar, sz); + map.reserve(sz); + for (uint32_t i = 0; i != sz; ++i) { + Key key; + Value value; + load(ar, key); + load(ar, value); + map.emplace(std::move(key), std::move(value)); + } +} + +template , bool> = false, + std::enable_if_t, bool> = false> +void load(InputArchive& ar, boost::container::flat_map& map) { + uint32_t sz = 0; + load(ar, sz); + map.reserve(sz); + for (uint32_t i = 0; i != sz; ++i) { + Key key(map.get_allocator()); + Value value; + load(ar, key); + load(ar, value); + map.emplace(std::move(key), std::move(value)); + } +} + +template , bool> = false, + std::enable_if_t, bool> = false> +void load(InputArchive& ar, boost::container::flat_map& map) { + uint32_t sz = 0; + load(ar, sz); + map.reserve(sz); + for (uint32_t i = 0; i != sz; ++i) { + Key key; + Value value(map.get_allocator()); + load(ar, key); + load(ar, value); + map.emplace(std::move(key), std::move(value)); + } +} + +template , bool> = false, + std::enable_if_t, bool> = false> +void load(InputArchive& ar, boost::container::flat_map& map) { + uint32_t sz = 0; + load(ar, sz); + map.reserve(sz); + for (uint32_t i = 0; i != sz; ++i) { + Key key(map.get_allocator()); + Value value(map.get_allocator()); + load(ar, key); + load(ar, value); + map.emplace(std::move(key), std::move(value)); + } +} + +// unordered_map +template +void save(OutputArchive& ar, const std::unordered_map& map) { + save(ar, static_cast(map.size())); + for (const auto& [key, value] : map) { + save(ar, key); + save(ar, value); + } +} + +template , bool> = false, + std::enable_if_t, bool> = false> +void load(InputArchive& ar, std::unordered_map& map) { + uint32_t sz = 0; + load(ar, sz); + for (uint32_t i = 0; i != sz; ++i) { + Key key; + Value value; + load(ar, key); + load(ar, value); + map.emplace(std::move(key), std::move(value)); + } +} + +template , bool> = false, + std::enable_if_t, bool> = false> +void load(InputArchive& ar, std::unordered_map& map) { + uint32_t sz = 0; + load(ar, sz); + for (uint32_t i = 0; i != sz; ++i) { + Key key(map.get_allocator()); + Value value; + load(ar, key); + load(ar, value); + map.emplace(std::move(key), std::move(value)); + } +} + +template , bool> = false, + std::enable_if_t, bool> = false> +void load(InputArchive& ar, std::unordered_map& map) { + uint32_t sz = 0; + load(ar, sz); + for (uint32_t i = 0; i != sz; ++i) { + Key key; + Value value(map.get_allocator()); + load(ar, key); + load(ar, value); + map.emplace(std::move(key), std::move(value)); + } +} + +template , bool> = false, + std::enable_if_t, bool> = false> +void load(InputArchive& ar, std::unordered_map& map) { + uint32_t sz = 0; + load(ar, sz); + for (uint32_t i = 0; i != sz; ++i) { + Key key(map.get_allocator()); + Value value(map.get_allocator()); + load(ar, key); + load(ar, value); + map.emplace(std::move(key), std::move(value)); + } +} + // gfx inline void save(OutputArchive& ar, const gfx::Color& v) { - ar.writeNumber(v.x); - ar.writeNumber(v.y); - ar.writeNumber(v.z); - ar.writeNumber(v.w); + save(ar, v.x); + save(ar, v.y); + save(ar, v.z); + save(ar, v.w); } inline void load(InputArchive& ar, gfx::Color& v) { - v.x = static_cast(ar.readNumber()); - v.y = static_cast(ar.readNumber()); - v.z = static_cast(ar.readNumber()); - v.w = static_cast(ar.readNumber()); + load(ar, v.x); + load(ar, v.y); + load(ar, v.z); + load(ar, v.w); +} + +inline void save(OutputArchive& ar, const gfx::Uniform& v) { + save(ar, v.name); + save(ar, v.type); + save(ar, v.count); +} + +inline void load(InputArchive& ar, gfx::Uniform& v) { + load(ar, v.name); + load(ar, v.type); + load(ar, v.count); +} + +inline void save(OutputArchive& ar, const gfx::UniformBlock& v) { + save(ar, v.set); + save(ar, v.binding); + save(ar, v.name); + save(ar, v.members); + save(ar, v.count); +} + +inline void load(InputArchive& ar, gfx::UniformBlock& v) { + load(ar, v.set); + load(ar, v.binding); + load(ar, v.name); + load(ar, v.members); + load(ar, v.count); +} + +inline void save(OutputArchive& ar, const gfx::DescriptorSetLayoutBinding& v) { + save(ar, v.binding); + save(ar, v.descriptorType); + save(ar, v.count); + save(ar, v.stageFlags); + // skip immutableSamplers: SamplerList +} + +inline void load(InputArchive& ar, gfx::DescriptorSetLayoutBinding& v) { + load(ar, v.binding); + load(ar, v.descriptorType); + load(ar, v.count); + load(ar, v.stageFlags); + // skip immutableSamplers: SamplerList +} + +inline void save(OutputArchive& ar, const gfx::DescriptorSetLayoutInfo& v) { + save(ar, v.bindings); +} + +inline void load(InputArchive& ar, gfx::DescriptorSetLayoutInfo& v) { + load(ar, v.bindings); } } // namespace render From 1099d95c0b1826a85b36e486498f1cf2762e7599 Mon Sep 17 00:00:00 2001 From: mmyduckx <308303735@qq.com> Date: Mon, 17 Oct 2022 16:52:26 +0800 Subject: [PATCH 029/829] fix node.targetOff on native (#13063) --- cocos/scene-graph/node.jsb.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/cocos/scene-graph/node.jsb.ts b/cocos/scene-graph/node.jsb.ts index 17a8a3069bb..91a928161fa 100644 --- a/cocos/scene-graph/node.jsb.ts +++ b/cocos/scene-graph/node.jsb.ts @@ -318,6 +318,7 @@ nodeProto.hasEventListener = function (type: string, callback?, target?: unknown }; nodeProto.targetOff = function (target: string | unknown) { + this._eventProcessor.targetOff(target); // Check for event mask reset if ((this._eventMask & TRANSFORM_ON) && !this._eventProcessor.hasEventListener(NodeEventType.TRANSFORM_CHANGED)) { this._eventMask &= ~TRANSFORM_ON; From a93676d994850fe61642f91ce61996ea1efd74f5 Mon Sep 17 00:00:00 2001 From: hyde zhou Date: Mon, 17 Oct 2022 17:03:28 +0800 Subject: [PATCH 030/829] [develop] custom-pipeline update (#13062) --- cocos/rendering/custom/executor.ts | 65 +++- cocos/rendering/custom/types.ts | 2 + cocos/rendering/custom/web-layout-exporter.ts | 363 ++++++++++++++++++ cocos/rendering/custom/web-layout-graph.ts | 336 +--------------- cocos/rendering/custom/web-pipeline.ts | 17 +- 5 files changed, 429 insertions(+), 354 deletions(-) create mode 100644 cocos/rendering/custom/web-layout-exporter.ts diff --git a/cocos/rendering/custom/executor.ts b/cocos/rendering/custom/executor.ts index 87183996213..8c7771e57bc 100644 --- a/cocos/rendering/custom/executor.ts +++ b/cocos/rendering/custom/executor.ts @@ -651,6 +651,13 @@ class DeviceRenderPass { } } } + getGlobalDescData (context: ExecutorContext) { + const stageId = context.layoutGraph.locateChild(context.layoutGraph.nullVertex(), 'default'); + assert(stageId !== 0xFFFFFFFF); + const layout = context.layoutGraph.getLayout(stageId); + const layoutData = layout.descriptorSets.get(UpdateFrequency.PER_PASS)!; + return layoutData; + } genQuadVertexData (surfaceTransform: SurfaceTransform, renderArea: Rect) : Float32Array { const vbData = new Float32Array(4 * 4); @@ -732,8 +739,9 @@ class DeviceRenderPass { cmdBuff.endRenderPass(); } - private _clearInstance () { + private _clear () { for (const [cam, info] of this.submitMap) { + info.additiveLight?.clear(); const it = info.instances.values(); let res = it.next(); while (!res.done) { res.value.clear(); @@ -745,7 +753,7 @@ class DeviceRenderPass { } postPass () { - this._clearInstance(); + this._clear(); this.submitMap.clear(); for (const queue of this._deviceQueues) { queue.postRecord(); @@ -953,28 +961,40 @@ class DevicePreSceneTask extends WebSceneTask { && this.graphScene.scene!.flags & SceneFlags.SHADOW_CASTER; } + private _bindDescValue (desc: DescriptorSet, binding: number, value) { + if (value instanceof Buffer) { + desc.bindBuffer(binding, value); + } else if (value instanceof Texture) { + desc.bindTexture(binding, value); + } else if (value instanceof Sampler) { + desc.bindSampler(binding, value); + } + } + + private _bindGlobalDesc (context: ExecutorContext, binding: number, value) { + const layoutData = this._currentQueue.devicePass.getGlobalDescData(context)!; + this._bindDescValue(layoutData.descriptorSet!, binding, value); + const it = context.pipeline.globalDSManager.descriptorSetMap.values(); + let res = it.next(); + while (!res.done) { + const descriptorSet = res.value; + this._bindDescValue(descriptorSet, binding, value); + res = it.next(); + } + } + private _bindDescriptor (context: ExecutorContext, descId: number, value) { - const layoutData = this._getGlobalDescData(context)!; + const layoutData = this._currentQueue.devicePass.getGlobalDescData(context)!; // find descriptor binding for (const block of layoutData.descriptorSetLayoutData.descriptorBlocks) { for (let i = 0; i !== block.descriptors.length; ++i) { if (descId === block.descriptors[i].descriptorID) { - if (value instanceof Buffer) layoutData.descriptorSet!.bindBuffer(block.offset + i, value); - else if (value instanceof Texture) layoutData.descriptorSet!.bindTexture(block.offset + i, value); - else if (value instanceof Sampler) layoutData.descriptorSet!.bindSampler(block.offset + i, value); + this._bindGlobalDesc(context, block.offset + i, value); } } } } - private _getGlobalDescData (context: ExecutorContext) { - const stageId = context.layoutGraph.locateChild(context.layoutGraph.nullVertex(), 'default'); - assert(stageId !== 0xFFFFFFFF); - const layout = context.layoutGraph.getLayout(stageId); - const layoutData = layout.descriptorSets.get(UpdateFrequency.PER_PASS)!; - return layoutData; - } - protected _updateGlobal (context: ExecutorContext, data: RenderData) { const constants = data.constants; const samplers = data.samplers; @@ -994,7 +1014,14 @@ class DevicePreSceneTask extends WebSceneTask { for (const [key, value] of samplers) { this._bindDescriptor(context, key, value); } - this._getGlobalDescData(context).descriptorSet!.update(); + this._currentQueue.devicePass.getGlobalDescData(context).descriptorSet!.update(); + const it = context.pipeline.globalDSManager.descriptorSetMap.values(); + let res = it.next(); + while (!res.done) { + const descriptorSet = res.value; + descriptorSet.update(); + res = it.next(); + } } protected _setMainLightShadowTex (context: ExecutorContext, data: RenderData) { @@ -1205,12 +1232,8 @@ class DeviceSceneTask extends WebSceneTask { } private _endBindBlitUbo (devicePass) { - const stageId = devicePass.context.layoutGraph.locateChild(devicePass.context.layoutGraph.nullVertex(), 'default'); - assert(stageId !== 0xFFFFFFFF); - const layout = devicePass.context.layoutGraph.getLayout(stageId); - const layoutData = layout.descriptorSets.get(UpdateFrequency.PER_PASS); this.visitor.bindDescriptorSet(SetIndex.GLOBAL, - layoutData.descriptorSet!); + devicePass.getGlobalDescData(devicePass.context).descriptorSet!); } private _recordBlit () { @@ -1293,6 +1316,8 @@ class DeviceSceneTask extends WebSceneTask { if (graphSceneData.flags & SceneFlags.DEFAULT_LIGHTING) { this._recordAdditiveLights(); } + this.visitor.bindDescriptorSet(SetIndex.GLOBAL, + devicePass.getGlobalDescData(devicePass.context).descriptorSet!); if (graphSceneData.flags & SceneFlags.PLANAR_SHADOW) { this._recordPlanarShadows(); } diff --git a/cocos/rendering/custom/types.ts b/cocos/rendering/custom/types.ts index b5f88ccd3a0..cefb6c7f683 100644 --- a/cocos/rendering/custom/types.ts +++ b/cocos/rendering/custom/types.ts @@ -29,6 +29,7 @@ * ========================= !DO NOT CHANGE THE FOLLOWING SECTION MANUALLY! ========================= */ /* eslint-disable max-len */ +import { ccclass } from '../../core/data/decorators'; import { ClearFlagBit, Color, LoadOp, ShaderStageFlagBit, StoreOp, Type, UniformBlock } from '../../gfx'; import { Light } from '../../render-scene/scene'; import { OutputArchive, InputArchive } from './archive'; @@ -367,6 +368,7 @@ export class DescriptorBlock { count = 0; } +@ccclass('cc.DescriptorBlockFlattened') export class DescriptorBlockFlattened { readonly descriptorNames: string[] = []; readonly uniformBlockNames: string[] = []; diff --git a/cocos/rendering/custom/web-layout-exporter.ts b/cocos/rendering/custom/web-layout-exporter.ts new file mode 100644 index 00000000000..f8af0e89479 --- /dev/null +++ b/cocos/rendering/custom/web-layout-exporter.ts @@ -0,0 +1,363 @@ +/* eslint-disable @typescript-eslint/restrict-plus-operands */ +/**************************************************************************** + Copyright (c) 2021-2022 Xiamen Yaji Software Co., Ltd. + + http://www.cocos.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated engine source code (the "Software"), a limited, + worldwide, royalty-free, non-assignable, revocable and non-exclusive license + to use Cocos Creator solely to develop games on your target platforms. You shall + not use Cocos Creator software for developing other software or tools that's + used for developing games. You are not granted to publish, distribute, + sublicense, and/or sell copies of Cocos Creator. + + The software or tools in this License Agreement are licensed, not sold. + Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +****************************************************************************/ + +import { EffectAsset } from '../../asset/assets'; +import { ShaderStageFlagBit } from '../../gfx'; +import { EffectData, ShaderBindingData, ShaderLayoutData, TechniqueData } from './layout-graph'; +import { DescriptorTypeOrder, UpdateFrequency } from './types'; + +const isArr = (origin: any): boolean => { + const str = '[object Array]'; + return Object.prototype.toString.call(origin) === str; +}; + +const deepClone = (origin: T, target?: Record | T): T => { + const tar = target || {}; + + for (const key in origin) { + if (Object.prototype.hasOwnProperty.call(origin, key)) { + if (typeof origin[key] === 'object' && origin[key] !== null) { + tar[key] = isArr(origin[key]) ? [] : {}; + deepClone(origin[key], tar[key]); + } else { + tar[key] = origin[key]; + } + } + } + + return tar as T; +}; + +export class WebLayoutExporter { + private layoutGraph; + + constructor (graph) { + this.layoutGraph = graph; + } + + private addBinding (storedMap: Map, freq: UpdateFrequency, flag: ShaderStageFlagBit, type: DescriptorTypeOrder) { + const key = `${freq.toString()}|${flag.toString()}|${type.toString()}`; + let stored = storedMap.get(key); + if (stored === undefined) { + storedMap.set(key, 0); + stored = storedMap.get(key); + } else { + stored += 1; + storedMap.set(key, stored); + } + return stored; + } + + private setBinding (bindingData: ShaderBindingData, name: string, binding: number | undefined) { + const shaderKey = this.layoutGraph.data.attributeIndex.get(name); + if (shaderKey && binding !== undefined) { + bindingData.descriptorBindings.set(shaderKey, binding); + } + } + + public exportEffect (effect: EffectAsset) { + let parent = ''; + if (effect.name.indexOf('bloom') !== -1 + || effect.name.indexOf('post-process') !== -1 + || effect.name.indexOf('smaa') !== -1 + || effect.name.indexOf('toonmap') !== -1) { + parent = 'post'; + } else if (effect.name.indexOf('deferred') !== -1) { + parent = 'deferred'; + } else { + parent = 'default'; + } + + let effectData: EffectData | undefined = this.layoutGraph.data.effects.get(effect.name); + if (effectData === undefined) { + effectData = new EffectData(); + this.layoutGraph.data.effects.set(effect.name, effectData); + } + + for (let i = 0; i < effect.techniques.length; ++i) { + const tech = effect.techniques[i]; + const techName = tech.name ? tech.name : i.toString(); + + let techData: TechniqueData | undefined = effectData.techniques.get(techName); + if (techData === undefined) { + techData = new TechniqueData(); + effectData.techniques.set(techName, techData); + } + + techData.passes.splice(0, techData.passes.length); + for (let j = 0; j < tech.passes.length; ++j) { + const shaderData: ShaderLayoutData = new ShaderLayoutData(); + techData.passes.push(shaderData); + + const pass = tech.passes[j]; + const passPhase = pass.phase; + let phaseName = ''; + if (passPhase) { + phaseName = passPhase.toString(); + } else { + phaseName = `${parent}_`; + } + const shaderName = pass.program; + let passShader; + for (let s = 0; s < effect.shaders.length; ++s) { + const shader = effect.shaders[s]; + const name = shader.name; + if (name === shaderName) { + passShader = {}; + deepClone(shader, passShader); + break; + } + } + if (passShader) { + pass.shader = passShader; + const shader = pass.shader; + if (shader === undefined) { + continue; + } + const storedMap = new Map(); + + const vid = this.layoutGraph.data.locate(`/${parent}/${phaseName}`); + const layout = this.layoutGraph.data.getLayout(vid); + const dss = layout.descriptorSets.get(UpdateFrequency.PER_BATCH); + + if (dss) { + const dsData = dss.descriptorSetLayoutData.descriptorBlocks; + + const bindingData = new ShaderBindingData(); + shaderData.layoutData.set(UpdateFrequency.PER_BATCH, dss.descriptorSetLayoutData); + shaderData.bindingData.set(UpdateFrequency.PER_BATCH, bindingData); + + for (let t = 0; t < shader.samplerTextures.length; ++t) { + const samplerTexInfo: EffectAsset.ISamplerTextureInfo = shader.samplerTextures[t]; + const flag = samplerTexInfo.stageFlags; + const type = DescriptorTypeOrder.SAMPLER_TEXTURE; + for (let d = 0; d < dsData.length; ++d) { + const ds = dsData[d]; + if (ds.visibility === flag && ds.type === type) { + const stored = this.addBinding(storedMap, UpdateFrequency.PER_BATCH, flag, type); + + if (stored !== undefined) { + samplerTexInfo.binding = ds.offset + stored; + } else { + samplerTexInfo.binding = ds.offset; + } + + this.setBinding(bindingData, samplerTexInfo.name, samplerTexInfo.binding); + break; + } + } + } + + for (let s = 0; s < shader.samplers.length; ++s) { + const samplerInfo: EffectAsset.ISamplerInfo = shader.samplers[s]; + const flag = samplerInfo.stageFlags; + const type = DescriptorTypeOrder.SAMPLER; + for (let d = 0; d < dsData.length; ++d) { + const ds = dsData[d]; + if (ds.visibility === flag && ds.type === type) { + const stored = this.addBinding(storedMap, UpdateFrequency.PER_BATCH, flag, type); + + if (stored !== undefined) { + samplerInfo.binding = ds.offset + stored; + } else { + samplerInfo.binding = ds.offset; + } + + this.setBinding(bindingData, samplerInfo.name, samplerInfo.binding); + break; + } + } + } + + for (let t = 0; t < shader.textures.length; ++t) { + const texInfo: EffectAsset.ITextureInfo = shader.textures[t]; + const flag = texInfo.stageFlags; + const type = DescriptorTypeOrder.TEXTURE; + for (let d = 0; d < dsData.length; ++d) { + const ds = dsData[d]; + if (ds.visibility === flag && ds.type === type) { + const stored = this.addBinding(storedMap, UpdateFrequency.PER_BATCH, flag, type); + + if (stored !== undefined) { + texInfo.binding = ds.offset + stored; + } else { + texInfo.binding = ds.offset; + } + + this.setBinding(bindingData, texInfo.name, texInfo.binding); + break; + } + } + } + + for (let b = 0; b < shader.buffers.length; ++b) { + const bufferInfo: EffectAsset.IBufferInfo = shader.buffers[b]; + const flag = bufferInfo.stageFlags; + const type = DescriptorTypeOrder.STORAGE_BUFFER; + for (let d = 0; d < dsData.length; ++d) { + const ds = dsData[d]; + if (ds.visibility === flag && ds.type === type) { + const stored = this.addBinding(storedMap, UpdateFrequency.PER_BATCH, flag, type); + + if (stored !== undefined) { + bufferInfo.binding = ds.offset + stored; + } else { + bufferInfo.binding = ds.offset; + } + + this.setBinding(bindingData, bufferInfo.name, bufferInfo.binding); + break; + } + } + } + + for (let m = 0; m < shader.images.length; +m) { + const imageInfo: EffectAsset.IImageInfo = shader.images[m]; + const flag = imageInfo.stageFlags; + const type = DescriptorTypeOrder.STORAGE_IMAGE; + for (let d = 0; d < dsData.length; ++d) { + const ds = dsData[d]; + if (ds.visibility === flag && ds.type === type) { + const stored = this.addBinding(storedMap, UpdateFrequency.PER_BATCH, flag, type); + + if (stored !== undefined) { + imageInfo.binding = ds.offset + stored; + } else { + imageInfo.binding = ds.offset; + } + + this.setBinding(bindingData, imageInfo.name, imageInfo.binding); + break; + } + } + } + + for (let si = 0; si < shader.subpassInputs.length; ++si) { + const subpassInfo: EffectAsset.IInputAttachmentInfo = shader.subpassInputs[si]; + const flag = subpassInfo.stageFlags; + const type = DescriptorTypeOrder.INPUT_ATTACHMENT; + for (let d = 0; d < dsData.length; ++d) { + const ds = dsData[d]; + if (ds.visibility === flag && ds.type === type) { + const stored = this.addBinding(storedMap, UpdateFrequency.PER_BATCH, flag, type); + + if (stored !== undefined) { + subpassInfo.binding = ds.offset + stored; + } else { + subpassInfo.binding = ds.offset; + } + + this.setBinding(bindingData, subpassInfo.name, subpassInfo.binding); + break; + } + } + } + + // builtin + for (let k = 0; k < shader.builtins.locals.samplerTextures.length; ++k) { + const descriptor = shader.builtins.locals.samplerTextures[k]; + const type = DescriptorTypeOrder.SAMPLER_TEXTURE; + for (let d = 0; d < dsData.length; ++d) { + const ds = dsData[d]; + let flag = ShaderStageFlagBit.VERTEX; + if ((descriptor.name === 'cc_jointTexture' || descriptor.name === 'cc_PositionDisplacements' + || descriptor.name === 'cc_realtimeJoint' || descriptor.name === 'cc_NormalDisplacements' + || descriptor.name === 'cc_TangentDisplacements')) { + flag = ShaderStageFlagBit.VERTEX; + } else { + flag = ShaderStageFlagBit.FRAGMENT; + } + if (ds.visibility === flag && ds.type === type) { + const stored = this.addBinding(storedMap, UpdateFrequency.PER_BATCH, flag, type); + + if (stored !== undefined) { + descriptor.binding = ds.offset + stored; + } else { + descriptor.binding = ds.offset; + } + + this.setBinding(bindingData, descriptor.name, descriptor.binding); + } + } + } + + for (let k = 0; k < shader.builtins.locals.images.length; ++k) { + const descriptor = shader.builtins.locals.images[k]; + const flag = ShaderStageFlagBit.COMPUTE; + const type = DescriptorTypeOrder.SAMPLER_TEXTURE; + for (let d = 0; d < dsData.length; ++d) { + const ds = dsData[d]; + if (ds.visibility === flag && ds.type === type) { + const stored = this.addBinding(storedMap, UpdateFrequency.PER_BATCH, flag, type); + + if (stored !== undefined) { + descriptor.binding = ds.offset + stored; + } else { + descriptor.binding = ds.offset; + } + + this.setBinding(bindingData, descriptor.name, descriptor.binding); + } + } + } + } + + const pid = this.layoutGraph.data.locate(`/${parent}`); + const pLayout = this.layoutGraph.data.getLayout(pid); + const pss = pLayout.descriptorSets.get(UpdateFrequency.PER_PASS); + + if (pss) { + const dsData = pss.descriptorSetLayoutData.descriptorBlocks; + + const bindingData = new ShaderBindingData(); + shaderData.layoutData.set(UpdateFrequency.PER_PASS, pss.descriptorSetLayoutData); + shaderData.bindingData.set(UpdateFrequency.PER_PASS, bindingData); + + for (let g = 0; g < shader.builtins.globals.samplerTextures.length; ++g) { + const descriptor = shader.builtins.globals.samplerTextures[g]; + const flag = ShaderStageFlagBit.FRAGMENT; + const type = DescriptorTypeOrder.SAMPLER_TEXTURE; + for (let d = 0; d < dsData.length; ++d) { + const ds = dsData[d]; + if (ds.visibility === flag && ds.type === type) { + const stored = this.addBinding(storedMap, UpdateFrequency.PER_PASS, flag, type); + + if (stored !== undefined) { + descriptor.binding = ds.offset + stored; + } else { + descriptor.binding = ds.offset; + } + + this.setBinding(bindingData, descriptor.name, descriptor.binding); + } + } + } + } + } + } + } + } +} diff --git a/cocos/rendering/custom/web-layout-graph.ts b/cocos/rendering/custom/web-layout-graph.ts index abc2f89e72b..f546afaa38c 100644 --- a/cocos/rendering/custom/web-layout-graph.ts +++ b/cocos/rendering/custom/web-layout-graph.ts @@ -2,37 +2,16 @@ import { DEBUG } from 'internal:constants'; import { EffectAsset } from '../../asset/assets'; import { ccclass } from '../../core/data/decorators'; // eslint-disable-next-line max-len -import { DescriptorSetInfo, DescriptorSetLayout, DescriptorSetLayoutBinding, DescriptorSetLayoutInfo, DescriptorType, DESCRIPTOR_BUFFER_TYPE, Device, ShaderStageFlagBit, Type, UniformBlock } from '../../gfx'; +import { DescriptorSetInfo, DescriptorSetLayout, DescriptorSetLayoutBinding, DescriptorSetLayoutInfo, DescriptorType, Device, ShaderStageFlagBit, Type, UniformBlock } from '../../gfx'; import { VectorGraphColorMap } from './effect'; import { DefaultVisitor, depthFirstSearch } from './graph'; // eslint-disable-next-line max-len import { LayoutGraphData, PipelineLayoutData, LayoutGraphDataValue, RenderStageData, RenderPhaseData, DescriptorSetLayoutData, DescriptorSetData, DescriptorBlockData, DescriptorData } from './layout-graph'; import { LayoutGraphBuilder } from './pipeline'; +import { WebLayoutExporter } from './web-layout-exporter'; import { getUpdateFrequencyName, DescriptorBlockIndex, DescriptorTypeOrder, Descriptor, getDescriptorTypeOrderName, DescriptorBlockFlattened, UpdateFrequency } from './types'; -const isArr = (origin: any): boolean => { - const str = '[object Array]'; - return Object.prototype.toString.call(origin) === str; -}; - -const deepClone = (origin: T, target?: Record | T): T => { - const tar = target || {}; - - for (const key in origin) { - if (Object.prototype.hasOwnProperty.call(origin, key)) { - if (typeof origin[key] === 'object' && origin[key] !== null) { - tar[key] = isArr(origin[key]) ? [] : {}; - deepClone(origin[key], tar[key]); - } else { - tar[key] = origin[key]; - } - } - } - - return tar as T; -}; - function getName (type: Type): string { switch (type) { case Type.UNKNOWN: return 'Unknown'; @@ -212,10 +191,12 @@ class PrintVisitor extends DefaultVisitor { export class WebLayoutGraphBuilder implements LayoutGraphBuilder { private _data: LayoutGraphData; private _device: Device | null; + private _exporter: WebLayoutExporter; constructor (deviceIn: Device | null, dataIn: LayoutGraphData) { this._device = deviceIn; this._data = dataIn; + this._exporter = new WebLayoutExporter(this); } private getGfxType (type: DescriptorTypeOrder): DescriptorType | null { @@ -446,313 +427,6 @@ export class WebLayoutGraphBuilder implements LayoutGraphBuilder { } public exportEffect (effect: EffectAsset) { - let parent = ''; - if (effect.name.indexOf('bloom') !== -1 - || effect.name.indexOf('post-process') !== -1 - || effect.name.indexOf('smaa') !== -1 - || effect.name.indexOf('toonmap') !== -1) { - parent = 'post'; - } else if (effect.name.indexOf('deferred') !== -1) { - parent = 'deferred'; - } else { - parent = 'default'; - } - - for (let i = 0; i < effect.techniques.length; ++i) { - const tech = effect.techniques[i]; - for (let j = 0; j < tech.passes.length; ++j) { - const pass = tech.passes[j]; - const passPhase = pass.phase; - let phaseName = ''; - if (passPhase) { - phaseName = passPhase.toString(); - } else { - phaseName = `${parent}_`; - } - const shaderName = pass.program; - let passShader; - for (let s = 0; s < effect.shaders.length; ++s) { - const shader = effect.shaders[s]; - const name = shader.name; - if (name === shaderName) { - passShader = {}; - deepClone(shader, passShader); - break; - } - } - if (passShader) { - pass.shader = passShader; - const shader = pass.shader; - if (shader === undefined) { - continue; - } - const storedMap = new Map(); - - const vid = this.data.locate(`/${parent}/${phaseName}`); - const layout = this.data.getLayout(vid); - const dss = layout.descriptorSets.get(UpdateFrequency.PER_BATCH); - - if (dss) { - const dsData = dss.descriptorSetLayoutData.descriptorBlocks; - - for (let t = 0; t < shader.samplerTextures.length; ++t) { - const samplerTexInfo: EffectAsset.ISamplerTextureInfo = shader.samplerTextures[t]; - const flag = samplerTexInfo.stageFlags; - const type = DescriptorTypeOrder.SAMPLER_TEXTURE; - for (let d = 0; d < dsData.length; ++d) { - const ds = dsData[d]; - if (ds.visibility === flag && ds.type === type) { - const key = `${UpdateFrequency.PER_BATCH.toString()}|${flag.toString()}|${type.toString()}`; - let stored = storedMap.get(key); - if (stored === undefined) { - storedMap.set(key, 0); - stored = storedMap.get(key); - } else { - stored += 1; - storedMap.set(key, stored); - } - - if (stored !== undefined) { - samplerTexInfo.binding = ds.offset + stored; - } else { - samplerTexInfo.binding = ds.offset; - } - break; - } - } - } - - for (let s = 0; s < shader.samplers.length; ++s) { - const samplerInfo: EffectAsset.ISamplerInfo = shader.samplers[s]; - const flag = samplerInfo.stageFlags; - const type = DescriptorTypeOrder.SAMPLER; - for (let d = 0; d < dsData.length; ++d) { - const ds = dsData[d]; - if (ds.visibility === flag && ds.type === type) { - const key = `${UpdateFrequency.PER_BATCH.toString()}|${flag.toString()}|${type.toString()}`; - let stored = storedMap.get(key); - if (stored === undefined) { - storedMap.set(key, 0); - stored = storedMap.get(key); - } else { - stored += 1; - storedMap.set(key, stored); - } - - if (stored !== undefined) { - samplerInfo.binding = ds.offset + stored; - } else { - samplerInfo.binding = ds.offset; - } - break; - } - } - } - - for (let t = 0; t < shader.textures.length; ++t) { - const texInfo: EffectAsset.ITextureInfo = shader.textures[t]; - const flag = texInfo.stageFlags; - const type = DescriptorTypeOrder.TEXTURE; - for (let d = 0; d < dsData.length; ++d) { - const ds = dsData[d]; - if (ds.visibility === flag && ds.type === type) { - const key = `${UpdateFrequency.PER_BATCH.toString()}|${flag.toString()}|${type.toString()}`; - let stored = storedMap.get(key); - if (stored === undefined) { - storedMap.set(key, 0); - stored = storedMap.get(key); - } else { - stored += 1; - storedMap.set(key, stored); - } - - if (stored !== undefined) { - texInfo.binding = ds.offset + stored; - } else { - texInfo.binding = ds.offset; - } - break; - } - } - } - - for (let b = 0; b < shader.buffers.length; ++b) { - const bufferInfo: EffectAsset.IBufferInfo = shader.buffers[b]; - const flag = bufferInfo.stageFlags; - const type = DescriptorTypeOrder.STORAGE_BUFFER; - for (let d = 0; d < dsData.length; ++d) { - const ds = dsData[d]; - if (ds.visibility === flag && ds.type === type) { - const key = `${UpdateFrequency.PER_BATCH.toString()}|${flag.toString()}|${type.toString()}`; - let stored = storedMap.get(key); - if (stored === undefined) { - storedMap.set(key, 0); - stored = storedMap.get(key); - } else { - stored += 1; - storedMap.set(key, stored); - } - - if (stored !== undefined) { - bufferInfo.binding = ds.offset + stored; - } else { - bufferInfo.binding = ds.offset; - } - break; - } - } - } - - for (let m = 0; m < shader.images.length; +m) { - const imageInfo: EffectAsset.IImageInfo = shader.images[m]; - const flag = imageInfo.stageFlags; - const type = DescriptorTypeOrder.STORAGE_IMAGE; - for (let d = 0; d < dsData.length; ++d) { - const ds = dsData[d]; - if (ds.visibility === flag && ds.type === type) { - const key = `${UpdateFrequency.PER_BATCH.toString()}|${flag.toString()}|${type.toString()}`; - let stored = storedMap.get(key); - if (stored === undefined) { - storedMap.set(key, 0); - stored = storedMap.get(key); - } else { - stored += 1; - storedMap.set(key, stored); - } - - if (stored !== undefined) { - imageInfo.binding = ds.offset + stored; - } else { - imageInfo.binding = ds.offset; - } - break; - } - } - } - - for (let si = 0; si < shader.subpassInputs.length; ++si) { - const subpassInfo: EffectAsset.IInputAttachmentInfo = shader.subpassInputs[si]; - const flag = subpassInfo.stageFlags; - const type = DescriptorTypeOrder.INPUT_ATTACHMENT; - for (let d = 0; d < dsData.length; ++d) { - const ds = dsData[d]; - if (ds.visibility === flag && ds.type === type) { - const key = `${UpdateFrequency.PER_BATCH.toString()}|${flag.toString()}|${type.toString()}`; - let stored = storedMap.get(key); - if (stored === undefined) { - storedMap.set(key, 0); - stored = storedMap.get(key); - } else { - stored += 1; - storedMap.set(key, stored); - } - - if (stored !== undefined) { - subpassInfo.binding = ds.offset + stored; - } else { - subpassInfo.binding = ds.offset; - } - break; - } - } - } - - // builtin - for (let k = 0; k < shader.builtins.locals.samplerTextures.length; ++k) { - const descriptor = shader.builtins.locals.samplerTextures[k]; - const type = DescriptorTypeOrder.SAMPLER_TEXTURE; - for (let d = 0; d < dsData.length; ++d) { - const ds = dsData[d]; - let flag = ShaderStageFlagBit.VERTEX; - if ((descriptor.name === 'cc_jointTexture' || descriptor.name === 'cc_PositionDisplacements' - || descriptor.name === 'cc_realtimeJoint' || descriptor.name === 'cc_NormalDisplacements' - || descriptor.name === 'cc_TangentDisplacements')) { - flag = ShaderStageFlagBit.VERTEX; - } else { - flag = ShaderStageFlagBit.FRAGMENT; - } - if (ds.visibility === flag && ds.type === type) { - const key = `${UpdateFrequency.PER_BATCH.toString()}|${flag.toString()}|${type.toString()}`; - let stored = storedMap.get(key); - if (stored === undefined) { - storedMap.set(key, 0); - stored = storedMap.get(key); - } else { - stored += 1; - storedMap.set(key, stored); - } - - if (stored !== undefined) { - descriptor.binding = ds.offset + stored; - } else { - descriptor.binding = ds.offset; - } - } - } - } - - for (let k = 0; k < shader.builtins.locals.images.length; ++k) { - const descriptor = shader.builtins.locals.images[k]; - const flag = ShaderStageFlagBit.COMPUTE; - const type = DescriptorTypeOrder.SAMPLER_TEXTURE; - for (let d = 0; d < dsData.length; ++d) { - const ds = dsData[d]; - if (ds.visibility === flag && ds.type === type) { - const key = `${UpdateFrequency.PER_BATCH.toString()}|${flag.toString()}|${type.toString()}`; - let stored = storedMap.get(key); - if (stored === undefined) { - storedMap.set(key, 0); - stored = storedMap.get(key); - } else { - stored += 1; - storedMap.set(key, stored); - } - - if (stored !== undefined) { - descriptor.binding = ds.offset + stored; - } else { - descriptor.binding = ds.offset; - } - } - } - } - } - - const pid = this.data.locate(`/${parent}`); - const pLayout = this.data.getLayout(pid); - const pss = pLayout.descriptorSets.get(UpdateFrequency.PER_PASS); - - if (pss) { - const dsData = pss.descriptorSetLayoutData.descriptorBlocks; - - for (let g = 0; g < shader.builtins.globals.samplerTextures.length; ++g) { - const descriptor = shader.builtins.globals.samplerTextures[g]; - const flag = ShaderStageFlagBit.FRAGMENT; - const type = DescriptorTypeOrder.SAMPLER_TEXTURE; - for (let d = 0; d < dsData.length; ++d) { - const ds = dsData[d]; - if (ds.visibility === flag && ds.type === type) { - const key = `${UpdateFrequency.PER_PASS.toString()}|${flag.toString()}|${type.toString()}`; - let stored = storedMap.get(key); - if (stored === undefined) { - storedMap.set(key, 0); - stored = storedMap.get(key); - } else { - stored += 1; - storedMap.set(key, stored); - } - - if (stored !== undefined) { - descriptor.binding = ds.offset + stored; - } else { - descriptor.binding = ds.offset; - } - } - } - } - } - } - } - } + this._exporter.exportEffect(effect); } } diff --git a/cocos/rendering/custom/web-pipeline.ts b/cocos/rendering/custom/web-pipeline.ts index efd185c82d9..9132a2932e0 100644 --- a/cocos/rendering/custom/web-pipeline.ts +++ b/cocos/rendering/custom/web-pipeline.ts @@ -26,7 +26,7 @@ /* eslint-disable max-len */ import { systemInfo } from 'pal/system-info'; import { Color, Buffer, DescriptorSetLayout, Device, Feature, Format, FormatFeatureBit, Sampler, Swapchain, Texture, ClearFlagBit, DescriptorSet, deviceManager, Viewport, API, CommandBuffer, Type, SamplerInfo, Filter, Address } from '../../gfx/index'; -import { Mat4, Quat, Vec2, Vec3, Vec4 } from '../../core/math'; +import { Mat4, Quat, toRadian, Vec2, Vec3, Vec4 } from '../../core/math'; import { ComputeView, CopyPair, LightInfo, LightingMode, MovePair, QueueHint, RasterView, ResourceDimension, ResourceFlags, ResourceResidency, SceneFlags, UpdateFrequency } from './types'; import { Blit, ClearView, ComputePass, CopyPass, Dispatch, ManagedResource, MovePass, RasterPass, RenderData, RenderGraph, RenderGraphComponent, RenderGraphValue, RenderQueue, RenderSwapchain, ResourceDesc, ResourceGraph, ResourceGraphValue, ResourceStates, ResourceTraits, SceneData } from './render-graph'; import { ComputePassBuilder, ComputeQueueBuilder, CopyPassBuilder, LayoutGraphBuilder, MovePassBuilder, Pipeline, PipelineBuilder, RasterPassBuilder, RasterQueueBuilder, SceneTransversal } from './pipeline'; @@ -400,8 +400,8 @@ function setCameraUBOValues (setter: WebSetter, setter.setMat4('cc_matProjInv', camera.matProjInv); setter.setMat4('cc_matViewProj', camera.matViewProj); setter.setMat4('cc_matViewProjInv', camera.matViewProjInv); - setter.setVec4('cc_cameraPos', new Vec4(camera.position.x, camera.position.y, camera.position.z, 0.0)); - setter.setVec4('cc_surfaceTransform', new Vec4(camera.surfaceTransform, 0.0, 0.0, 0.0)); + setter.setVec4('cc_cameraPos', new Vec4(camera.position.x, camera.position.y, camera.position.z, pipeline.getCombineSignY())); + setter.setVec4('cc_surfaceTransform', new Vec4(camera.surfaceTransform, 0.0, Math.cos(toRadian(skybox.getRotationAngle())), Math.sin(toRadian(skybox.getRotationAngle())))); setter.setVec4('cc_screenScale', new Vec4(cfg.shadingScale, cfg.shadingScale, 1.0 / cfg.shadingScale, 1.0 / cfg.shadingScale)); setter.setVec4('cc_exposure', new Vec4(camera.exposure, 1.0 / camera.exposure, cfg.isHDR ? 1.0 : 0.0, 1.0 / Camera.standardExposureValue)); @@ -789,6 +789,15 @@ export class WebPipeline implements Pipeline { return layoutData; } + private _initCombineSignY () { + const device = this._device; + this._combineSignY = (device.capabilities.screenSpaceSignY * 0.5 + 0.5) << 1 | (device.capabilities.clipSpaceSignY * 0.5 + 0.5); + } + + public getCombineSignY () { + return this._combineSignY; + } + public activate (swapchain: Swapchain): boolean { this._device = deviceManager.gfxDevice; this._globalDSManager = new GlobalDSManager(this._device); @@ -799,6 +808,7 @@ export class WebPipeline implements Pipeline { this._generateConstantMacros(false); this._pipelineSceneData.activate(this._device); this._pipelineUBO.activate(this._device, this); + this._initCombineSignY(); const isFloat = supportsR32FloatTexture(this._device) ? 0 : 1; this.setMacroInt('CC_SHADOWMAP_FORMAT', isFloat); // 0: SHADOWMAP_LINER_DEPTH_OFF, 1: SHADOWMAP_LINER_DEPTH_ON. @@ -1146,6 +1156,7 @@ export class WebPipeline implements Pipeline { private _forward!: ForwardPipelineBuilder; private _deferred!: DeferredPipelineBuilder; public builder: PipelineBuilder | null = null; + private _combineSignY = 0; // csm uniform used vectors count public static CSM_UNIFORM_VECTORS = 61; // all global uniform used vectors count From 8feaffbea39ff0877c79b9e515e58f5609df885f Mon Sep 17 00:00:00 2001 From: minggo Date: Tue, 18 Oct 2022 10:46:37 +0800 Subject: [PATCH 031/829] import gfx module instead (#13066) --- cocos/2d/renderer/i-batcher.ts | 3 +-- cocos/asset/assets/render-texture.ts | 3 +-- cocos/rendering/custom/define.ts | 2 +- cocos/rendering/custom/utils.ts | 2 +- cocos/rendering/custom/web-pipeline.ts | 2 +- editor/exports/offline-mappings.ts | 5 ++--- 6 files changed, 7 insertions(+), 10 deletions(-) diff --git a/cocos/2d/renderer/i-batcher.ts b/cocos/2d/renderer/i-batcher.ts index f1a7733c38c..5c5b697b3d3 100644 --- a/cocos/2d/renderer/i-batcher.ts +++ b/cocos/2d/renderer/i-batcher.ts @@ -1,7 +1,6 @@ import { CachedArray } from '../../core'; import { TextureBase } from '../../asset/assets/texture-base'; -import { Device } from '../../gfx'; -import { Attribute } from '../../gfx/base/define'; +import { Device, Attribute } from '../../gfx'; import { Camera } from '../../render-scene/scene/camera'; import { Model } from '../../render-scene/scene/model'; import { SpriteFrame } from '../assets/sprite-frame'; diff --git a/cocos/asset/assets/render-texture.ts b/cocos/asset/assets/render-texture.ts index 93e6dda85ee..4d96e274ab4 100644 --- a/cocos/asset/assets/render-texture.ts +++ b/cocos/asset/assets/render-texture.ts @@ -26,12 +26,11 @@ import { ccclass } from 'cc.decorator'; import { EDITOR, TEST } from 'internal:constants'; import { clamp } from '../../core/math/utils'; -import { Texture, ColorAttachment, DepthStencilAttachment, GeneralBarrierInfo, AccessFlagBit, RenderPassInfo, Format, deviceManager } from '../../gfx'; +import { Texture, ColorAttachment, DepthStencilAttachment, GeneralBarrierInfo, AccessFlagBit, RenderPassInfo, Format, deviceManager, BufferTextureCopy } from '../../gfx'; import { legacyCC } from '../../core/global-exports'; import { RenderWindow, IRenderWindowInfo } from '../../render-scene/core/render-window'; import { Root } from '../../root'; import { TextureBase } from './texture-base'; -import { BufferTextureCopy } from '../../gfx/base/define'; import { errorID } from '../../core/platform/debug'; export interface IRenderTextureCreateInfo { diff --git a/cocos/rendering/custom/define.ts b/cocos/rendering/custom/define.ts index 84ee37a35e5..a2009b8d2d4 100644 --- a/cocos/rendering/custom/define.ts +++ b/cocos/rendering/custom/define.ts @@ -1,4 +1,4 @@ -import { ClearFlagBit, Color, Format, LoadOp, Rect, StoreOp, Viewport } from '../../gfx/base/define'; +import { ClearFlagBit, Color, Format, LoadOp, Rect, StoreOp, Viewport } from '../../gfx'; import { Camera, CSMLevel, DirectionalLight, Light, LightType, ShadowType, SKYBOX_FLAG, SpotLight } from '../../render-scene/scene'; import { intersect, Sphere } from '../../core/geometry'; import { supportsR32FloatTexture } from '../define'; diff --git a/cocos/rendering/custom/utils.ts b/cocos/rendering/custom/utils.ts index e69a067a154..f85ba93b342 100644 --- a/cocos/rendering/custom/utils.ts +++ b/cocos/rendering/custom/utils.ts @@ -1,6 +1,6 @@ // https://stackoverflow.com/questions/56714318/how-to-disable-multiple-rules-for-eslint-nextline?msclkid=5d4c2298ba7911eca34d0ab30591752e -import { Type } from '../../gfx/base/define'; +import { Type } from '../../gfx'; // eslint-disable-next-line @typescript-eslint/no-unused-vars export function replacer (key: unknown, value: unknown) { diff --git a/cocos/rendering/custom/web-pipeline.ts b/cocos/rendering/custom/web-pipeline.ts index 9132a2932e0..33965e36a16 100644 --- a/cocos/rendering/custom/web-pipeline.ts +++ b/cocos/rendering/custom/web-pipeline.ts @@ -25,7 +25,7 @@ /* eslint-disable max-len */ import { systemInfo } from 'pal/system-info'; -import { Color, Buffer, DescriptorSetLayout, Device, Feature, Format, FormatFeatureBit, Sampler, Swapchain, Texture, ClearFlagBit, DescriptorSet, deviceManager, Viewport, API, CommandBuffer, Type, SamplerInfo, Filter, Address } from '../../gfx/index'; +import { Color, Buffer, DescriptorSetLayout, Device, Feature, Format, FormatFeatureBit, Sampler, Swapchain, Texture, ClearFlagBit, DescriptorSet, deviceManager, Viewport, API, CommandBuffer, Type, SamplerInfo, Filter, Address } from '../../gfx'; import { Mat4, Quat, toRadian, Vec2, Vec3, Vec4 } from '../../core/math'; import { ComputeView, CopyPair, LightInfo, LightingMode, MovePair, QueueHint, RasterView, ResourceDimension, ResourceFlags, ResourceResidency, SceneFlags, UpdateFrequency } from './types'; import { Blit, ClearView, ComputePass, CopyPass, Dispatch, ManagedResource, MovePass, RasterPass, RenderData, RenderGraph, RenderGraphComponent, RenderGraphValue, RenderQueue, RenderSwapchain, ResourceDesc, ResourceGraph, ResourceGraphValue, ResourceStates, ResourceTraits, SceneData } from './render-graph'; diff --git a/editor/exports/offline-mappings.ts b/editor/exports/offline-mappings.ts index 14e83eb82b7..1a45fe4ed21 100644 --- a/editor/exports/offline-mappings.ts +++ b/editor/exports/offline-mappings.ts @@ -3,11 +3,10 @@ import { Address, BlendFactor, BlendOp, ColorMask, ComparisonFunc, CullMode, DynamicStateFlagBit, Filter, Format, FormatInfos, FormatType, GetTypeSize, PolygonMode, PrimitiveMode, - ShadeModel, ShaderStageFlagBit, StencilOp, Type, DescriptorType, SamplerInfo, MemoryAccessBit, -} from '../../cocos/gfx/base/define'; + ShadeModel, ShaderStageFlagBit, StencilOp, Type, DescriptorType, SamplerInfo, MemoryAccessBit, Sampler, +} from '../../cocos/gfx'; import { RenderPassStage, RenderPriority, SetIndex } from '../../cocos/rendering/define'; import { murmurhash2_32_gc } from '../../cocos/core/algorithm/murmurhash2_gc'; -import { Sampler } from '../../cocos/gfx/base/states/sampler'; const typeMap: Record = {}; typeMap[typeMap.bool = Type.BOOL] = 'bool'; From 6321ef28d442b89ebc5df3fa8a43d631d6f63955 Mon Sep 17 00:00:00 2001 From: Zach Lee Date: Tue, 18 Oct 2022 10:52:07 +0800 Subject: [PATCH 032/829] Feat: gpuObjects use smart_ptr [vulkan][buffer, texture] (#13030) --- native/cocos/renderer/gfx-vulkan/VKBuffer.cpp | 108 ++++---- native/cocos/renderer/gfx-vulkan/VKBuffer.h | 11 +- .../renderer/gfx-vulkan/VKCommandBuffer.cpp | 2 +- .../cocos/renderer/gfx-vulkan/VKCommands.cpp | 41 ++- native/cocos/renderer/gfx-vulkan/VKCommands.h | 2 +- .../renderer/gfx-vulkan/VKDescriptorSet.cpp | 52 +++- native/cocos/renderer/gfx-vulkan/VKDevice.cpp | 86 +++--- native/cocos/renderer/gfx-vulkan/VKDevice.h | 16 +- .../cocos/renderer/gfx-vulkan/VKGPUObjects.h | 252 ++++++++++-------- .../renderer/gfx-vulkan/VKInputAssembler.cpp | 32 +++ .../cocos/renderer/gfx-vulkan/VKTexture.cpp | 137 ++++------ native/cocos/renderer/gfx-vulkan/VKTexture.h | 11 +- .../renderer/gfx-vulkan/states/VKSampler.cpp | 14 +- .../renderer/gfx-vulkan/states/VKSampler.h | 7 +- 14 files changed, 419 insertions(+), 352 deletions(-) diff --git a/native/cocos/renderer/gfx-vulkan/VKBuffer.cpp b/native/cocos/renderer/gfx-vulkan/VKBuffer.cpp index cb4db023f1d..a4cf66e3673 100644 --- a/native/cocos/renderer/gfx-vulkan/VKBuffer.cpp +++ b/native/cocos/renderer/gfx-vulkan/VKBuffer.cpp @@ -41,87 +41,81 @@ CCVKBuffer::~CCVKBuffer() { } void CCVKBuffer::doInit(const BufferInfo & /*info*/) { - _gpuBuffer = ccnew CCVKGPUBuffer; - _gpuBuffer->usage = _usage; - _gpuBuffer->memUsage = _memUsage; - _gpuBuffer->size = _size; - _gpuBuffer->stride = _stride; - _gpuBuffer->count = _count; - - if (hasFlag(_usage, BufferUsageBit::INDIRECT)) { - const size_t drawInfoCount = _size / sizeof(DrawInfo); - _gpuBuffer->indexedIndirectCmds.resize(drawInfoCount); - _gpuBuffer->indirectCmds.resize(drawInfoCount); - } - - cmdFuncCCVKCreateBuffer(CCVKDevice::getInstance(), _gpuBuffer); - CCVKDevice::getInstance()->getMemoryStatus().bufferSize += _size; - CC_PROFILE_MEMORY_INC(Buffer, _size); + createBuffer(_size, _count); - _gpuBufferView = ccnew CCVKGPUBufferView; - createBufferView(); + createBufferView(_size); } void CCVKBuffer::doInit(const BufferViewInfo &info) { auto *buffer = static_cast(info.buffer); _gpuBuffer = buffer->gpuBuffer(); - _gpuBufferView = ccnew CCVKGPUBufferView; - createBufferView(); + + createBufferView(_size); } -void CCVKBuffer::createBufferView() { +void CCVKBuffer::createBuffer(uint32_t size, uint32_t count) { + _gpuBuffer = ccnew CCVKGPUBuffer; + _gpuBuffer->size = size; + _gpuBuffer->count = count; + + _gpuBuffer->usage = _usage; + _gpuBuffer->memUsage = _memUsage; + _gpuBuffer->stride = _stride; + _gpuBuffer->init(); +} + +void CCVKBuffer::createBufferView(uint32_t range) { + _gpuBufferView = ccnew CCVKGPUBufferView; + _gpuBufferView->range = range; + _gpuBufferView->gpuBuffer = _gpuBuffer; _gpuBufferView->offset = _offset; - _gpuBufferView->range = _size; - if (_gpuBufferView->gpuBuffer->vkBuffer) { - CCVKDevice::getInstance()->gpuDescriptorHub()->update(_gpuBufferView); - } } void CCVKBuffer::doDestroy() { - if (_gpuBufferView) { - CCVKDevice::getInstance()->gpuDescriptorHub()->disengage(_gpuBufferView); - delete _gpuBufferView; - _gpuBufferView = nullptr; - } - - if (_gpuBuffer) { - if (!_isBufferView) { - CCVKDevice::getInstance()->gpuBufferHub()->erase(_gpuBuffer); - CCVKDevice::getInstance()->gpuRecycleBin()->collect(_gpuBuffer); - CCVKDevice::getInstance()->gpuBarrierManager()->cancel(_gpuBuffer); - delete _gpuBuffer; - CCVKDevice::getInstance()->getMemoryStatus().bufferSize -= _size; - CC_PROFILE_MEMORY_DEC(Buffer, _size); - } - _gpuBuffer = nullptr; - } + _gpuBufferView = nullptr; + _gpuBuffer = nullptr; } void CCVKBuffer::doResize(uint32_t size, uint32_t count) { - CCVKDevice::getInstance()->getMemoryStatus().bufferSize -= _size; - CC_PROFILE_MEMORY_DEC(Buffer, _size); - CCVKDevice::getInstance()->gpuRecycleBin()->collect(_gpuBuffer); + createBuffer(size, count); - _gpuBuffer->size = size; - _gpuBuffer->count = count; - cmdFuncCCVKCreateBuffer(CCVKDevice::getInstance(), _gpuBuffer); + // Hold reference to keep the old bufferView alive during DescriptorHub::update and IAHub::update. + IntrusivePtr oldBufferView = _gpuBufferView; + createBufferView(size); + CCVKDevice::getInstance()->gpuDescriptorHub()->update(oldBufferView, _gpuBufferView); + CCVKDevice::getInstance()->gpuIAHub()->update(oldBufferView, _gpuBufferView); +} - _gpuBufferView->range = size; - CCVKDevice::getInstance()->gpuDescriptorHub()->update(_gpuBuffer); +void CCVKBuffer::update(const void *buffer, uint32_t size) { + CC_PROFILE(CCVKBufferUpdate); + cmdFuncCCVKUpdateBuffer(CCVKDevice::getInstance(), _gpuBuffer, buffer, size, nullptr); +} + +void CCVKGPUBuffer::shutdown() { + CCVKDevice::getInstance()->gpuBarrierManager()->cancel(this); + CCVKDevice::getInstance()->gpuRecycleBin()->collect(this); + CCVKDevice::getInstance()->gpuBufferHub()->erase(this); + + CCVKDevice::getInstance()->getMemoryStatus().bufferSize -= size; + CC_PROFILE_MEMORY_DEC(Buffer, size); +} - if (hasFlag(_usage, BufferUsageBit::INDIRECT)) { - const size_t drawInfoCount = _size / sizeof(DrawInfo); - _gpuBuffer->indexedIndirectCmds.resize(drawInfoCount); - _gpuBuffer->indirectCmds.resize(drawInfoCount); +void CCVKGPUBuffer::init() { + if (hasFlag(usage, BufferUsageBit::INDIRECT)) { + const size_t drawInfoCount = size / sizeof(DrawInfo); + indexedIndirectCmds.resize(drawInfoCount); + indirectCmds.resize(drawInfoCount); } + + cmdFuncCCVKCreateBuffer(CCVKDevice::getInstance(), this); CCVKDevice::getInstance()->getMemoryStatus().bufferSize += size; CC_PROFILE_MEMORY_INC(Buffer, size); } -void CCVKBuffer::update(const void *buffer, uint32_t size) { - CC_PROFILE(CCVKBufferUpdate); - cmdFuncCCVKUpdateBuffer(CCVKDevice::getInstance(), _gpuBuffer, buffer, size, nullptr); +void CCVKGPUBufferView::shutdown() { + CCVKDevice::getInstance()->gpuDescriptorHub()->disengage(this); + CCVKDevice::getInstance()->gpuIAHub()->disengage(this); } } // namespace gfx diff --git a/native/cocos/renderer/gfx-vulkan/VKBuffer.h b/native/cocos/renderer/gfx-vulkan/VKBuffer.h index 857285945f7..ef8e02a9f19 100644 --- a/native/cocos/renderer/gfx-vulkan/VKBuffer.h +++ b/native/cocos/renderer/gfx-vulkan/VKBuffer.h @@ -27,13 +27,11 @@ #include "VKStd.h" #include "gfx-base/GFXBuffer.h" +#include "gfx-vulkan/VKGPUObjects.h" namespace cc { namespace gfx { -struct CCVKGPUBuffer; -struct CCVKGPUBufferView; - class CC_VULKAN_API CCVKBuffer final : public Buffer { public: CCVKBuffer(); @@ -50,10 +48,11 @@ class CC_VULKAN_API CCVKBuffer final : public Buffer { void doDestroy() override; void doResize(uint32_t size, uint32_t count) override; - void createBufferView(); + void createBuffer(uint32_t size, uint32_t count); + void createBufferView(uint32_t range); - CCVKGPUBuffer *_gpuBuffer = nullptr; - CCVKGPUBufferView *_gpuBufferView = nullptr; + IntrusivePtr _gpuBuffer; + IntrusivePtr _gpuBufferView; }; } // namespace gfx diff --git a/native/cocos/renderer/gfx-vulkan/VKCommandBuffer.cpp b/native/cocos/renderer/gfx-vulkan/VKCommandBuffer.cpp index 242d077d026..5f8d95e88aa 100644 --- a/native/cocos/renderer/gfx-vulkan/VKCommandBuffer.cpp +++ b/native/cocos/renderer/gfx-vulkan/VKCommandBuffer.cpp @@ -382,7 +382,7 @@ void CCVKCommandBuffer::draw(const DrawInfo &info) { bindDescriptorSets(VK_PIPELINE_BIND_POINT_GRAPHICS); } - const auto *gpuIndirectBuffer = _curGPUInputAssembler->gpuIndirectBuffer; + const auto *gpuIndirectBuffer = _curGPUInputAssembler->gpuIndirectBuffer.get(); if (gpuIndirectBuffer) { uint32_t drawInfoCount = gpuIndirectBuffer->range / gpuIndirectBuffer->gpuBuffer->stride; diff --git a/native/cocos/renderer/gfx-vulkan/VKCommands.cpp b/native/cocos/renderer/gfx-vulkan/VKCommands.cpp index f1a54a53196..c803afeb92b 100644 --- a/native/cocos/renderer/gfx-vulkan/VKCommands.cpp +++ b/native/cocos/renderer/gfx-vulkan/VKCommands.cpp @@ -221,11 +221,7 @@ void cmdFuncCCVKCreateTextureView(CCVKDevice *device, CCVKGPUTextureView *gpuTex } } else if (gpuTextureView->gpuTexture->vkImage) { createFn(gpuTextureView->gpuTexture->vkImage, &gpuTextureView->vkImageView); - } else { - return; } - - device->gpuDescriptorHub()->update(gpuTextureView); } void cmdFuncCCVKCreateSampler(CCVKDevice *device, CCVKGPUSampler *gpuSampler) { @@ -285,7 +281,6 @@ void cmdFuncCCVKCreateBuffer(CCVKDevice *device, CCVKGPUBuffer *gpuBuffer) { &gpuBuffer->vkBuffer, &gpuBuffer->vmaAllocation, &res)); gpuBuffer->mappedData = reinterpret_cast(res.pMappedData); - gpuBuffer->startOffset = 0; // we are creating one VkBuffer each for now // add special access types directly from usage if (hasFlag(gpuBuffer->usage, BufferUsageBit::VERTEX)) gpuBuffer->renderAccessTypes.push_back(THSVS_ACCESS_VERTEX_BUFFER); @@ -787,7 +782,7 @@ void cmdFuncCCVKCreateFramebuffer(CCVKDevice *device, CCVKGPUFramebuffer *gpuFra uint32_t swapchainImageIndices = 0; for (size_t i = 0U; i < colorViewCount; ++i) { - CCVKGPUTextureView *texView = gpuFramebuffer->gpuColorViews[i]; + const CCVKGPUTextureView *texView = gpuFramebuffer->gpuColorViews[i]; if (texView->gpuTexture->swapchain) { gpuFramebuffer->swapchain = texView->gpuTexture->swapchain; swapchainImageIndices |= (1 << i); @@ -1159,7 +1154,7 @@ void cmdFuncCCVKCreateGeneralBarrier(CCVKDevice * /*device*/, CCVKGPUGeneralBarr } namespace { -void bufferUpload(const CCVKGPUBuffer &stagingBuffer, CCVKGPUBuffer &gpuBuffer, VkBufferCopy region, const CCVKGPUCommandBuffer *gpuCommandBuffer) { +void bufferUpload(const CCVKGPUBufferView &stagingBuffer, CCVKGPUBuffer &gpuBuffer, VkBufferCopy region, const CCVKGPUCommandBuffer *gpuCommandBuffer) { #if BARRIER_DEDUCTION_LEVEL >= BARRIER_DEDUCTION_LEVEL_BASIC if (gpuBuffer.transferAccess) { // guard against WAW hazard @@ -1172,7 +1167,7 @@ void bufferUpload(const CCVKGPUBuffer &stagingBuffer, CCVKGPUBuffer &gpuBuffer, 0, 1, &vkBarrier, 0, nullptr, 0, nullptr); } #endif - vkCmdCopyBuffer(gpuCommandBuffer->vkCommandBuffer, stagingBuffer.vkBuffer, gpuBuffer.vkBuffer, 1, ®ion); + vkCmdCopyBuffer(gpuCommandBuffer->vkCommandBuffer, stagingBuffer.gpuBuffer->vkBuffer, gpuBuffer.vkBuffer, 1, ®ion); }; } // namespace @@ -1234,13 +1229,12 @@ void cmdFuncCCVKUpdateBuffer(CCVKDevice *device, CCVKGPUBuffer *gpuBuffer, const while (sizeToUpload) { uint32_t chunkSizeToUpload = std::min(chunkSize, static_cast(sizeToUpload)); sizeToUpload -= chunkSizeToUpload; - CCVKGPUBuffer stagingBuffer; - stagingBuffer.size = chunkSizeToUpload; - device->gpuStagingBufferPool()->alloc(&stagingBuffer); - memcpy(stagingBuffer.mappedData, static_cast(dataToUpload) + chunkOffset, chunkSizeToUpload); + + IntrusivePtr stagingBuffer = device->gpuStagingBufferPool()->alloc(chunkSizeToUpload); + memcpy(stagingBuffer->mappedData(), static_cast(dataToUpload) + chunkOffset, chunkSizeToUpload); VkBufferCopy region{ - stagingBuffer.startOffset, + stagingBuffer->offset, gpuBuffer->getStartOffset(backBufferIndex) + chunkOffset, chunkSizeToUpload, }; @@ -1248,12 +1242,12 @@ void cmdFuncCCVKUpdateBuffer(CCVKDevice *device, CCVKGPUBuffer *gpuBuffer, const chunkOffset += chunkSizeToUpload; if (cmdBuffer) { - bufferUpload(stagingBuffer, *gpuBuffer, region, cmdBuffer); + bufferUpload(*stagingBuffer, *gpuBuffer, region, cmdBuffer); } else { device->gpuTransportHub()->checkIn( // capture by ref is safe here since the transport function will be executed immediately in the same thread [&stagingBuffer, &gpuBuffer, region](CCVKGPUCommandBuffer *gpuCommandBuffer) { - bufferUpload(stagingBuffer, *gpuBuffer, region, gpuCommandBuffer); + bufferUpload(*stagingBuffer, *gpuBuffer, region, gpuCommandBuffer); }); } } @@ -1359,25 +1353,24 @@ void cmdFuncCCVKCopyBuffersToTexture(CCVKDevice *device, const uint8_t *const *b heightOffset = static_cast(h); stepHeight = std::min(chunkHeight, extent.height - h); - CCVKGPUBuffer stagingBuffer; - stagingBuffer.size = rowPitchSize * (stepHeight / blockSize.second); - device->gpuStagingBufferPool()->alloc(&stagingBuffer, offsetAlignment); + uint32_t stagingBufferSize = rowPitchSize * (stepHeight / blockSize.second); + IntrusivePtr stagingBuffer = device->gpuStagingBufferPool()->alloc(stagingBufferSize, offsetAlignment); for (uint32_t j = 0; j < stepHeight; j += blockSize.second) { - memcpy(stagingBuffer.mappedData + destOffset, buffers[idx] + buffOffset, destRowSize); + memcpy(stagingBuffer->mappedData() + destOffset, buffers[idx] + buffOffset, destRowSize); destOffset += rowPitchSize; buffOffset += buffStrideSize; } VkBufferImageCopy stagingRegion; - stagingRegion.bufferOffset = stagingBuffer.startOffset; + stagingRegion.bufferOffset = stagingBuffer->offset; stagingRegion.bufferRowLength = rowPitch; stagingRegion.bufferImageHeight = stepHeight; stagingRegion.imageSubresource = {gpuTexture->aspectMask, mipLevel, l + baseLayer, 1}; stagingRegion.imageOffset = {offset.x, offset.y + heightOffset, offset.z + static_cast(depth)}; stagingRegion.imageExtent = {destWidth, std::min(stepHeight, destHeight - heightOffset), 1}; - vkCmdCopyBufferToImage(gpuCommandBuffer->vkCommandBuffer, stagingBuffer.vkBuffer, gpuTexture->vkImage, + vkCmdCopyBufferToImage(gpuCommandBuffer->vkCommandBuffer, stagingBuffer->gpuBuffer->vkBuffer, gpuTexture->vkImage, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &stagingRegion); } } @@ -1438,7 +1431,7 @@ void cmdFuncCCVKCopyBuffersToTexture(CCVKDevice *device, const uint8_t *const *b device->gpuBarrierManager()->checkIn(gpuTexture); } -void cmdFuncCCVKCopyTextureToBuffers(CCVKDevice *device, CCVKGPUTexture *srcTexture, CCVKGPUBuffer *destBuffer, +void cmdFuncCCVKCopyTextureToBuffers(CCVKDevice *device, CCVKGPUTexture *srcTexture, CCVKGPUBufferView *destBuffer, const BufferTextureCopy *regions, uint32_t count, const CCVKGPUCommandBuffer *gpuCommandBuffer) { ccstd::vector &curTypes = srcTexture->currentAccessTypes; @@ -1464,7 +1457,7 @@ void cmdFuncCCVKCopyTextureToBuffers(CCVKDevice *device, CCVKGPUTexture *srcText for (size_t i = 0U; i < count; ++i) { const BufferTextureCopy ®ion = regions[i]; VkBufferImageCopy &stagingRegion = stagingRegions[i]; - stagingRegion.bufferOffset = destBuffer->startOffset + offset; + stagingRegion.bufferOffset = destBuffer->offset + offset; stagingRegion.bufferRowLength = region.buffStride; stagingRegion.bufferImageHeight = region.buffTexHeight; stagingRegion.imageSubresource = {srcTexture->aspectMask, region.texSubres.mipLevel, region.texSubres.baseArrayLayer, region.texSubres.layerCount}; @@ -1478,7 +1471,7 @@ void cmdFuncCCVKCopyTextureToBuffers(CCVKDevice *device, CCVKGPUTexture *srcText offset += regionSize; } vkCmdCopyImageToBuffer(gpuCommandBuffer->vkCommandBuffer, srcTexture->vkImage, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, - destBuffer->vkBuffer, utils::toUint(stagingRegions.size()), stagingRegions.data()); + destBuffer->gpuBuffer->vkBuffer, utils::toUint(stagingRegions.size()), stagingRegions.data()); curTypes.assign({THSVS_ACCESS_TRANSFER_READ}); srcTexture->transferAccess = THSVS_ACCESS_TRANSFER_READ; diff --git a/native/cocos/renderer/gfx-vulkan/VKCommands.h b/native/cocos/renderer/gfx-vulkan/VKCommands.h index a8f269f7b85..a9681641e6b 100644 --- a/native/cocos/renderer/gfx-vulkan/VKCommands.h +++ b/native/cocos/renderer/gfx-vulkan/VKCommands.h @@ -49,7 +49,7 @@ void cmdFuncCCVKCreateGeneralBarrier(CCVKDevice *device, CCVKGPUGeneralBarrier * void cmdFuncCCVKUpdateBuffer(CCVKDevice *device, CCVKGPUBuffer *gpuBuffer, const void *buffer, uint32_t size, const CCVKGPUCommandBuffer *cmdBuffer = nullptr); void cmdFuncCCVKCopyBuffersToTexture(CCVKDevice *device, const uint8_t *const *buffers, CCVKGPUTexture *gpuTexture, const BufferTextureCopy *regions, uint32_t count, const CCVKGPUCommandBuffer *gpuCommandBuffer); -void cmdFuncCCVKCopyTextureToBuffers(CCVKDevice *device, CCVKGPUTexture *srcTexture, CCVKGPUBuffer *destBuffer, const BufferTextureCopy *regions, uint32_t count, const CCVKGPUCommandBuffer *gpuCommandBuffer); +void cmdFuncCCVKCopyTextureToBuffers(CCVKDevice *device, CCVKGPUTexture *srcTexture, CCVKGPUBufferView *destBuffer, const BufferTextureCopy *regions, uint32_t count, const CCVKGPUCommandBuffer *gpuCommandBuffer); void cmdFuncCCVKDestroyQueryPool(CCVKGPUDevice *device, CCVKGPUQueryPool *gpuQueryPool); void cmdFuncCCVKDestroyRenderPass(CCVKGPUDevice *device, CCVKGPURenderPass *gpuRenderPass); diff --git a/native/cocos/renderer/gfx-vulkan/VKDescriptorSet.cpp b/native/cocos/renderer/gfx-vulkan/VKDescriptorSet.cpp index bdb746abdbd..d7e6ea57ccd 100644 --- a/native/cocos/renderer/gfx-vulkan/VKDescriptorSet.cpp +++ b/native/cocos/renderer/gfx-vulkan/VKDescriptorSet.cpp @@ -102,12 +102,12 @@ void CCVKDescriptorSet::doInit(const DescriptorSetInfo & /*info*/) { const DescriptorSetLayoutBinding &binding = gpuDescriptorSetLayout->bindings[i]; for (uint32_t j = 0; j < binding.count; ++j, ++k) { if (hasFlag(DESCRIPTOR_BUFFER_TYPE, binding.descriptorType)) { - instance.descriptorInfos[k].buffer.buffer = gpuDevice->defaultBuffer.vkBuffer; - instance.descriptorInfos[k].buffer.offset = gpuDevice->defaultBuffer.getStartOffset(t); - instance.descriptorInfos[k].buffer.range = gpuDevice->defaultBuffer.size; + instance.descriptorInfos[k].buffer.buffer = gpuDevice->defaultBuffer->vkBuffer; + instance.descriptorInfos[k].buffer.offset = gpuDevice->defaultBuffer->getStartOffset(t); + instance.descriptorInfos[k].buffer.range = gpuDevice->defaultBuffer->size; } else if (hasFlag(DESCRIPTOR_TEXTURE_TYPE, binding.descriptorType)) { - instance.descriptorInfos[k].image.sampler = gpuDevice->defaultSampler.vkSampler; - instance.descriptorInfos[k].image.imageView = gpuDevice->defaultTextureView.vkImageView; + instance.descriptorInfos[k].image.sampler = gpuDevice->defaultSampler->vkSampler; + instance.descriptorInfos[k].image.imageView = gpuDevice->defaultTextureView->vkImageView; instance.descriptorInfos[k].image.imageLayout = hasFlag(binding.descriptorType, DescriptorType::STORAGE_IMAGE) ? VK_IMAGE_LAYOUT_GENERAL : VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; @@ -256,5 +256,47 @@ void CCVKGPUDescriptorSet::shutdown() { CCVKDevice::getInstance()->gpuDescriptorSetHub()->erase(this); } +void CCVKGPUDescriptorSet::update(const CCVKGPUBufferView *oldView, const CCVKGPUBufferView *newView) { + CCVKGPUDescriptorHub *descriptorHub = CCVKDevice::getInstance()->gpuDescriptorHub(); + uint32_t instanceCount = utils::toUint(instances.size()); + + for (size_t i = 0U; i < gpuDescriptors.size(); i++) { + CCVKGPUDescriptor &binding = gpuDescriptors[i]; + if (hasFlag(DESCRIPTOR_BUFFER_TYPE, binding.type) && (binding.gpuBufferView == oldView)) { + for (uint32_t t = 0U; t < instanceCount; ++t) { + CCVKDescriptorInfo &descriptorInfo = instances[t].descriptorInfos[i]; + + if (newView != nullptr) { + descriptorHub->connect(this, newView, &descriptorInfo.buffer, t); + descriptorHub->update(newView, &descriptorInfo.buffer); + } + } + binding.gpuBufferView = newView; + } + } + CCVKDevice::getInstance()->gpuDescriptorSetHub()->record(this); +} + +void CCVKGPUDescriptorSet::update(const CCVKGPUTextureView *oldView, const CCVKGPUTextureView *newView) { + CCVKGPUDescriptorHub *descriptorHub = CCVKDevice::getInstance()->gpuDescriptorHub(); + uint32_t instanceCount = utils::toUint(instances.size()); + + for (size_t i = 0U; i < gpuDescriptors.size(); i++) { + CCVKGPUDescriptor &binding = gpuDescriptors[i]; + if (hasFlag(DESCRIPTOR_TEXTURE_TYPE, binding.type) && (binding.gpuTextureView == oldView)) { + for (uint32_t t = 0U; t < instanceCount; ++t) { + CCVKDescriptorInfo &descriptorInfo = instances[t].descriptorInfos[i]; + + if (newView != nullptr) { + descriptorHub->connect(this, newView, &descriptorInfo.image); + descriptorHub->update(newView, &descriptorInfo.image); + } + } + binding.gpuTextureView = newView; + } + } + CCVKDevice::getInstance()->gpuDescriptorSetHub()->record(this); +} + } // namespace gfx } // namespace cc diff --git a/native/cocos/renderer/gfx-vulkan/VKDevice.cpp b/native/cocos/renderer/gfx-vulkan/VKDevice.cpp index 34993bf0aa5..e4653c25d23 100644 --- a/native/cocos/renderer/gfx-vulkan/VKDevice.cpp +++ b/native/cocos/renderer/gfx-vulkan/VKDevice.cpp @@ -402,30 +402,33 @@ bool CCVKDevice::doInit(const DeviceInfo & /*info*/) { } _gpuBufferHub = ccnew CCVKGPUBufferHub(_gpuDevice); + _gpuIAHub = ccnew CCVKGPUInputAssemblerHub(_gpuDevice); _gpuTransportHub = ccnew CCVKGPUTransportHub(_gpuDevice, static_cast(_queue)->gpuQueue()); _gpuDescriptorHub = ccnew CCVKGPUDescriptorHub(_gpuDevice); _gpuSemaphorePool = ccnew CCVKGPUSemaphorePool(_gpuDevice); _gpuBarrierManager = ccnew CCVKGPUBarrierManager(_gpuDevice); _gpuDescriptorSetHub = ccnew CCVKGPUDescriptorSetHub(_gpuDevice); - _gpuDescriptorHub->link(_gpuDescriptorSetHub); - - cmdFuncCCVKCreateSampler(this, &_gpuDevice->defaultSampler); + _gpuDescriptorSetHub = ccnew CCVKGPUDescriptorSetHub(_gpuDevice); + _gpuDevice->defaultSampler = ccnew CCVKGPUSampler(); + _gpuDevice->defaultSampler->init(); - _gpuDevice->defaultTexture.format = Format::RGBA8; - _gpuDevice->defaultTexture.usage = TextureUsageBit::SAMPLED | TextureUsage::STORAGE; - _gpuDevice->defaultTexture.width = _gpuDevice->defaultTexture.height = 1U; - _gpuDevice->defaultTexture.size = formatSize(Format::RGBA8, 1U, 1U, 1U); - cmdFuncCCVKCreateTexture(this, &_gpuDevice->defaultTexture); + _gpuDevice->defaultTexture = ccnew CCVKGPUTexture(); + _gpuDevice->defaultTexture->format = Format::RGBA8; + _gpuDevice->defaultTexture->usage = TextureUsageBit::SAMPLED | TextureUsage::STORAGE; + _gpuDevice->defaultTexture->width = _gpuDevice->defaultTexture->height = 1U; + _gpuDevice->defaultTexture->size = formatSize(Format::RGBA8, 1U, 1U, 1U); + _gpuDevice->defaultTexture->init(); - _gpuDevice->defaultTextureView.gpuTexture = &_gpuDevice->defaultTexture; - _gpuDevice->defaultTextureView.format = Format::RGBA8; - cmdFuncCCVKCreateTextureView(this, &_gpuDevice->defaultTextureView); + _gpuDevice->defaultTextureView = ccnew CCVKGPUTextureView(); + _gpuDevice->defaultTextureView->gpuTexture = _gpuDevice->defaultTexture; + _gpuDevice->defaultTextureView->format = Format::RGBA8; + _gpuDevice->defaultTextureView->init(); ThsvsImageBarrier barrier{}; barrier.nextAccessCount = 1; barrier.pNextAccesses = getAccessType(AccessFlagBit::VERTEX_SHADER_READ_TEXTURE); - barrier.image = _gpuDevice->defaultTexture.vkImage; + barrier.image = _gpuDevice->defaultTexture->vkImage; barrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; barrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; barrier.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; @@ -437,11 +440,12 @@ bool CCVKDevice::doInit(const DeviceInfo & /*info*/) { }, true); - _gpuDevice->defaultBuffer.usage = BufferUsage::UNIFORM | BufferUsage::STORAGE; - _gpuDevice->defaultBuffer.memUsage = MemoryUsage::HOST | MemoryUsage::DEVICE; - _gpuDevice->defaultBuffer.size = _gpuDevice->defaultBuffer.stride = 16U; - _gpuDevice->defaultBuffer.count = 1U; - cmdFuncCCVKCreateBuffer(this, &_gpuDevice->defaultBuffer); + _gpuDevice->defaultBuffer = ccnew CCVKGPUBuffer(); + _gpuDevice->defaultBuffer->usage = BufferUsage::UNIFORM | BufferUsage::STORAGE; + _gpuDevice->defaultBuffer->memUsage = MemoryUsage::HOST | MemoryUsage::DEVICE; + _gpuDevice->defaultBuffer->size = _gpuDevice->defaultBuffer->stride = 16U; + _gpuDevice->defaultBuffer->count = 1U; + _gpuDevice->defaultBuffer->init(); getAccessTypes(AccessFlagBit::COLOR_ATTACHMENT_WRITE, _gpuDevice->defaultColorBarrier.nextAccesses); cmdFuncCCVKCreateGeneralBarrier(this, &_gpuDevice->defaultColorBarrier); @@ -505,27 +509,43 @@ void CCVKDevice::doDestroy() { } _depthStencilTextures.clear(); + if (_gpuDevice) { + _gpuDevice->defaultBuffer = nullptr; + _gpuDevice->defaultTexture = nullptr; + _gpuDevice->defaultTextureView = nullptr; + _gpuDevice->defaultSampler = nullptr; + } + CC_SAFE_DESTROY_AND_DELETE(_queryPool) CC_SAFE_DESTROY_AND_DELETE(_queue) CC_SAFE_DESTROY_AND_DELETE(_cmdBuff) + + if (_gpuDevice) { + uint32_t backBufferCount = _gpuDevice->backBufferCount; + for (uint32_t i = 0; i < backBufferCount; i++) { + CC_SAFE_DELETE(_gpuStagingBufferPools[i]) + CC_SAFE_DELETE(_gpuFencePools[i]) + } + } + _gpuStagingBufferPools.clear(); + _gpuFencePools.clear(); + + CC_SAFE_DELETE(_gpuBufferHub) CC_SAFE_DELETE(_gpuTransportHub) CC_SAFE_DELETE(_gpuSemaphorePool) CC_SAFE_DELETE(_gpuDescriptorHub) CC_SAFE_DELETE(_gpuBarrierManager) CC_SAFE_DELETE(_gpuDescriptorSetHub) + CC_SAFE_DELETE(_gpuIAHub) if (_gpuDevice) { uint32_t backBufferCount = _gpuDevice->backBufferCount; for (uint32_t i = 0U; i < backBufferCount; i++) { _gpuRecycleBins[i]->clear(); - - CC_SAFE_DELETE(_gpuStagingBufferPools[i]) CC_SAFE_DELETE(_gpuRecycleBins[i]) - CC_SAFE_DELETE(_gpuFencePools[i]) } } - _gpuStagingBufferPools.clear(); _gpuRecycleBins.clear(); _gpuFencePools.clear(); @@ -536,22 +556,6 @@ void CCVKDevice::doDestroy() { _gpuDevice->vkPipelineCache = VK_NULL_HANDLE; } - if (_gpuDevice->defaultBuffer.vkBuffer) { - vmaDestroyBuffer(_gpuDevice->memoryAllocator, _gpuDevice->defaultBuffer.vkBuffer, _gpuDevice->defaultBuffer.vmaAllocation); - _gpuDevice->defaultBuffer.vkBuffer = VK_NULL_HANDLE; - _gpuDevice->defaultBuffer.vmaAllocation = VK_NULL_HANDLE; - } - if (_gpuDevice->defaultTextureView.vkImageView) { - vkDestroyImageView(_gpuDevice->vkDevice, _gpuDevice->defaultTextureView.vkImageView, nullptr); - _gpuDevice->defaultTextureView.vkImageView = VK_NULL_HANDLE; - } - if (_gpuDevice->defaultTexture.vkImage) { - vmaDestroyImage(_gpuDevice->memoryAllocator, _gpuDevice->defaultTexture.vkImage, _gpuDevice->defaultTexture.vmaAllocation); - _gpuDevice->defaultTexture.vkImage = VK_NULL_HANDLE; - _gpuDevice->defaultTexture.vmaAllocation = VK_NULL_HANDLE; - } - cmdFuncCCVKDestroySampler(_gpuDevice, &_gpuDevice->defaultSampler); - if (_gpuDevice->memoryAllocator != VK_NULL_HANDLE) { VmaStats stats; vmaCalculateStats(_gpuDevice->memoryAllocator, &stats); @@ -892,17 +896,15 @@ void CCVKDevice::copyTextureToBuffers(Texture *srcTexture, uint8_t *const *buffe totalSize += regionSize; } - CCVKGPUBuffer stagingBuffer; - stagingBuffer.size = totalSize; uint32_t texelSize = GFX_FORMAT_INFOS[toNumber(format)].size; - gpuStagingBufferPool()->alloc(&stagingBuffer, texelSize); + IntrusivePtr stagingBuffer = gpuStagingBufferPool()->alloc(totalSize, texelSize); // make sure the src texture is up-to-date waitAllFences(); _gpuTransportHub->checkIn( [&](CCVKGPUCommandBuffer *cmdBuffer) { - cmdFuncCCVKCopyTextureToBuffers(this, static_cast(srcTexture)->gpuTexture(), &stagingBuffer, regions, count, cmdBuffer); + cmdFuncCCVKCopyTextureToBuffers(this, static_cast(srcTexture)->gpuTexture(), stagingBuffer, regions, count, cmdBuffer); }, true); @@ -910,7 +912,7 @@ void CCVKDevice::copyTextureToBuffers(Texture *srcTexture, uint8_t *const *buffe uint32_t regionOffset = 0; uint32_t regionSize = 0; std::tie(regionOffset, regionSize) = regionOffsetSizes[i]; - memcpy(buffers[i], stagingBuffer.mappedData + regionOffset, regionSize); + memcpy(buffers[i], stagingBuffer->mappedData() + regionOffset, regionSize); } } diff --git a/native/cocos/renderer/gfx-vulkan/VKDevice.h b/native/cocos/renderer/gfx-vulkan/VKDevice.h index 492348e9507..7e964867445 100644 --- a/native/cocos/renderer/gfx-vulkan/VKDevice.h +++ b/native/cocos/renderer/gfx-vulkan/VKDevice.h @@ -43,8 +43,8 @@ class CCVKGPUTransportHub; class CCVKGPUDescriptorHub; class CCVKGPUSemaphorePool; class CCVKGPUBarrierManager; -class CCVKGPUFramebufferHub; class CCVKGPUDescriptorSetHub; +class CCVKGPUInputAssemblerHub; class CCVKGPUFencePool; class CCVKGPURecycleBin; @@ -87,12 +87,13 @@ class CC_VULKAN_API CCVKDevice final : public Device { inline CCVKGPUDevice *gpuDevice() const { return _gpuDevice; } inline CCVKGPUContext *gpuContext() { return _gpuContext; } - inline CCVKGPUBufferHub *gpuBufferHub() { return _gpuBufferHub; } - inline CCVKGPUTransportHub *gpuTransportHub() { return _gpuTransportHub; } - inline CCVKGPUDescriptorHub *gpuDescriptorHub() { return _gpuDescriptorHub; } - inline CCVKGPUSemaphorePool *gpuSemaphorePool() { return _gpuSemaphorePool; } - inline CCVKGPUBarrierManager *gpuBarrierManager() { return _gpuBarrierManager; } - inline CCVKGPUDescriptorSetHub *gpuDescriptorSetHub() { return _gpuDescriptorSetHub; } + inline CCVKGPUBufferHub *gpuBufferHub() const { return _gpuBufferHub; } + inline CCVKGPUTransportHub *gpuTransportHub() const { return _gpuTransportHub; } + inline CCVKGPUDescriptorHub *gpuDescriptorHub() const { return _gpuDescriptorHub; } + inline CCVKGPUSemaphorePool *gpuSemaphorePool() const { return _gpuSemaphorePool; } + inline CCVKGPUBarrierManager *gpuBarrierManager() const { return _gpuBarrierManager; } + inline CCVKGPUDescriptorSetHub *gpuDescriptorSetHub() const { return _gpuDescriptorSetHub; } + inline CCVKGPUInputAssemblerHub *gpuIAHub() const { return _gpuIAHub; } CCVKGPUFencePool *gpuFencePool(); CCVKGPURecycleBin *gpuRecycleBin(); @@ -149,6 +150,7 @@ class CC_VULKAN_API CCVKDevice final : public Device { CCVKGPUSemaphorePool *_gpuSemaphorePool{nullptr}; CCVKGPUBarrierManager *_gpuBarrierManager{nullptr}; CCVKGPUDescriptorSetHub *_gpuDescriptorSetHub{nullptr}; + CCVKGPUInputAssemblerHub *_gpuIAHub{nullptr}; ccstd::vector _layers; ccstd::vector _extensions; diff --git a/native/cocos/renderer/gfx-vulkan/VKGPUObjects.h b/native/cocos/renderer/gfx-vulkan/VKGPUObjects.h index b648cdd6f89..0d7b45cd9fc 100644 --- a/native/cocos/renderer/gfx-vulkan/VKGPUObjects.h +++ b/native/cocos/renderer/gfx-vulkan/VKGPUObjects.h @@ -134,6 +134,9 @@ class CCVKGPURenderPass final : public CCVKGPUDeviceObject { struct CCVKGPUSwapchain; struct CCVKGPUFramebuffer; struct CCVKGPUTexture : public CCVKGPUDeviceObject { + void shutdown() override; + void init(); + TextureType type = TextureType::TEX2D; Format format = Format::UNKNOWN; TextureUsage usage = TextureUsageBit::NONE; @@ -163,7 +166,10 @@ struct CCVKGPUTexture : public CCVKGPUDeviceObject { }; struct CCVKGPUTextureView : public CCVKGPUDeviceObject { - CCVKGPUTexture *gpuTexture = nullptr; + void shutdown() override; + void init(); + + IntrusivePtr gpuTexture; TextureType type = TextureType::TEX2D; Format format = Format::UNKNOWN; uint32_t baseLevel = 0U; @@ -178,6 +184,9 @@ struct CCVKGPUTextureView : public CCVKGPUDeviceObject { }; struct CCVKGPUSampler : public CCVKGPUDeviceObject { + void shutdown() override; + void init(); + Filter minFilter = Filter::LINEAR; Filter magFilter = Filter::LINEAR; Filter mipFilter = Filter::NONE; @@ -192,6 +201,9 @@ struct CCVKGPUSampler : public CCVKGPUDeviceObject { }; struct CCVKGPUBuffer : public CCVKGPUDeviceObject { + void shutdown() override; + void init(); + BufferUsage usage = BufferUsage::NONE; MemoryUsage memUsage = MemoryUsage::NONE; uint32_t stride = 0U; @@ -207,7 +219,6 @@ struct CCVKGPUBuffer : public CCVKGPUDeviceObject { // descriptor infos VkBuffer vkBuffer = VK_NULL_HANDLE; - VkDeviceSize startOffset = 0U; VkDeviceSize size = 0U; VkDeviceSize instanceSize = 0U; // per-back-buffer instance @@ -218,15 +229,20 @@ struct CCVKGPUBuffer : public CCVKGPUDeviceObject { ThsvsAccessType transferAccess = THSVS_ACCESS_NONE; VkDeviceSize getStartOffset(uint32_t curBackBufferIndex) const { - return startOffset + instanceSize * curBackBufferIndex; + return instanceSize * curBackBufferIndex; } }; struct CCVKGPUBufferView : public CCVKGPUDeviceObject { - CCVKGPUBuffer *gpuBuffer = nullptr; + void shutdown() override; + ConstPtr gpuBuffer; uint32_t offset = 0U; uint32_t range = 0U; + uint8_t* mappedData() const { + return gpuBuffer->mappedData + offset; + } + VkDeviceSize getStartOffset(uint32_t curBackBufferIndex) const { return gpuBuffer->getStartOffset(curBackBufferIndex) + offset; } @@ -236,8 +252,8 @@ struct CCVKGPUFramebuffer : public CCVKGPUDeviceObject { void shutdown() override; ConstPtr gpuRenderPass; - ccstd::vector gpuColorViews; - CCVKGPUTextureView *gpuDepthStencilView = nullptr; + ccstd::vector> gpuColorViews; + ConstPtr gpuDepthStencilView; VkFramebuffer vkFramebuffer = VK_NULL_HANDLE; std::vector vkFrameBuffers; CCVKGPUSwapchain *swapchain = nullptr; @@ -306,10 +322,13 @@ struct CCVKGPUShader : public CCVKGPUDeviceObject { }; struct CCVKGPUInputAssembler : public CCVKGPUDeviceObject { + void shutdown() override; + void update(const CCVKGPUBufferView *oldBuffer, const CCVKGPUBufferView *newBuffer); + AttributeList attributes; - ccstd::vector gpuVertexBuffers; - CCVKGPUBufferView *gpuIndexBuffer = nullptr; - CCVKGPUBufferView *gpuIndirectBuffer = nullptr; + ccstd::vector> gpuVertexBuffers; + ConstPtr gpuIndexBuffer; + ConstPtr gpuIndirectBuffer; ccstd::vector vertexBuffers; ccstd::vector vertexBufferOffsets; }; @@ -322,15 +341,18 @@ union CCVKDescriptorInfo { struct CCVKGPUDescriptor { DescriptorType type = DescriptorType::UNKNOWN; ccstd::vector accessTypes; - CCVKGPUBufferView *gpuBufferView = nullptr; - CCVKGPUTextureView *gpuTextureView = nullptr; - CCVKGPUSampler *gpuSampler = nullptr; + ConstPtr gpuBufferView; + ConstPtr gpuTextureView; + ConstPtr gpuSampler; }; struct CCVKGPUDescriptorSetLayout; struct CCVKGPUDescriptorSet : public CCVKGPUDeviceObject { void shutdown() override; + void update(const CCVKGPUBufferView *oldView, const CCVKGPUBufferView *newView); + void update(const CCVKGPUTextureView *oldView, const CCVKGPUTextureView *newView); + ccstd::vector gpuDescriptors; // references @@ -420,10 +442,10 @@ class CCVKGPUDevice final { PFN_vkCreateRenderPass2 createRenderPass2{nullptr}; // for default backup usages - CCVKGPUSampler defaultSampler; - CCVKGPUTexture defaultTexture; - CCVKGPUTextureView defaultTextureView; - CCVKGPUBuffer defaultBuffer; + IntrusivePtr defaultSampler; + IntrusivePtr defaultTexture; + IntrusivePtr defaultTextureView; + IntrusivePtr defaultBuffer; CCVKGPUGeneralBarrier defaultColorBarrier; CCVKGPUGeneralBarrier defaultDepthStencilBarrier; @@ -758,15 +780,13 @@ class CCVKGPUStagingBufferPool final { } ~CCVKGPUStagingBufferPool() { - for (Buffer &buffer : _pool) { - vmaDestroyBuffer(_device->memoryAllocator, buffer.vkBuffer, buffer.vmaAllocation); - } _pool.clear(); } - void alloc(CCVKGPUBuffer *gpuBuffer) { alloc(gpuBuffer, 1U); } - void alloc(CCVKGPUBuffer *gpuBuffer, uint32_t alignment) { - CC_ASSERT(gpuBuffer->size <= CHUNK_SIZE); + IntrusivePtr alloc(uint32_t size) { return alloc(size, 1U); } + + IntrusivePtr alloc(uint32_t size, uint32_t alignment) { + CC_ASSERT(size <= CHUNK_SIZE); size_t bufferCount = _pool.size(); Buffer *buffer = nullptr; @@ -774,7 +794,7 @@ class CCVKGPUStagingBufferPool final { for (size_t idx = 0U; idx < bufferCount; idx++) { Buffer *cur = &_pool[idx]; offset = roundUp(cur->curOffset, alignment); - if (CHUNK_SIZE - offset >= gpuBuffer->size) { + if (CHUNK_SIZE - offset >= size) { buffer = cur; break; } @@ -782,21 +802,18 @@ class CCVKGPUStagingBufferPool final { if (!buffer) { _pool.resize(bufferCount + 1); buffer = &_pool.back(); - VkBufferCreateInfo bufferInfo{VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO}; - bufferInfo.size = CHUNK_SIZE; - bufferInfo.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT; - VmaAllocationCreateInfo allocInfo{}; - allocInfo.flags = VMA_ALLOCATION_CREATE_MAPPED_BIT; - allocInfo.usage = VMA_MEMORY_USAGE_CPU_ONLY; - VmaAllocationInfo res; - VK_CHECK(vmaCreateBuffer(_device->memoryAllocator, &bufferInfo, &allocInfo, &buffer->vkBuffer, &buffer->vmaAllocation, &res)); - buffer->mappedData = reinterpret_cast(res.pMappedData); + buffer->gpuBuffer = new CCVKGPUBuffer(); + buffer->gpuBuffer->size = CHUNK_SIZE; + buffer->gpuBuffer->usage = BufferUsage::TRANSFER_SRC | BufferUsage::TRANSFER_DST; + buffer->gpuBuffer->memUsage = MemoryUsage::HOST; + buffer->gpuBuffer->init(); offset = 0U; } - gpuBuffer->vkBuffer = buffer->vkBuffer; - gpuBuffer->startOffset = offset; - gpuBuffer->mappedData = buffer->mappedData + offset; - buffer->curOffset = offset + gpuBuffer->size; + auto *bufferView = new CCVKGPUBufferView; + bufferView->gpuBuffer = buffer->gpuBuffer; + bufferView->offset = offset; + buffer->curOffset = offset + size; + return bufferView; } void reset() { @@ -807,10 +824,7 @@ class CCVKGPUStagingBufferPool final { private: struct Buffer { - VkBuffer vkBuffer = VK_NULL_HANDLE; - uint8_t *mappedData = nullptr; - VmaAllocation vmaAllocation = VK_NULL_HANDLE; - + IntrusivePtr gpuBuffer; VkDeviceSize curOffset = 0U; }; @@ -892,38 +906,22 @@ class CCVKGPUDescriptorHub final { explicit CCVKGPUDescriptorHub(CCVKGPUDevice * /*device*/) { } - void link(CCVKGPUDescriptorSetHub *descriptorSetHub) { - _descriptorSetHub = descriptorSetHub; - } - - void connect(const CCVKGPUDescriptorSet *set, const CCVKGPUBufferView *buffer, VkDescriptorBufferInfo *descriptor, uint32_t instanceIdx) { - _buffers[buffer].sets.insert(set); - _buffers[buffer].descriptors.push(descriptor); + void connect(CCVKGPUDescriptorSet *set, const CCVKGPUBufferView *buffer, VkDescriptorBufferInfo *descriptor, uint32_t instanceIdx) { + _gpuBufferViewSet[buffer].sets.insert(set); + _gpuBufferViewSet[buffer].descriptors.push(descriptor); _bufferInstanceIndices[descriptor] = instanceIdx; } - void connect(const CCVKGPUDescriptorSet *set, const CCVKGPUTextureView *texture, VkDescriptorImageInfo *descriptor) { - _textures[texture].sets.insert(set); - _textures[texture].descriptors.push(descriptor); + void connect(CCVKGPUDescriptorSet *set, const CCVKGPUTextureView *texture, VkDescriptorImageInfo *descriptor) { + _gpuTextureViewSet[texture].sets.insert(set); + _gpuTextureViewSet[texture].descriptors.push(descriptor); } - void connect(const CCVKGPUSampler *sampler, VkDescriptorImageInfo *descriptor) { + void connect(CCVKGPUSampler *sampler, VkDescriptorImageInfo *descriptor) { _samplers[sampler].push(descriptor); } - void update(const CCVKGPUBufferView *buffer) { - for (const auto &it : _buffers) { - if (it.first->gpuBuffer != buffer->gpuBuffer) continue; - const auto &info = it.second; - for (uint32_t i = 0U; i < info.descriptors.size(); i++) { - doUpdate(buffer, info.descriptors[i]); - } - for (const auto *set : info.sets) { - _descriptorSetHub->record(set); - } - } - } void update(const CCVKGPUBufferView *buffer, VkDescriptorBufferInfo *descriptor) { - auto it = _buffers.find(buffer); - if (it == _buffers.end()) return; + auto it = _gpuBufferViewSet.find(buffer); + if (it == _gpuBufferViewSet.end()) return; auto &descriptors = it->second.descriptors; for (uint32_t i = 0U; i < descriptors.size(); i++) { if (descriptors[i] == descriptor) { @@ -932,21 +930,10 @@ class CCVKGPUDescriptorHub final { } } } - void update(const CCVKGPUTextureView *texture) { - for (const auto &it : _textures) { - if (it.first->gpuTexture != texture->gpuTexture) continue; - const auto &info = it.second; - for (uint32_t i = 0U; i < info.descriptors.size(); i++) { - doUpdate(texture, info.descriptors[i]); - } - for (const auto *set : info.sets) { - _descriptorSetHub->record(set); - } - } - } + void update(const CCVKGPUTextureView *texture, VkDescriptorImageInfo *descriptor) { - auto it = _textures.find(texture); - if (it == _textures.end()) return; + auto it = _gpuTextureViewSet.find(texture); + if (it == _gpuTextureViewSet.end()) return; auto &descriptors = it->second.descriptors; for (uint32_t i = 0U; i < descriptors.size(); i++) { if (descriptors[i] == descriptor) { @@ -967,55 +954,52 @@ class CCVKGPUDescriptorHub final { } } // for resize events - void update(const CCVKGPUBuffer *buffer) { - for (const auto &it : _buffers) { - if (it.first->gpuBuffer != buffer) continue; - const auto &info = it.second; - for (uint32_t i = 0U; i < info.descriptors.size(); i++) { - doUpdate(it.first, info.descriptors[i]); - } - for (const auto *set : info.sets) { - _descriptorSetHub->record(set); + void update(const CCVKGPUBufferView *oldView, const CCVKGPUBufferView *newView) { + auto iter = _gpuBufferViewSet.find(oldView); + if (iter != _gpuBufferViewSet.end()) { + auto &sets = iter->second.sets; + for (auto *set : sets) { + set->update(oldView, newView); } + _gpuBufferViewSet.erase(iter); } } - void update(const CCVKGPUTexture *texture) { - for (auto &it : _textures) { - if (it.first->gpuTexture != texture) continue; - const auto &info = it.second; - for (uint32_t i = 0U; i < info.descriptors.size(); i++) { - doUpdate(it.first, info.descriptors[i]); - } - for (const auto *set : info.sets) { - _descriptorSetHub->record(set); + + void update(const CCVKGPUTextureView *oldView, const CCVKGPUTextureView *newView) { + auto iter = _gpuTextureViewSet.find(oldView); + if (iter != _gpuTextureViewSet.end()) { + auto &sets = iter->second.sets; + for (auto *set : sets) { + set->update(oldView, newView); } + _gpuTextureViewSet.erase(iter); } } void disengage(const CCVKGPUBufferView *buffer) { - auto it = _buffers.find(buffer); - if (it == _buffers.end()) return; + auto it = _gpuBufferViewSet.find(buffer); + if (it == _gpuBufferViewSet.end()) return; for (uint32_t i = 0; i < it->second.descriptors.size(); ++i) { _bufferInstanceIndices.erase(it->second.descriptors[i]); } - _buffers.erase(it); + _gpuBufferViewSet.erase(it); } - void disengage(const CCVKGPUDescriptorSet *set, const CCVKGPUBufferView *buffer, VkDescriptorBufferInfo *descriptor) { - auto it = _buffers.find(buffer); - if (it == _buffers.end()) return; + void disengage(CCVKGPUDescriptorSet *set, const CCVKGPUBufferView *buffer, VkDescriptorBufferInfo *descriptor) { + auto it = _gpuBufferViewSet.find(buffer); + if (it == _gpuBufferViewSet.end()) return; it->second.sets.erase(set); auto &descriptors = it->second.descriptors; descriptors.fastRemove(descriptors.indexOf(descriptor)); _bufferInstanceIndices.erase(descriptor); } void disengage(const CCVKGPUTextureView *texture) { - auto it = _textures.find(texture); - if (it == _textures.end()) return; - _textures.erase(it); + auto it = _gpuTextureViewSet.find(texture); + if (it == _gpuTextureViewSet.end()) return; + _gpuTextureViewSet.erase(it); } - void disengage(const CCVKGPUDescriptorSet *set, const CCVKGPUTextureView *texture, VkDescriptorImageInfo *descriptor) { - auto it = _textures.find(texture); - if (it == _textures.end()) return; + void disengage(CCVKGPUDescriptorSet *set, const CCVKGPUTextureView *texture, VkDescriptorImageInfo *descriptor) { + auto it = _gpuTextureViewSet.find(texture); + if (it == _gpuTextureViewSet.end()) return; it->second.sets.erase(set); auto &descriptors = it->second.descriptors; descriptors.fastRemove(descriptors.indexOf(descriptor)); @@ -1058,16 +1042,14 @@ class CCVKGPUDescriptorHub final { template struct DescriptorInfo { - ccstd::unordered_set sets; + ccstd::unordered_set sets; CachedArray descriptors; }; ccstd::unordered_map _bufferInstanceIndices; - ccstd::unordered_map> _buffers; - ccstd::unordered_map> _textures; + ccstd::unordered_map> _gpuBufferViewSet; + ccstd::unordered_map> _gpuTextureViewSet; ccstd::unordered_map> _samplers; - - CCVKGPUDescriptorSetHub *_descriptorSetHub = nullptr; }; /** @@ -1160,6 +1142,48 @@ class CCVKGPURecycleBin final { size_t _count = 0U; }; +class CCVKGPUInputAssemblerHub { +public: + explicit CCVKGPUInputAssemblerHub(CCVKGPUDevice *device) + : _gpuDevice(device) { + } + + ~CCVKGPUInputAssemblerHub() = default; + + void connect(CCVKGPUInputAssembler *ia, const CCVKGPUBufferView *buffer) { + _ias[buffer].insert(ia); + } + + void update(CCVKGPUBufferView* oldBuffer, CCVKGPUBufferView* newBuffer) { + auto iter = _ias.find(oldBuffer); + if (iter != _ias.end()) { + for (const auto &ia : iter->second) { + ia->update(oldBuffer, newBuffer); + _ias[newBuffer].insert(ia); + } + _ias.erase(iter); + } + } + + void disengage(const CCVKGPUBufferView *buffer) { + auto iter = _ias.find(buffer); + if (iter != _ias.end()) { + _ias.erase(iter); + } + } + + void disengage(CCVKGPUInputAssembler *set, const CCVKGPUBufferView *buffer) { + auto iter = _ias.find(buffer); + if (iter != _ias.end()) { + iter->second.erase(set); + } + } + +private: + CCVKGPUDevice *_gpuDevice = nullptr; + ccstd::unordered_map> _ias; +}; + /** * Transport hub for data traveling between host and devices. * Record all transfer commands until batched submission. diff --git a/native/cocos/renderer/gfx-vulkan/VKInputAssembler.cpp b/native/cocos/renderer/gfx-vulkan/VKInputAssembler.cpp index 2497d77144d..962feea73a1 100644 --- a/native/cocos/renderer/gfx-vulkan/VKInputAssembler.cpp +++ b/native/cocos/renderer/gfx-vulkan/VKInputAssembler.cpp @@ -46,17 +46,21 @@ void CCVKInputAssembler::doInit(const InputAssemblerInfo &info) { _gpuInputAssembler->attributes = _attributes; _gpuInputAssembler->gpuVertexBuffers.resize(vbCount); + auto *hub = CCVKDevice::getInstance()->gpuIAHub(); for (size_t i = 0U; i < vbCount; ++i) { auto *vb = static_cast(_vertexBuffers[i]); _gpuInputAssembler->gpuVertexBuffers[i] = vb->gpuBufferView(); + hub->connect(_gpuInputAssembler, _gpuInputAssembler->gpuVertexBuffers[i].get()); } if (info.indexBuffer) { _gpuInputAssembler->gpuIndexBuffer = static_cast(info.indexBuffer)->gpuBufferView(); + hub->connect(_gpuInputAssembler, _gpuInputAssembler->gpuIndexBuffer.get()); } if (info.indirectBuffer) { _gpuInputAssembler->gpuIndirectBuffer = static_cast(info.indirectBuffer)->gpuBufferView(); + hub->connect(_gpuInputAssembler, _gpuInputAssembler->gpuIndirectBuffer.get()); } _gpuInputAssembler->vertexBuffers.resize(vbCount); @@ -73,5 +77,33 @@ void CCVKInputAssembler::doDestroy() { _gpuInputAssembler = nullptr; } +void CCVKGPUInputAssembler::shutdown() { + auto *hub = CCVKDevice::getInstance()->gpuIAHub(); + for (auto& vb : gpuVertexBuffers) { + hub->disengage(this, vb); + } + if (gpuIndexBuffer) { + hub->disengage(this, gpuIndexBuffer); + } + if (gpuIndirectBuffer) { + hub->disengage(this, gpuIndirectBuffer); + } +} + +void CCVKGPUInputAssembler::update(const CCVKGPUBufferView *oldBuffer, const CCVKGPUBufferView *newBuffer) { + for (uint32_t i = 0; i < gpuVertexBuffers.size(); ++i) { + if (gpuVertexBuffers[i].get() == oldBuffer) { + gpuVertexBuffers[i] = newBuffer; + vertexBuffers[i] = newBuffer->gpuBuffer->vkBuffer; + } + } + if (gpuIndexBuffer.get() == oldBuffer) { + gpuIndexBuffer = newBuffer; + } + if (gpuIndirectBuffer.get() == oldBuffer) { + gpuIndirectBuffer = newBuffer; + } +} + } // namespace gfx } // namespace cc diff --git a/native/cocos/renderer/gfx-vulkan/VKTexture.cpp b/native/cocos/renderer/gfx-vulkan/VKTexture.cpp index 8d9bc2e23db..95f34527d93 100644 --- a/native/cocos/renderer/gfx-vulkan/VKTexture.cpp +++ b/native/cocos/renderer/gfx-vulkan/VKTexture.cpp @@ -42,38 +42,44 @@ CCVKTexture::~CCVKTexture() { } void CCVKTexture::doInit(const TextureInfo & /*info*/) { + createTexture(_info.width, _info.height, _size); + + createTextureView(); +} + +void CCVKTexture::doInit(const TextureViewInfo &info) { + _gpuTexture = static_cast(info.texture)->gpuTexture(); + + createTextureView(); +} + +void CCVKTexture::createTexture(uint32_t width, uint32_t height, uint32_t size, bool initGPUTexture) { _gpuTexture = ccnew CCVKGPUTexture; + _gpuTexture->width = width; + _gpuTexture->height = height; + _gpuTexture->size = size; + + if (_swapchain != nullptr) { + _gpuTexture->swapchain = static_cast(_swapchain)->gpuSwapchain(); + _gpuTexture->memoryless = true; + } + _gpuTexture->type = _info.type; _gpuTexture->format = _info.format; _gpuTexture->usage = _info.usage; - _gpuTexture->width = _info.width; - _gpuTexture->height = _info.height; _gpuTexture->depth = _info.depth; _gpuTexture->arrayLayers = _info.layerCount; _gpuTexture->mipLevels = _info.levelCount; _gpuTexture->samples = _info.samples; _gpuTexture->flags = _info.flags; - _gpuTexture->size = _size; - - cmdFuncCCVKCreateTexture(CCVKDevice::getInstance(), _gpuTexture); - if (!_gpuTexture->memoryless) { - CCVKDevice::getInstance()->getMemoryStatus().textureSize += _size; - CC_PROFILE_MEMORY_INC(Texture, _size); + if (initGPUTexture) { + _gpuTexture->init(); } - - _gpuTextureView = ccnew CCVKGPUTextureView; - createTextureView(); } -void CCVKTexture::doInit(const TextureViewInfo &info) { - _gpuTexture = static_cast(info.texture)->gpuTexture(); - +void CCVKTexture::createTextureView(bool initGPUTextureView) { _gpuTextureView = ccnew CCVKGPUTextureView; - createTextureView(); -} - -void CCVKTexture::createTextureView() { _gpuTextureView->gpuTexture = _gpuTexture; _gpuTextureView->type = _viewInfo.type; _gpuTextureView->format = _viewInfo.format; @@ -81,85 +87,60 @@ void CCVKTexture::createTextureView() { _gpuTextureView->levelCount = _viewInfo.levelCount; _gpuTextureView->baseLayer = _viewInfo.baseLayer; _gpuTextureView->layerCount = _viewInfo.layerCount; - cmdFuncCCVKCreateTextureView(CCVKDevice::getInstance(), _gpuTextureView); -} -void CCVKTexture::doDestroy() { - if (_gpuTextureView) { - CCVKDevice::getInstance()->gpuRecycleBin()->collect(_gpuTextureView); - CCVKDevice::getInstance()->gpuDescriptorHub()->disengage(_gpuTextureView); - delete _gpuTextureView; - _gpuTextureView = nullptr; + if (initGPUTextureView) { + _gpuTextureView->init(); } +} - if (_gpuTexture) { - if (!_isTextureView) { - if (!_gpuTexture->memoryless) { - CCVKDevice::getInstance()->getMemoryStatus().textureSize -= _size; - CC_PROFILE_MEMORY_DEC(Texture, _size); - } - CCVKDevice::getInstance()->gpuRecycleBin()->collect(_gpuTexture); - CCVKDevice::getInstance()->gpuBarrierManager()->cancel(_gpuTexture); - delete _gpuTexture; - } - _gpuTexture = nullptr; - } +void CCVKTexture::doDestroy() { + _gpuTexture = nullptr; + _gpuTextureView = nullptr; } void CCVKTexture::doResize(uint32_t width, uint32_t height, uint32_t size) { if (!width || !height) return; + createTexture(width, height, size); - if (!_gpuTexture->memoryless) { - CCVKDevice::getInstance()->getMemoryStatus().textureSize -= _size; - CC_PROFILE_MEMORY_DEC(Texture, _size); - } + // Hold reference to keep the old textureView alive during DescriptorHub::update. + IntrusivePtr oldTextureView = _gpuTextureView; + createTextureView(); + CCVKDevice::getInstance()->gpuDescriptorHub()->update(oldTextureView, _gpuTextureView); +} - CCVKDevice::getInstance()->gpuRecycleBin()->collect(_gpuTextureView); - CCVKDevice::getInstance()->gpuRecycleBin()->collect(_gpuTexture); +///////////////////////////// Swapchain Specific ///////////////////////////// - _gpuTexture->width = width; - _gpuTexture->height = height; - _gpuTexture->size = size; - _gpuTexture->mipLevels = _info.levelCount; - cmdFuncCCVKCreateTexture(CCVKDevice::getInstance(), _gpuTexture); +void CCVKTexture::doInit(const SwapchainTextureInfo & /*info*/) { + createTexture(_info.width, _info.height, _size, false); + createTextureView(false); +} + +void CCVKGPUTexture::init() { + cmdFuncCCVKCreateTexture(CCVKDevice::getInstance(), this); - if (!_gpuTexture->memoryless) { + if (!memoryless) { CCVKDevice::getInstance()->getMemoryStatus().textureSize += size; CC_PROFILE_MEMORY_INC(Texture, size); } - - cmdFuncCCVKCreateTextureView(CCVKDevice::getInstance(), _gpuTextureView); - - CCVKDevice::getInstance()->gpuDescriptorHub()->update(_gpuTexture); } -///////////////////////////// Swapchain Specific ///////////////////////////// +void CCVKGPUTexture::shutdown() { + if (!memoryless) { + CCVKDevice::getInstance()->getMemoryStatus().textureSize -= size; + CC_PROFILE_MEMORY_DEC(Texture, size); + } -void CCVKTexture::doInit(const SwapchainTextureInfo & /*info*/) { - _gpuTexture = ccnew CCVKGPUTexture; - _gpuTexture->type = _info.type; - _gpuTexture->format = _info.format; - _gpuTexture->usage = _info.usage; - _gpuTexture->width = _info.width; - _gpuTexture->height = _info.height; - _gpuTexture->depth = _info.depth; - _gpuTexture->arrayLayers = _info.layerCount; - _gpuTexture->mipLevels = _info.levelCount; - _gpuTexture->flags = _info.flags; - _gpuTexture->samples = _info.samples; - _gpuTexture->size = _size; + CCVKDevice::getInstance()->gpuBarrierManager()->cancel(this); + CCVKDevice::getInstance()->gpuRecycleBin()->collect(this); +} - _gpuTexture->swapchain = static_cast(_swapchain)->gpuSwapchain(); - _gpuTexture->memoryless = true; +void CCVKGPUTextureView::init() { + cmdFuncCCVKCreateTextureView(CCVKDevice::getInstance(), this); +} - _gpuTextureView = ccnew CCVKGPUTextureView; - _gpuTextureView->gpuTexture = _gpuTexture; - _gpuTextureView->type = _viewInfo.type; - _gpuTextureView->format = _viewInfo.format; - _gpuTextureView->baseLevel = _viewInfo.baseLevel; - _gpuTextureView->levelCount = _viewInfo.levelCount; - _gpuTextureView->baseLayer = _viewInfo.baseLayer; - _gpuTextureView->layerCount = _viewInfo.layerCount; +void CCVKGPUTextureView::shutdown() { + CCVKDevice::getInstance()->gpuDescriptorHub()->disengage(this); + CCVKDevice::getInstance()->gpuRecycleBin()->collect(this); } } // namespace gfx diff --git a/native/cocos/renderer/gfx-vulkan/VKTexture.h b/native/cocos/renderer/gfx-vulkan/VKTexture.h index c7bc96c97f1..4aca1003d90 100644 --- a/native/cocos/renderer/gfx-vulkan/VKTexture.h +++ b/native/cocos/renderer/gfx-vulkan/VKTexture.h @@ -27,13 +27,11 @@ #include "VKStd.h" #include "gfx-base/GFXTexture.h" +#include "gfx-vulkan/VKGPUObjects.h" namespace cc { namespace gfx { -struct CCVKGPUTexture; -struct CCVKGPUTextureView; - class CC_VULKAN_API CCVKTexture final : public Texture { public: CCVKTexture(); @@ -51,10 +49,11 @@ class CC_VULKAN_API CCVKTexture final : public Texture { void doDestroy() override; void doResize(uint32_t width, uint32_t height, uint32_t size) override; - void createTextureView(); + void createTexture(uint32_t width, uint32_t height, uint32_t size, bool initGPUTexture = true); + void createTextureView(bool initGPUTextureView = true); - CCVKGPUTexture *_gpuTexture = nullptr; - CCVKGPUTextureView *_gpuTextureView = nullptr; + IntrusivePtr _gpuTexture; + IntrusivePtr _gpuTextureView; }; } // namespace gfx diff --git a/native/cocos/renderer/gfx-vulkan/states/VKSampler.cpp b/native/cocos/renderer/gfx-vulkan/states/VKSampler.cpp index a3c0bd5befe..d3a3979fce0 100644 --- a/native/cocos/renderer/gfx-vulkan/states/VKSampler.cpp +++ b/native/cocos/renderer/gfx-vulkan/states/VKSampler.cpp @@ -42,16 +42,16 @@ CCVKSampler::CCVKSampler(const SamplerInfo &info) : Sampler(info) { _gpuSampler->addressW = _info.addressW; _gpuSampler->maxAnisotropy = _info.maxAnisotropy; _gpuSampler->cmpFunc = _info.cmpFunc; + _gpuSampler->init(); +} - cmdFuncCCVKCreateSampler(CCVKDevice::getInstance(), _gpuSampler); +void CCVKGPUSampler::init() { + cmdFuncCCVKCreateSampler(CCVKDevice::getInstance(), this); } -CCVKSampler::~CCVKSampler() { // NOLINT(bugprone-exception-escape) garbage collect may throw - if (_gpuSampler) { - CCVKDevice::getInstance()->gpuDescriptorHub()->disengage(_gpuSampler); - CCVKDevice::getInstance()->gpuRecycleBin()->collect(_gpuSampler); - _gpuSampler = nullptr; - } +void CCVKGPUSampler::shutdown() { + CCVKDevice::getInstance()->gpuDescriptorHub()->disengage(this); + CCVKDevice::getInstance()->gpuRecycleBin()->collect(this); } } // namespace gfx diff --git a/native/cocos/renderer/gfx-vulkan/states/VKSampler.h b/native/cocos/renderer/gfx-vulkan/states/VKSampler.h index 7aa2d7d049d..33f8f287ffd 100644 --- a/native/cocos/renderer/gfx-vulkan/states/VKSampler.h +++ b/native/cocos/renderer/gfx-vulkan/states/VKSampler.h @@ -27,21 +27,20 @@ #include "../VKStd.h" #include "gfx-base/states/GFXSampler.h" +#include "gfx-vulkan/VKGPUObjects.h" namespace cc { namespace gfx { -struct CCVKGPUSampler; - class CC_VULKAN_API CCVKSampler final : public Sampler { public: explicit CCVKSampler(const SamplerInfo &info); - ~CCVKSampler() override; + ~CCVKSampler() override = default; inline CCVKGPUSampler *gpuSampler() const { return _gpuSampler; } protected: - CCVKGPUSampler *_gpuSampler = nullptr; + IntrusivePtr _gpuSampler; }; } // namespace gfx From ae26608e57c4060b4d18dbba5942dad91ceec659 Mon Sep 17 00:00:00 2001 From: Zeqiang Li Date: Tue, 18 Oct 2022 10:56:26 +0800 Subject: [PATCH 033/829] adapt to develop (#13070) --- cc.config.json | 2 +- cocos/{core => }/gfx/index.ems.ts | 4 +- cocos/{core => }/gfx/webgpu/override.ts | 2 +- cocos/{core => }/gfx/webgpu/webgpu-define.ts | 2 +- cocos/webgpu/webgpu_wasm.js | 3684 ++++++++++++++++- .../renderer/gfx-wgpu/WGPUDescriptorSet.cpp | 47 +- native/cocos/renderer/gfx-wgpu/WGPUExports.h | 34 +- 7 files changed, 3721 insertions(+), 54 deletions(-) rename cocos/{core => }/gfx/index.ems.ts (95%) rename cocos/{core => }/gfx/webgpu/override.ts (95%) rename cocos/{core => }/gfx/webgpu/webgpu-define.ts (99%) diff --git a/cc.config.json b/cc.config.json index f5363b2b62f..b6d7f250d0e 100644 --- a/cc.config.json +++ b/cc.config.json @@ -252,7 +252,7 @@ "test": "context.buildTimeConstants && context.buildTimeConstants.WEBGPU", "isVirtualModule": false, "overrides": { - "cocos/core/gfx/index.ts": "cocos/core/gfx/index.ems.ts" + "cocos/gfx/index.ts": "cocos/gfx/index.ems.ts" } }, { diff --git a/cocos/core/gfx/index.ems.ts b/cocos/gfx/index.ems.ts similarity index 95% rename from cocos/core/gfx/index.ems.ts rename to cocos/gfx/index.ems.ts index 099d9db83ac..b6abb8332f1 100644 --- a/cocos/core/gfx/index.ems.ts +++ b/cocos/gfx/index.ems.ts @@ -28,8 +28,8 @@ * @module gfx */ -import { legacyCC } from '../global-exports'; -import { gfx, webgpuAdapter } from '../../webgpu/instantiated'; +import { legacyCC } from '../core/global-exports'; +import { gfx, webgpuAdapter } from '../webgpu/instantiated'; import './deprecated-3.0.0'; diff --git a/cocos/core/gfx/webgpu/override.ts b/cocos/gfx/webgpu/override.ts similarity index 95% rename from cocos/core/gfx/webgpu/override.ts rename to cocos/gfx/webgpu/override.ts index c5a7cd92ede..62d5d0dde21 100644 --- a/cocos/core/gfx/webgpu/override.ts +++ b/cocos/gfx/webgpu/override.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/no-unused-expressions */ /* eslint-disable import/no-mutable-exports */ import { WEBGPU } from 'internal:constants'; -import { gfx, promiseForWebGPUInstantiation } from '../../../webgpu/instantiated'; +import { gfx, promiseForWebGPUInstantiation } from '../../webgpu/instantiated'; export let Device: any; export let WebGPUDevice: any; diff --git a/cocos/core/gfx/webgpu/webgpu-define.ts b/cocos/gfx/webgpu/webgpu-define.ts similarity index 99% rename from cocos/core/gfx/webgpu/webgpu-define.ts rename to cocos/gfx/webgpu/webgpu-define.ts index 1924b9caf9a..922977199e0 100644 --- a/cocos/core/gfx/webgpu/webgpu-define.ts +++ b/cocos/gfx/webgpu/webgpu-define.ts @@ -28,7 +28,7 @@ */ import { WEBGPU } from 'internal:constants'; -import { gfx, webgpuAdapter, glslalgWasmModule, promiseForWebGPUInstantiation } from '../../../webgpu/instantiated'; +import { gfx, webgpuAdapter, glslalgWasmModule, promiseForWebGPUInstantiation } from '../../webgpu/instantiated'; import { Texture, CommandBuffer, DescriptorSet, Device, InputAssembler, Buffer, Shader } from './override'; diff --git a/cocos/webgpu/webgpu_wasm.js b/cocos/webgpu/webgpu_wasm.js index 973bfbb9a31..a005c94b948 100644 --- a/cocos/webgpu/webgpu_wasm.js +++ b/cocos/webgpu/webgpu_wasm.js @@ -1,16 +1,3680 @@ - var wasmDevice = (() => { - var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; - - return ( -function(wasmDevice) { - wasmDevice = wasmDevice || {}; + var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; + + return ( + function(wasmDevice) { + wasmDevice = wasmDevice || {}; + + var Module = typeof wasmDevice != "undefined" ? wasmDevice : {}; + var readyPromiseResolve, readyPromiseReject; + Module["ready"] = new Promise(function(resolve, reject) { + readyPromiseResolve = resolve; + readyPromiseReject = reject + }); + var moduleOverrides = Object.assign({}, Module); + var arguments_ = []; + var thisProgram = "./this.program"; + var quit_ = (status, toThrow) => { + throw toThrow + }; + var ENVIRONMENT_IS_WEB = true; + var ENVIRONMENT_IS_WORKER = false; + var scriptDirectory = ""; + + function locateFile(path) { + if (Module["locateFile"]) { + return Module["locateFile"](path, scriptDirectory) + } + return scriptDirectory + path + } + var read_, readAsync, readBinary, setWindowTitle; + if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { + if (ENVIRONMENT_IS_WORKER) { + scriptDirectory = self.location.href + } else if (typeof document != "undefined" && document.currentScript) { + scriptDirectory = document.currentScript.src + } + if (_scriptDir) { + scriptDirectory = _scriptDir + } + if (scriptDirectory.indexOf("blob:") !== 0) { + scriptDirectory = scriptDirectory.substr(0, scriptDirectory.replace(/[?#].*/, "").lastIndexOf("/") + 1) + } else { + scriptDirectory = "" + } { + read_ = url => { + var xhr = new XMLHttpRequest; + xhr.open("GET", url, false); + xhr.send(null); + return xhr.responseText + }; + if (ENVIRONMENT_IS_WORKER) { + readBinary = url => { + var xhr = new XMLHttpRequest; + xhr.open("GET", url, false); + xhr.responseType = "arraybuffer"; + xhr.send(null); + return new Uint8Array(xhr.response) + } + } + readAsync = (url, onload, onerror) => { + var xhr = new XMLHttpRequest; + xhr.open("GET", url, true); + xhr.responseType = "arraybuffer"; + xhr.onload = () => { + if (xhr.status == 200 || xhr.status == 0 && xhr.response) { + onload(xhr.response); + return + } + onerror() + }; + xhr.onerror = onerror; + xhr.send(null) + } + } + setWindowTitle = title => document.title = title + } else {} + var out = Module["print"] || console.log.bind(console); + var err = Module["printErr"] || console.warn.bind(console); + Object.assign(Module, moduleOverrides); + moduleOverrides = null; + if (Module["arguments"]) arguments_ = Module["arguments"]; + if (Module["thisProgram"]) thisProgram = Module["thisProgram"]; + if (Module["quit"]) quit_ = Module["quit"]; + var POINTER_SIZE = 4; + var tempRet0 = 0; + var setTempRet0 = value => { + tempRet0 = value + }; + var wasmBinary; + if (Module["wasmBinary"]) wasmBinary = Module["wasmBinary"]; + var noExitRuntime = Module["noExitRuntime"] || true; + if (typeof WebAssembly != "object") { + abort("no native wasm support detected") + } + var wasmMemory; + var ABORT = false; + var EXITSTATUS; + + function assert(condition, text) { + if (!condition) { + abort(text) + } + } + var UTF8Decoder = typeof TextDecoder != "undefined" ? new TextDecoder("utf8") : undefined; + + function UTF8ArrayToString(heapOrArray, idx, maxBytesToRead) { + var endIdx = idx + maxBytesToRead; + var endPtr = idx; + while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr; + if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) { + return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr)) + } + var str = ""; + while (idx < endPtr) { + var u0 = heapOrArray[idx++]; + if (!(u0 & 128)) { + str += String.fromCharCode(u0); + continue + } + var u1 = heapOrArray[idx++] & 63; + if ((u0 & 224) == 192) { + str += String.fromCharCode((u0 & 31) << 6 | u1); + continue + } + var u2 = heapOrArray[idx++] & 63; + if ((u0 & 240) == 224) { + u0 = (u0 & 15) << 12 | u1 << 6 | u2 + } else { + u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | heapOrArray[idx++] & 63 + } + if (u0 < 65536) { + str += String.fromCharCode(u0) + } else { + var ch = u0 - 65536; + str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023) + } + } + return str + } + + function UTF8ToString(ptr, maxBytesToRead) { + return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : "" + } + + function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) { + if (!(maxBytesToWrite > 0)) return 0; + var startIdx = outIdx; + var endIdx = outIdx + maxBytesToWrite - 1; + for (var i = 0; i < str.length; ++i) { + var u = str.charCodeAt(i); + if (u >= 55296 && u <= 57343) { + var u1 = str.charCodeAt(++i); + u = 65536 + ((u & 1023) << 10) | u1 & 1023 + } + if (u <= 127) { + if (outIdx >= endIdx) break; + heap[outIdx++] = u + } else if (u <= 2047) { + if (outIdx + 1 >= endIdx) break; + heap[outIdx++] = 192 | u >> 6; + heap[outIdx++] = 128 | u & 63 + } else if (u <= 65535) { + if (outIdx + 2 >= endIdx) break; + heap[outIdx++] = 224 | u >> 12; + heap[outIdx++] = 128 | u >> 6 & 63; + heap[outIdx++] = 128 | u & 63 + } else { + if (outIdx + 3 >= endIdx) break; + heap[outIdx++] = 240 | u >> 18; + heap[outIdx++] = 128 | u >> 12 & 63; + heap[outIdx++] = 128 | u >> 6 & 63; + heap[outIdx++] = 128 | u & 63 + } + } + heap[outIdx] = 0; + return outIdx - startIdx + } + + function stringToUTF8(str, outPtr, maxBytesToWrite) { + return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite) + } + + function lengthBytesUTF8(str) { + var len = 0; + for (var i = 0; i < str.length; ++i) { + var c = str.charCodeAt(i); + if (c <= 127) { + len++ + } else if (c <= 2047) { + len += 2 + } else if (c >= 55296 && c <= 57343) { + len += 4; + ++i + } else { + len += 3 + } + } + return len + } + var buffer, HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64; + + function updateGlobalBufferAndViews(buf) { + buffer = buf; + Module["HEAP8"] = HEAP8 = new Int8Array(buf); + Module["HEAP16"] = HEAP16 = new Int16Array(buf); + Module["HEAP32"] = HEAP32 = new Int32Array(buf); + Module["HEAPU8"] = HEAPU8 = new Uint8Array(buf); + Module["HEAPU16"] = HEAPU16 = new Uint16Array(buf); + Module["HEAPU32"] = HEAPU32 = new Uint32Array(buf); + Module["HEAPF32"] = HEAPF32 = new Float32Array(buf); + Module["HEAPF64"] = HEAPF64 = new Float64Array(buf) + } + var INITIAL_MEMORY = Module["INITIAL_MEMORY"] || 16777216; + var wasmTable; + var __ATPRERUN__ = []; + var __ATINIT__ = []; + var __ATPOSTRUN__ = []; + var runtimeInitialized = false; + + function preRun() { + if (Module["preRun"]) { + if (typeof Module["preRun"] == "function") Module["preRun"] = [Module["preRun"]]; + while (Module["preRun"].length) { + addOnPreRun(Module["preRun"].shift()) + } + } + callRuntimeCallbacks(__ATPRERUN__) + } + + function initRuntime() { + runtimeInitialized = true; + callRuntimeCallbacks(__ATINIT__) + } + + function postRun() { + if (Module["postRun"]) { + if (typeof Module["postRun"] == "function") Module["postRun"] = [Module["postRun"]]; + while (Module["postRun"].length) { + addOnPostRun(Module["postRun"].shift()) + } + } + callRuntimeCallbacks(__ATPOSTRUN__) + } + + function addOnPreRun(cb) { + __ATPRERUN__.unshift(cb) + } + + function addOnInit(cb) { + __ATINIT__.unshift(cb) + } + + function addOnPostRun(cb) { + __ATPOSTRUN__.unshift(cb) + } + var runDependencies = 0; + var runDependencyWatcher = null; + var dependenciesFulfilled = null; + + function addRunDependency(id) { + runDependencies++; + if (Module["monitorRunDependencies"]) { + Module["monitorRunDependencies"](runDependencies) + } + } + + function removeRunDependency(id) { + runDependencies--; + if (Module["monitorRunDependencies"]) { + Module["monitorRunDependencies"](runDependencies) + } + if (runDependencies == 0) { + if (runDependencyWatcher !== null) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null + } + if (dependenciesFulfilled) { + var callback = dependenciesFulfilled; + dependenciesFulfilled = null; + callback() + } + } + } + + function abort(what) { + { + if (Module["onAbort"]) { + Module["onAbort"](what) + } + } + what = "Aborted(" + what + ")"; + err(what); + ABORT = true; + EXITSTATUS = 1; + what += ". Build with -sASSERTIONS for more info."; + var e = new WebAssembly.RuntimeError(what); + readyPromiseReject(e); + throw e + } + var dataURIPrefix = "data:application/octet-stream;base64,"; + + function isDataURI(filename) { + return filename.startsWith(dataURIPrefix) + } + var wasmBinaryFile; + wasmBinaryFile = "webgpu_wasm.wasm"; + if (!isDataURI(wasmBinaryFile)) { + wasmBinaryFile = locateFile(wasmBinaryFile) + } + + function getBinary(file) { + try { + if (file == wasmBinaryFile && wasmBinary) { + return new Uint8Array(wasmBinary) + } + if (readBinary) { + return readBinary(file) + } + throw "both async and sync fetching of the wasm failed" + } catch (err) { + abort(err) + } + } + + function getBinaryPromise() { + if (!wasmBinary && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER)) { + if (typeof fetch == "function") { + return fetch(wasmBinaryFile, { + credentials: "same-origin" + }).then(function(response) { + if (!response["ok"]) { + throw "failed to load wasm binary file at '" + wasmBinaryFile + "'" + } + return response["arrayBuffer"]() + }).catch(function() { + return getBinary(wasmBinaryFile) + }) + } + } + return Promise.resolve().then(function() { + return getBinary(wasmBinaryFile) + }) + } + + function createWasm() { + var info = { + "a": asmLibraryArg + }; + + function receiveInstance(instance, module) { + var exports = instance.exports; + Module["asm"] = exports; + wasmMemory = Module["asm"]["_a"]; + updateGlobalBufferAndViews(wasmMemory.buffer); + wasmTable = Module["asm"]["ab"]; + addOnInit(Module["asm"]["$a"]); + removeRunDependency("wasm-instantiate") + } + addRunDependency("wasm-instantiate"); + + function receiveInstantiationResult(result) { + receiveInstance(result["instance"]) + } + + function instantiateArrayBuffer(receiver) { + return getBinaryPromise().then(function(binary) { + return WebAssembly.instantiate(binary, info) + }).then(function(instance) { + return instance + }).then(receiver, function(reason) { + err("failed to asynchronously prepare wasm: " + reason); + abort(reason) + }) + } + + function instantiateAsync() { + if (!wasmBinary && typeof WebAssembly.instantiateStreaming == "function" && !isDataURI(wasmBinaryFile) && typeof fetch == "function") { + return fetch(wasmBinaryFile, { + credentials: "same-origin" + }).then(function(response) { + var result = WebAssembly.instantiateStreaming(response, info); + return result.then(receiveInstantiationResult, function(reason) { + err("wasm streaming compile failed: " + reason); + err("falling back to ArrayBuffer instantiation"); + return instantiateArrayBuffer(receiveInstantiationResult) + }) + }) + } else { + return instantiateArrayBuffer(receiveInstantiationResult) + } + } + if (Module["instantiateWasm"]) { + try { + var exports = Module["instantiateWasm"](info, receiveInstance); + return exports + } catch (e) { + err("Module.instantiateWasm callback failed with error: " + e); + return false + } + } + instantiateAsync().catch(readyPromiseReject); + return {} + } + + function ExitStatus(status) { + this.name = "ExitStatus"; + this.message = "Program terminated with exit(" + status + ")"; + this.status = status + } + + function callRuntimeCallbacks(callbacks) { + while (callbacks.length > 0) { + callbacks.shift()(Module) + } + } + + function handleException(e) { + if (e instanceof ExitStatus || e == "unwind") { + return EXITSTATUS + } + quit_(1, e) + } + var structRegistrations = {}; + + function runDestructors(destructors) { + while (destructors.length) { + var ptr = destructors.pop(); + var del = destructors.pop(); + del(ptr) + } + } + + function simpleReadValueFromPointer(pointer) { + return this["fromWireType"](HEAP32[pointer >> 2]) + } + var awaitingDependencies = {}; + var registeredTypes = {}; + var typeDependencies = {}; + var char_0 = 48; + var char_9 = 57; + + function makeLegalFunctionName(name) { + if (undefined === name) { + return "_unknown" + } + name = name.replace(/[^a-zA-Z0-9_]/g, "$"); + var f = name.charCodeAt(0); + if (f >= char_0 && f <= char_9) { + return "_" + name + } + return name + } + + function createNamedFunction(name, body) { + name = makeLegalFunctionName(name); + return new Function("body", "return function " + name + "() {\n" + ' "use strict";' + " return body.apply(this, arguments);\n" + "};\n")(body) + } + + function extendError(baseErrorType, errorName) { + var errorClass = createNamedFunction(errorName, function(message) { + this.name = errorName; + this.message = message; + var stack = new Error(message).stack; + if (stack !== undefined) { + this.stack = this.toString() + "\n" + stack.replace(/^Error(:[^\n]*)?\n/, "") + } + }); + errorClass.prototype = Object.create(baseErrorType.prototype); + errorClass.prototype.constructor = errorClass; + errorClass.prototype.toString = function() { + if (this.message === undefined) { + return this.name + } else { + return this.name + ": " + this.message + } + }; + return errorClass + } + var InternalError = undefined; + + function throwInternalError(message) { + throw new InternalError(message) + } + + function whenDependentTypesAreResolved(myTypes, dependentTypes, getTypeConverters) { + myTypes.forEach(function(type) { + typeDependencies[type] = dependentTypes + }); + + function onComplete(typeConverters) { + var myTypeConverters = getTypeConverters(typeConverters); + if (myTypeConverters.length !== myTypes.length) { + throwInternalError("Mismatched type converter count") + } + for (var i = 0; i < myTypes.length; ++i) { + registerType(myTypes[i], myTypeConverters[i]) + } + } + var typeConverters = new Array(dependentTypes.length); + var unregisteredTypes = []; + var registered = 0; + dependentTypes.forEach((dt, i) => { + if (registeredTypes.hasOwnProperty(dt)) { + typeConverters[i] = registeredTypes[dt] + } else { + unregisteredTypes.push(dt); + if (!awaitingDependencies.hasOwnProperty(dt)) { + awaitingDependencies[dt] = [] + } + awaitingDependencies[dt].push(() => { + typeConverters[i] = registeredTypes[dt]; + ++registered; + if (registered === unregisteredTypes.length) { + onComplete(typeConverters) + } + }) + } + }); + if (0 === unregisteredTypes.length) { + onComplete(typeConverters) + } + } + + function __embind_finalize_value_object(structType) { + var reg = structRegistrations[structType]; + delete structRegistrations[structType]; + var rawConstructor = reg.rawConstructor; + var rawDestructor = reg.rawDestructor; + var fieldRecords = reg.fields; + var fieldTypes = fieldRecords.map(field => field.getterReturnType).concat(fieldRecords.map(field => field.setterArgumentType)); + whenDependentTypesAreResolved([structType], fieldTypes, fieldTypes => { + var fields = {}; + fieldRecords.forEach((field, i) => { + var fieldName = field.fieldName; + var getterReturnType = fieldTypes[i]; + var getter = field.getter; + var getterContext = field.getterContext; + var setterArgumentType = fieldTypes[i + fieldRecords.length]; + var setter = field.setter; + var setterContext = field.setterContext; + fields[fieldName] = { + read: ptr => { + return getterReturnType["fromWireType"](getter(getterContext, ptr)) + }, + write: (ptr, o) => { + var destructors = []; + setter(setterContext, ptr, setterArgumentType["toWireType"](destructors, o)); + runDestructors(destructors) + } + } + }); + return [{ + name: reg.name, + "fromWireType": function(ptr) { + var rv = {}; + for (var i in fields) { + rv[i] = fields[i].read(ptr) + } + rawDestructor(ptr); + return rv + }, + "toWireType": function(destructors, o) { + for (var fieldName in fields) { + if (!(fieldName in o)) { + throw new TypeError('Missing field: "' + fieldName + '"') + } + } + var ptr = rawConstructor(); + for (fieldName in fields) { + fields[fieldName].write(ptr, o[fieldName]) + } + if (destructors !== null) { + destructors.push(rawDestructor, ptr) + } + return ptr + }, + "argPackAdvance": 8, + "readValueFromPointer": simpleReadValueFromPointer, + destructorFunction: rawDestructor + }] + }) + } + + function __embind_register_bigint(primitiveType, name, size, minRange, maxRange) {} + + function getShiftFromSize(size) { + switch (size) { + case 1: + return 0; + case 2: + return 1; + case 4: + return 2; + case 8: + return 3; + default: + throw new TypeError("Unknown type size: " + size) + } + } + + function embind_init_charCodes() { + var codes = new Array(256); + for (var i = 0; i < 256; ++i) { + codes[i] = String.fromCharCode(i) + } + embind_charCodes = codes + } + var embind_charCodes = undefined; + + function readLatin1String(ptr) { + var ret = ""; + var c = ptr; + while (HEAPU8[c]) { + ret += embind_charCodes[HEAPU8[c++]] + } + return ret + } + var BindingError = undefined; + + function throwBindingError(message) { + throw new BindingError(message) + } + + function registerType(rawType, registeredInstance, options = {}) { + if (!("argPackAdvance" in registeredInstance)) { + throw new TypeError("registerType registeredInstance requires argPackAdvance") + } + var name = registeredInstance.name; + if (!rawType) { + throwBindingError('type "' + name + '" must have a positive integer typeid pointer') + } + if (registeredTypes.hasOwnProperty(rawType)) { + if (options.ignoreDuplicateRegistrations) { + return + } else { + throwBindingError("Cannot register type '" + name + "' twice") + } + } + registeredTypes[rawType] = registeredInstance; + delete typeDependencies[rawType]; + if (awaitingDependencies.hasOwnProperty(rawType)) { + var callbacks = awaitingDependencies[rawType]; + delete awaitingDependencies[rawType]; + callbacks.forEach(cb => cb()) + } + } + + function __embind_register_bool(rawType, name, size, trueValue, falseValue) { + var shift = getShiftFromSize(size); + name = readLatin1String(name); + registerType(rawType, { + name: name, + "fromWireType": function(wt) { + return !!wt + }, + "toWireType": function(destructors, o) { + return o ? trueValue : falseValue + }, + "argPackAdvance": 8, + "readValueFromPointer": function(pointer) { + var heap; + if (size === 1) { + heap = HEAP8 + } else if (size === 2) { + heap = HEAP16 + } else if (size === 4) { + heap = HEAP32 + } else { + throw new TypeError("Unknown boolean type size: " + name) + } + return this["fromWireType"](heap[pointer >> shift]) + }, + destructorFunction: null + }) + } + + function ClassHandle_isAliasOf(other) { + if (!(this instanceof ClassHandle)) { + return false + } + if (!(other instanceof ClassHandle)) { + return false + } + var leftClass = this.$$.ptrType.registeredClass; + var left = this.$$.ptr; + var rightClass = other.$$.ptrType.registeredClass; + var right = other.$$.ptr; + while (leftClass.baseClass) { + left = leftClass.upcast(left); + leftClass = leftClass.baseClass + } + while (rightClass.baseClass) { + right = rightClass.upcast(right); + rightClass = rightClass.baseClass + } + return leftClass === rightClass && left === right + } + + function shallowCopyInternalPointer(o) { + return { + count: o.count, + deleteScheduled: o.deleteScheduled, + preservePointerOnDelete: o.preservePointerOnDelete, + ptr: o.ptr, + ptrType: o.ptrType, + smartPtr: o.smartPtr, + smartPtrType: o.smartPtrType + } + } + + function throwInstanceAlreadyDeleted(obj) { + function getInstanceTypeName(handle) { + return handle.$$.ptrType.registeredClass.name + } + throwBindingError(getInstanceTypeName(obj) + " instance already deleted") + } + var finalizationRegistry = false; + + function detachFinalizer(handle) {} + + function runDestructor($$) { + if ($$.smartPtr) { + $$.smartPtrType.rawDestructor($$.smartPtr) + } else { + $$.ptrType.registeredClass.rawDestructor($$.ptr) + } + } + + function releaseClassHandle($$) { + $$.count.value -= 1; + var toDelete = 0 === $$.count.value; + if (toDelete) { + runDestructor($$) + } + } + + function downcastPointer(ptr, ptrClass, desiredClass) { + if (ptrClass === desiredClass) { + return ptr + } + if (undefined === desiredClass.baseClass) { + return null + } + var rv = downcastPointer(ptr, ptrClass, desiredClass.baseClass); + if (rv === null) { + return null + } + return desiredClass.downcast(rv) + } + var registeredPointers = {}; + + function getInheritedInstanceCount() { + return Object.keys(registeredInstances).length + } + + function getLiveInheritedInstances() { + var rv = []; + for (var k in registeredInstances) { + if (registeredInstances.hasOwnProperty(k)) { + rv.push(registeredInstances[k]) + } + } + return rv + } + var deletionQueue = []; + + function flushPendingDeletes() { + while (deletionQueue.length) { + var obj = deletionQueue.pop(); + obj.$$.deleteScheduled = false; + obj["delete"]() + } + } + var delayFunction = undefined; + + function setDelayFunction(fn) { + delayFunction = fn; + if (deletionQueue.length && delayFunction) { + delayFunction(flushPendingDeletes) + } + } + + function init_embind() { + Module["getInheritedInstanceCount"] = getInheritedInstanceCount; + Module["getLiveInheritedInstances"] = getLiveInheritedInstances; + Module["flushPendingDeletes"] = flushPendingDeletes; + Module["setDelayFunction"] = setDelayFunction + } + var registeredInstances = {}; + + function getBasestPointer(class_, ptr) { + if (ptr === undefined) { + throwBindingError("ptr should not be undefined") + } + while (class_.baseClass) { + ptr = class_.upcast(ptr); + class_ = class_.baseClass + } + return ptr + } + + function getInheritedInstance(class_, ptr) { + ptr = getBasestPointer(class_, ptr); + return registeredInstances[ptr] + } + + function makeClassHandle(prototype, record) { + if (!record.ptrType || !record.ptr) { + throwInternalError("makeClassHandle requires ptr and ptrType") + } + var hasSmartPtrType = !!record.smartPtrType; + var hasSmartPtr = !!record.smartPtr; + if (hasSmartPtrType !== hasSmartPtr) { + throwInternalError("Both smartPtrType and smartPtr must be specified") + } + record.count = { + value: 1 + }; + return attachFinalizer(Object.create(prototype, { + $$: { + value: record + } + })) + } + + function RegisteredPointer_fromWireType(ptr) { + var rawPointer = this.getPointee(ptr); + if (!rawPointer) { + this.destructor(ptr); + return null + } + var registeredInstance = getInheritedInstance(this.registeredClass, rawPointer); + if (undefined !== registeredInstance) { + if (0 === registeredInstance.$$.count.value) { + registeredInstance.$$.ptr = rawPointer; + registeredInstance.$$.smartPtr = ptr; + return registeredInstance["clone"]() + } else { + var rv = registeredInstance["clone"](); + this.destructor(ptr); + return rv + } + } + + function makeDefaultHandle() { + if (this.isSmartPointer) { + return makeClassHandle(this.registeredClass.instancePrototype, { + ptrType: this.pointeeType, + ptr: rawPointer, + smartPtrType: this, + smartPtr: ptr + }) + } else { + return makeClassHandle(this.registeredClass.instancePrototype, { + ptrType: this, + ptr: ptr + }) + } + } + var actualType = this.registeredClass.getActualType(rawPointer); + var registeredPointerRecord = registeredPointers[actualType]; + if (!registeredPointerRecord) { + return makeDefaultHandle.call(this) + } + var toType; + if (this.isConst) { + toType = registeredPointerRecord.constPointerType + } else { + toType = registeredPointerRecord.pointerType + } + var dp = downcastPointer(rawPointer, this.registeredClass, toType.registeredClass); + if (dp === null) { + return makeDefaultHandle.call(this) + } + if (this.isSmartPointer) { + return makeClassHandle(toType.registeredClass.instancePrototype, { + ptrType: toType, + ptr: dp, + smartPtrType: this, + smartPtr: ptr + }) + } else { + return makeClassHandle(toType.registeredClass.instancePrototype, { + ptrType: toType, + ptr: dp + }) + } + } + + function attachFinalizer(handle) { + if ("undefined" === typeof FinalizationRegistry) { + attachFinalizer = handle => handle; + return handle + } + finalizationRegistry = new FinalizationRegistry(info => { + releaseClassHandle(info.$$) + }); + attachFinalizer = handle => { + var $$ = handle.$$; + var hasSmartPtr = !!$$.smartPtr; + if (hasSmartPtr) { + var info = { + $$: $$ + }; + finalizationRegistry.register(handle, info, handle) + } + return handle + }; + detachFinalizer = handle => finalizationRegistry.unregister(handle); + return attachFinalizer(handle) + } + + function ClassHandle_clone() { + if (!this.$$.ptr) { + throwInstanceAlreadyDeleted(this) + } + if (this.$$.preservePointerOnDelete) { + this.$$.count.value += 1; + return this + } else { + var clone = attachFinalizer(Object.create(Object.getPrototypeOf(this), { + $$: { + value: shallowCopyInternalPointer(this.$$) + } + })); + clone.$$.count.value += 1; + clone.$$.deleteScheduled = false; + return clone + } + } + + function ClassHandle_delete() { + if (!this.$$.ptr) { + throwInstanceAlreadyDeleted(this) + } + if (this.$$.deleteScheduled && !this.$$.preservePointerOnDelete) { + throwBindingError("Object already scheduled for deletion") + } + detachFinalizer(this); + releaseClassHandle(this.$$); + if (!this.$$.preservePointerOnDelete) { + this.$$.smartPtr = undefined; + this.$$.ptr = undefined + } + } + + function ClassHandle_isDeleted() { + return !this.$$.ptr + } + + function ClassHandle_deleteLater() { + if (!this.$$.ptr) { + throwInstanceAlreadyDeleted(this) + } + if (this.$$.deleteScheduled && !this.$$.preservePointerOnDelete) { + throwBindingError("Object already scheduled for deletion") + } + deletionQueue.push(this); + if (deletionQueue.length === 1 && delayFunction) { + delayFunction(flushPendingDeletes) + } + this.$$.deleteScheduled = true; + return this + } + + function init_ClassHandle() { + ClassHandle.prototype["isAliasOf"] = ClassHandle_isAliasOf; + ClassHandle.prototype["clone"] = ClassHandle_clone; + ClassHandle.prototype["delete"] = ClassHandle_delete; + ClassHandle.prototype["isDeleted"] = ClassHandle_isDeleted; + ClassHandle.prototype["deleteLater"] = ClassHandle_deleteLater + } + + function ClassHandle() {} + + function ensureOverloadTable(proto, methodName, humanName) { + if (undefined === proto[methodName].overloadTable) { + var prevFunc = proto[methodName]; + proto[methodName] = function() { + if (!proto[methodName].overloadTable.hasOwnProperty(arguments.length)) { + throwBindingError("Function '" + humanName + "' called with an invalid number of arguments (" + arguments.length + ") - expects one of (" + proto[methodName].overloadTable + ")!") + } + return proto[methodName].overloadTable[arguments.length].apply(this, arguments) + }; + proto[methodName].overloadTable = []; + proto[methodName].overloadTable[prevFunc.argCount] = prevFunc + } + } + + function exposePublicSymbol(name, value, numArguments) { + if (Module.hasOwnProperty(name)) { + if (undefined === numArguments || undefined !== Module[name].overloadTable && undefined !== Module[name].overloadTable[numArguments]) { + throwBindingError("Cannot register public name '" + name + "' twice") + } + ensureOverloadTable(Module, name, name); + if (Module.hasOwnProperty(numArguments)) { + throwBindingError("Cannot register multiple overloads of a function with the same number of arguments (" + numArguments + ")!") + } + Module[name].overloadTable[numArguments] = value + } else { + Module[name] = value; + if (undefined !== numArguments) { + Module[name].numArguments = numArguments + } + } + } + + function RegisteredClass(name, constructor, instancePrototype, rawDestructor, baseClass, getActualType, upcast, downcast) { + this.name = name; + this.constructor = constructor; + this.instancePrototype = instancePrototype; + this.rawDestructor = rawDestructor; + this.baseClass = baseClass; + this.getActualType = getActualType; + this.upcast = upcast; + this.downcast = downcast; + this.pureVirtualFunctions = [] + } + + function upcastPointer(ptr, ptrClass, desiredClass) { + while (ptrClass !== desiredClass) { + if (!ptrClass.upcast) { + throwBindingError("Expected null or instance of " + desiredClass.name + ", got an instance of " + ptrClass.name) + } + ptr = ptrClass.upcast(ptr); + ptrClass = ptrClass.baseClass + } + return ptr + } + + function constNoSmartPtrRawPointerToWireType(destructors, handle) { + if (handle === null) { + if (this.isReference) { + throwBindingError("null is not a valid " + this.name) + } + return 0 + } + if (!handle.$$) { + throwBindingError('Cannot pass "' + embindRepr(handle) + '" as a ' + this.name) + } + if (!handle.$$.ptr) { + throwBindingError("Cannot pass deleted object as a pointer of type " + this.name) + } + var handleClass = handle.$$.ptrType.registeredClass; + var ptr = upcastPointer(handle.$$.ptr, handleClass, this.registeredClass); + return ptr + } + + function genericPointerToWireType(destructors, handle) { + var ptr; + if (handle === null) { + if (this.isReference) { + throwBindingError("null is not a valid " + this.name) + } + if (this.isSmartPointer) { + ptr = this.rawConstructor(); + if (destructors !== null) { + destructors.push(this.rawDestructor, ptr) + } + return ptr + } else { + return 0 + } + } + if (!handle.$$) { + throwBindingError('Cannot pass "' + embindRepr(handle) + '" as a ' + this.name) + } + if (!handle.$$.ptr) { + throwBindingError("Cannot pass deleted object as a pointer of type " + this.name) + } + if (!this.isConst && handle.$$.ptrType.isConst) { + throwBindingError("Cannot convert argument of type " + (handle.$$.smartPtrType ? handle.$$.smartPtrType.name : handle.$$.ptrType.name) + " to parameter type " + this.name) + } + var handleClass = handle.$$.ptrType.registeredClass; + ptr = upcastPointer(handle.$$.ptr, handleClass, this.registeredClass); + if (this.isSmartPointer) { + if (undefined === handle.$$.smartPtr) { + throwBindingError("Passing raw pointer to smart pointer is illegal") + } + switch (this.sharingPolicy) { + case 0: + if (handle.$$.smartPtrType === this) { + ptr = handle.$$.smartPtr + } else { + throwBindingError("Cannot convert argument of type " + (handle.$$.smartPtrType ? handle.$$.smartPtrType.name : handle.$$.ptrType.name) + " to parameter type " + this.name) + } + break; + case 1: + ptr = handle.$$.smartPtr; + break; + case 2: + if (handle.$$.smartPtrType === this) { + ptr = handle.$$.smartPtr + } else { + var clonedHandle = handle["clone"](); + ptr = this.rawShare(ptr, Emval.toHandle(function() { + clonedHandle["delete"]() + })); + if (destructors !== null) { + destructors.push(this.rawDestructor, ptr) + } + } + break; + default: + throwBindingError("Unsupporting sharing policy") + } + } + return ptr + } + + function nonConstNoSmartPtrRawPointerToWireType(destructors, handle) { + if (handle === null) { + if (this.isReference) { + throwBindingError("null is not a valid " + this.name) + } + return 0 + } + if (!handle.$$) { + throwBindingError('Cannot pass "' + embindRepr(handle) + '" as a ' + this.name) + } + if (!handle.$$.ptr) { + throwBindingError("Cannot pass deleted object as a pointer of type " + this.name) + } + if (handle.$$.ptrType.isConst) { + throwBindingError("Cannot convert argument of type " + handle.$$.ptrType.name + " to parameter type " + this.name) + } + var handleClass = handle.$$.ptrType.registeredClass; + var ptr = upcastPointer(handle.$$.ptr, handleClass, this.registeredClass); + return ptr + } + + function RegisteredPointer_getPointee(ptr) { + if (this.rawGetPointee) { + ptr = this.rawGetPointee(ptr) + } + return ptr + } + + function RegisteredPointer_destructor(ptr) { + if (this.rawDestructor) { + this.rawDestructor(ptr) + } + } + + function RegisteredPointer_deleteObject(handle) { + if (handle !== null) { + handle["delete"]() + } + } + + function init_RegisteredPointer() { + RegisteredPointer.prototype.getPointee = RegisteredPointer_getPointee; + RegisteredPointer.prototype.destructor = RegisteredPointer_destructor; + RegisteredPointer.prototype["argPackAdvance"] = 8; + RegisteredPointer.prototype["readValueFromPointer"] = simpleReadValueFromPointer; + RegisteredPointer.prototype["deleteObject"] = RegisteredPointer_deleteObject; + RegisteredPointer.prototype["fromWireType"] = RegisteredPointer_fromWireType + } + + function RegisteredPointer(name, registeredClass, isReference, isConst, isSmartPointer, pointeeType, sharingPolicy, rawGetPointee, rawConstructor, rawShare, rawDestructor) { + this.name = name; + this.registeredClass = registeredClass; + this.isReference = isReference; + this.isConst = isConst; + this.isSmartPointer = isSmartPointer; + this.pointeeType = pointeeType; + this.sharingPolicy = sharingPolicy; + this.rawGetPointee = rawGetPointee; + this.rawConstructor = rawConstructor; + this.rawShare = rawShare; + this.rawDestructor = rawDestructor; + if (!isSmartPointer && registeredClass.baseClass === undefined) { + if (isConst) { + this["toWireType"] = constNoSmartPtrRawPointerToWireType; + this.destructorFunction = null + } else { + this["toWireType"] = nonConstNoSmartPtrRawPointerToWireType; + this.destructorFunction = null + } + } else { + this["toWireType"] = genericPointerToWireType + } + } + + function replacePublicSymbol(name, value, numArguments) { + if (!Module.hasOwnProperty(name)) { + throwInternalError("Replacing nonexistant public symbol") + } + if (undefined !== Module[name].overloadTable && undefined !== numArguments) { + Module[name].overloadTable[numArguments] = value + } else { + Module[name] = value; + Module[name].argCount = numArguments + } + } + + function dynCallLegacy(sig, ptr, args) { + var f = Module["dynCall_" + sig]; + return args && args.length ? f.apply(null, [ptr].concat(args)) : f.call(null, ptr) + } + var wasmTableMirror = []; + + function getWasmTableEntry(funcPtr) { + var func = wasmTableMirror[funcPtr]; + if (!func) { + if (funcPtr >= wasmTableMirror.length) wasmTableMirror.length = funcPtr + 1; + wasmTableMirror[funcPtr] = func = wasmTable.get(funcPtr) + } + return func + } + + function dynCall(sig, ptr, args) { + if (sig.includes("j")) { + return dynCallLegacy(sig, ptr, args) + } + var rtn = getWasmTableEntry(ptr).apply(null, args); + return rtn + } + + function getDynCaller(sig, ptr) { + var argCache = []; + return function() { + argCache.length = 0; + Object.assign(argCache, arguments); + return dynCall(sig, ptr, argCache) + } + } + + function embind__requireFunction(signature, rawFunction) { + signature = readLatin1String(signature); + + function makeDynCaller() { + if (signature.includes("j")) { + return getDynCaller(signature, rawFunction) + } + return getWasmTableEntry(rawFunction) + } + var fp = makeDynCaller(); + if (typeof fp != "function") { + throwBindingError("unknown function pointer with signature " + signature + ": " + rawFunction) + } + return fp + } + var UnboundTypeError = undefined; + + function getTypeName(type) { + var ptr = ___getTypeName(type); + var rv = readLatin1String(ptr); + _free(ptr); + return rv + } + + function throwUnboundTypeError(message, types) { + var unboundTypes = []; + var seen = {}; + + function visit(type) { + if (seen[type]) { + return + } + if (registeredTypes[type]) { + return + } + if (typeDependencies[type]) { + typeDependencies[type].forEach(visit); + return + } + unboundTypes.push(type); + seen[type] = true + } + types.forEach(visit); + throw new UnboundTypeError(message + ": " + unboundTypes.map(getTypeName).join([", "])) + } + + function __embind_register_class(rawType, rawPointerType, rawConstPointerType, baseClassRawType, getActualTypeSignature, getActualType, upcastSignature, upcast, downcastSignature, downcast, name, destructorSignature, rawDestructor) { + name = readLatin1String(name); + getActualType = embind__requireFunction(getActualTypeSignature, getActualType); + if (upcast) { + upcast = embind__requireFunction(upcastSignature, upcast) + } + if (downcast) { + downcast = embind__requireFunction(downcastSignature, downcast) + } + rawDestructor = embind__requireFunction(destructorSignature, rawDestructor); + var legalFunctionName = makeLegalFunctionName(name); + exposePublicSymbol(legalFunctionName, function() { + throwUnboundTypeError("Cannot construct " + name + " due to unbound types", [baseClassRawType]) + }); + whenDependentTypesAreResolved([rawType, rawPointerType, rawConstPointerType], baseClassRawType ? [baseClassRawType] : [], function(base) { + base = base[0]; + var baseClass; + var basePrototype; + if (baseClassRawType) { + baseClass = base.registeredClass; + basePrototype = baseClass.instancePrototype + } else { + basePrototype = ClassHandle.prototype + } + var constructor = createNamedFunction(legalFunctionName, function() { + if (Object.getPrototypeOf(this) !== instancePrototype) { + throw new BindingError("Use 'new' to construct " + name) + } + if (undefined === registeredClass.constructor_body) { + throw new BindingError(name + " has no accessible constructor") + } + var body = registeredClass.constructor_body[arguments.length]; + if (undefined === body) { + throw new BindingError("Tried to invoke ctor of " + name + " with invalid number of parameters (" + arguments.length + ") - expected (" + Object.keys(registeredClass.constructor_body).toString() + ") parameters instead!") + } + return body.apply(this, arguments) + }); + var instancePrototype = Object.create(basePrototype, { + constructor: { + value: constructor + } + }); + constructor.prototype = instancePrototype; + var registeredClass = new RegisteredClass(name, constructor, instancePrototype, rawDestructor, baseClass, getActualType, upcast, downcast); + var referenceConverter = new RegisteredPointer(name, registeredClass, true, false, false); + var pointerConverter = new RegisteredPointer(name + "*", registeredClass, false, false, false); + var constPointerConverter = new RegisteredPointer(name + " const*", registeredClass, false, true, false); + registeredPointers[rawType] = { + pointerType: pointerConverter, + constPointerType: constPointerConverter + }; + replacePublicSymbol(legalFunctionName, constructor); + return [referenceConverter, pointerConverter, constPointerConverter] + }) + } + + function new_(constructor, argumentList) { + if (!(constructor instanceof Function)) { + throw new TypeError("new_ called with constructor type " + typeof constructor + " which is not a function") + } + var dummy = createNamedFunction(constructor.name || "unknownFunctionName", function() {}); + dummy.prototype = constructor.prototype; + var obj = new dummy; + var r = constructor.apply(obj, argumentList); + return r instanceof Object ? r : obj + } + + function craftInvokerFunction(humanName, argTypes, classType, cppInvokerFunc, cppTargetFunc) { + var argCount = argTypes.length; + if (argCount < 2) { + throwBindingError("argTypes array size mismatch! Must at least get return value and 'this' types!") + } + var isClassMethodFunc = argTypes[1] !== null && classType !== null; + var needsDestructorStack = false; + for (var i = 1; i < argTypes.length; ++i) { + if (argTypes[i] !== null && argTypes[i].destructorFunction === undefined) { + needsDestructorStack = true; + break + } + } + var returns = argTypes[0].name !== "void"; + var argsList = ""; + var argsListWired = ""; + for (var i = 0; i < argCount - 2; ++i) { + argsList += (i !== 0 ? ", " : "") + "arg" + i; + argsListWired += (i !== 0 ? ", " : "") + "arg" + i + "Wired" + } + var invokerFnBody = "return function " + makeLegalFunctionName(humanName) + "(" + argsList + ") {\n" + "if (arguments.length !== " + (argCount - 2) + ") {\n" + "throwBindingError('function " + humanName + " called with ' + arguments.length + ' arguments, expected " + (argCount - 2) + " args!');\n" + "}\n"; + if (needsDestructorStack) { + invokerFnBody += "var destructors = [];\n" + } + var dtorStack = needsDestructorStack ? "destructors" : "null"; + var args1 = ["throwBindingError", "invoker", "fn", "runDestructors", "retType", "classParam"]; + var args2 = [throwBindingError, cppInvokerFunc, cppTargetFunc, runDestructors, argTypes[0], argTypes[1]]; + if (isClassMethodFunc) { + invokerFnBody += "var thisWired = classParam.toWireType(" + dtorStack + ", this);\n" + } + for (var i = 0; i < argCount - 2; ++i) { + invokerFnBody += "var arg" + i + "Wired = argType" + i + ".toWireType(" + dtorStack + ", arg" + i + "); // " + argTypes[i + 2].name + "\n"; + args1.push("argType" + i); + args2.push(argTypes[i + 2]) + } + if (isClassMethodFunc) { + argsListWired = "thisWired" + (argsListWired.length > 0 ? ", " : "") + argsListWired + } + invokerFnBody += (returns ? "var rv = " : "") + "invoker(fn" + (argsListWired.length > 0 ? ", " : "") + argsListWired + ");\n"; + if (needsDestructorStack) { + invokerFnBody += "runDestructors(destructors);\n" + } else { + for (var i = isClassMethodFunc ? 1 : 2; i < argTypes.length; ++i) { + var paramName = i === 1 ? "thisWired" : "arg" + (i - 2) + "Wired"; + if (argTypes[i].destructorFunction !== null) { + invokerFnBody += paramName + "_dtor(" + paramName + "); // " + argTypes[i].name + "\n"; + args1.push(paramName + "_dtor"); + args2.push(argTypes[i].destructorFunction) + } + } + } + if (returns) { + invokerFnBody += "var ret = retType.fromWireType(rv);\n" + "return ret;\n" + } else {} + invokerFnBody += "}\n"; + args1.push(invokerFnBody); + var invokerFunction = new_(Function, args1).apply(null, args2); + return invokerFunction + } + + function heap32VectorToArray(count, firstElement) { + var array = []; + for (var i = 0; i < count; i++) { + array.push(HEAPU32[firstElement + i * 4 >> 2]) + } + return array + } + + function __embind_register_class_class_function(rawClassType, methodName, argCount, rawArgTypesAddr, invokerSignature, rawInvoker, fn) { + var rawArgTypes = heap32VectorToArray(argCount, rawArgTypesAddr); + methodName = readLatin1String(methodName); + rawInvoker = embind__requireFunction(invokerSignature, rawInvoker); + whenDependentTypesAreResolved([], [rawClassType], function(classType) { + classType = classType[0]; + var humanName = classType.name + "." + methodName; + + function unboundTypesHandler() { + throwUnboundTypeError("Cannot call " + humanName + " due to unbound types", rawArgTypes) + } + if (methodName.startsWith("@@")) { + methodName = Symbol[methodName.substring(2)] + } + var proto = classType.registeredClass.constructor; + if (undefined === proto[methodName]) { + unboundTypesHandler.argCount = argCount - 1; + proto[methodName] = unboundTypesHandler + } else { + ensureOverloadTable(proto, methodName, humanName); + proto[methodName].overloadTable[argCount - 1] = unboundTypesHandler + } + whenDependentTypesAreResolved([], rawArgTypes, function(argTypes) { + var invokerArgsArray = [argTypes[0], null].concat(argTypes.slice(1)); + var func = craftInvokerFunction(humanName, invokerArgsArray, null, rawInvoker, fn); + if (undefined === proto[methodName].overloadTable) { + func.argCount = argCount - 1; + proto[methodName] = func + } else { + proto[methodName].overloadTable[argCount - 1] = func + } + return [] + }); + return [] + }) + } + + function __embind_register_class_constructor(rawClassType, argCount, rawArgTypesAddr, invokerSignature, invoker, rawConstructor) { + assert(argCount > 0); + var rawArgTypes = heap32VectorToArray(argCount, rawArgTypesAddr); + invoker = embind__requireFunction(invokerSignature, invoker); + whenDependentTypesAreResolved([], [rawClassType], function(classType) { + classType = classType[0]; + var humanName = "constructor " + classType.name; + if (undefined === classType.registeredClass.constructor_body) { + classType.registeredClass.constructor_body = [] + } + if (undefined !== classType.registeredClass.constructor_body[argCount - 1]) { + throw new BindingError("Cannot register multiple constructors with identical number of parameters (" + (argCount - 1) + ") for class '" + classType.name + "'! Overload resolution is currently only performed using the parameter count, not actual type info!") + } + classType.registeredClass.constructor_body[argCount - 1] = () => { + throwUnboundTypeError("Cannot construct " + classType.name + " due to unbound types", rawArgTypes) + }; + whenDependentTypesAreResolved([], rawArgTypes, function(argTypes) { + argTypes.splice(1, 0, null); + classType.registeredClass.constructor_body[argCount - 1] = craftInvokerFunction(humanName, argTypes, null, invoker, rawConstructor); + return [] + }); + return [] + }) + } + + function __embind_register_class_function(rawClassType, methodName, argCount, rawArgTypesAddr, invokerSignature, rawInvoker, context, isPureVirtual) { + var rawArgTypes = heap32VectorToArray(argCount, rawArgTypesAddr); + methodName = readLatin1String(methodName); + rawInvoker = embind__requireFunction(invokerSignature, rawInvoker); + whenDependentTypesAreResolved([], [rawClassType], function(classType) { + classType = classType[0]; + var humanName = classType.name + "." + methodName; + if (methodName.startsWith("@@")) { + methodName = Symbol[methodName.substring(2)] + } + if (isPureVirtual) { + classType.registeredClass.pureVirtualFunctions.push(methodName) + } + + function unboundTypesHandler() { + throwUnboundTypeError("Cannot call " + humanName + " due to unbound types", rawArgTypes) + } + var proto = classType.registeredClass.instancePrototype; + var method = proto[methodName]; + if (undefined === method || undefined === method.overloadTable && method.className !== classType.name && method.argCount === argCount - 2) { + unboundTypesHandler.argCount = argCount - 2; + unboundTypesHandler.className = classType.name; + proto[methodName] = unboundTypesHandler + } else { + ensureOverloadTable(proto, methodName, humanName); + proto[methodName].overloadTable[argCount - 2] = unboundTypesHandler + } + whenDependentTypesAreResolved([], rawArgTypes, function(argTypes) { + var memberFunction = craftInvokerFunction(humanName, argTypes, classType, rawInvoker, context); + if (undefined === proto[methodName].overloadTable) { + memberFunction.argCount = argCount - 2; + proto[methodName] = memberFunction + } else { + proto[methodName].overloadTable[argCount - 2] = memberFunction + } + return [] + }); + return [] + }) + } + + function validateThis(this_, classType, humanName) { + if (!(this_ instanceof Object)) { + throwBindingError(humanName + ' with invalid "this": ' + this_) + } + if (!(this_ instanceof classType.registeredClass.constructor)) { + throwBindingError(humanName + ' incompatible with "this" of type ' + this_.constructor.name) + } + if (!this_.$$.ptr) { + throwBindingError("cannot call emscripten binding method " + humanName + " on deleted object") + } + return upcastPointer(this_.$$.ptr, this_.$$.ptrType.registeredClass, classType.registeredClass) + } + + function __embind_register_class_property(classType, fieldName, getterReturnType, getterSignature, getter, getterContext, setterArgumentType, setterSignature, setter, setterContext) { + fieldName = readLatin1String(fieldName); + getter = embind__requireFunction(getterSignature, getter); + whenDependentTypesAreResolved([], [classType], function(classType) { + classType = classType[0]; + var humanName = classType.name + "." + fieldName; + var desc = { + get: function() { + throwUnboundTypeError("Cannot access " + humanName + " due to unbound types", [getterReturnType, setterArgumentType]) + }, + enumerable: true, + configurable: true + }; + if (setter) { + desc.set = () => { + throwUnboundTypeError("Cannot access " + humanName + " due to unbound types", [getterReturnType, setterArgumentType]) + } + } else { + desc.set = v => { + throwBindingError(humanName + " is a read-only property") + } + } + Object.defineProperty(classType.registeredClass.instancePrototype, fieldName, desc); + whenDependentTypesAreResolved([], setter ? [getterReturnType, setterArgumentType] : [getterReturnType], function(types) { + var getterReturnType = types[0]; + var desc = { + get: function() { + var ptr = validateThis(this, classType, humanName + " getter"); + return getterReturnType["fromWireType"](getter(getterContext, ptr)) + }, + enumerable: true + }; + if (setter) { + setter = embind__requireFunction(setterSignature, setter); + var setterArgumentType = types[1]; + desc.set = function(v) { + var ptr = validateThis(this, classType, humanName + " setter"); + var destructors = []; + setter(setterContext, ptr, setterArgumentType["toWireType"](destructors, v)); + runDestructors(destructors) + } + } + Object.defineProperty(classType.registeredClass.instancePrototype, fieldName, desc); + return [] + }); + return [] + }) + } + var emval_free_list = []; + var emval_handle_array = [{}, { + value: undefined + }, { + value: null + }, { + value: true + }, { + value: false + }]; + + function __emval_decref(handle) { + if (handle > 4 && 0 === --emval_handle_array[handle].refcount) { + emval_handle_array[handle] = undefined; + emval_free_list.push(handle) + } + } + + function count_emval_handles() { + var count = 0; + for (var i = 5; i < emval_handle_array.length; ++i) { + if (emval_handle_array[i] !== undefined) { + ++count + } + } + return count + } + + function get_first_emval() { + for (var i = 5; i < emval_handle_array.length; ++i) { + if (emval_handle_array[i] !== undefined) { + return emval_handle_array[i] + } + } + return null + } + + function init_emval() { + Module["count_emval_handles"] = count_emval_handles; + Module["get_first_emval"] = get_first_emval + } + var Emval = { + toValue: handle => { + if (!handle) { + throwBindingError("Cannot use deleted val. handle = " + handle) + } + return emval_handle_array[handle].value + }, + toHandle: value => { + switch (value) { + case undefined: + return 1; + case null: + return 2; + case true: + return 3; + case false: + return 4; + default: { + var handle = emval_free_list.length ? emval_free_list.pop() : emval_handle_array.length; + emval_handle_array[handle] = { + refcount: 1, + value: value + }; + return handle + } + } + } + }; + + function __embind_register_emval(rawType, name) { + name = readLatin1String(name); + registerType(rawType, { + name: name, + "fromWireType": function(handle) { + var rv = Emval.toValue(handle); + __emval_decref(handle); + return rv + }, + "toWireType": function(destructors, value) { + return Emval.toHandle(value) + }, + "argPackAdvance": 8, + "readValueFromPointer": simpleReadValueFromPointer, + destructorFunction: null + }) + } + + function embindRepr(v) { + if (v === null) { + return "null" + } + var t = typeof v; + if (t === "object" || t === "array" || t === "function") { + return v.toString() + } else { + return "" + v + } + } + + function floatReadValueFromPointer(name, shift) { + switch (shift) { + case 2: + return function(pointer) { + return this["fromWireType"](HEAPF32[pointer >> 2]) + }; + case 3: + return function(pointer) { + return this["fromWireType"](HEAPF64[pointer >> 3]) + }; + default: + throw new TypeError("Unknown float type: " + name) + } + } + + function __embind_register_float(rawType, name, size) { + var shift = getShiftFromSize(size); + name = readLatin1String(name); + registerType(rawType, { + name: name, + "fromWireType": function(value) { + return value + }, + "toWireType": function(destructors, value) { + return value + }, + "argPackAdvance": 8, + "readValueFromPointer": floatReadValueFromPointer(name, shift), + destructorFunction: null + }) + } + + function integerReadValueFromPointer(name, shift, signed) { + switch (shift) { + case 0: + return signed ? function readS8FromPointer(pointer) { + return HEAP8[pointer] + } : function readU8FromPointer(pointer) { + return HEAPU8[pointer] + }; + case 1: + return signed ? function readS16FromPointer(pointer) { + return HEAP16[pointer >> 1] + } : function readU16FromPointer(pointer) { + return HEAPU16[pointer >> 1] + }; + case 2: + return signed ? function readS32FromPointer(pointer) { + return HEAP32[pointer >> 2] + } : function readU32FromPointer(pointer) { + return HEAPU32[pointer >> 2] + }; + default: + throw new TypeError("Unknown integer type: " + name) + } + } + + function __embind_register_integer(primitiveType, name, size, minRange, maxRange) { + name = readLatin1String(name); + if (maxRange === -1) { + maxRange = 4294967295 + } + var shift = getShiftFromSize(size); + var fromWireType = value => value; + if (minRange === 0) { + var bitshift = 32 - 8 * size; + fromWireType = value => value << bitshift >>> bitshift + } + var isUnsignedType = name.includes("unsigned"); + var checkAssertions = (value, toTypeName) => {}; + var toWireType; + if (isUnsignedType) { + toWireType = function(destructors, value) { + checkAssertions(value, this.name); + return value >>> 0 + } + } else { + toWireType = function(destructors, value) { + checkAssertions(value, this.name); + return value + } + } + registerType(primitiveType, { + name: name, + "fromWireType": fromWireType, + "toWireType": toWireType, + "argPackAdvance": 8, + "readValueFromPointer": integerReadValueFromPointer(name, shift, minRange !== 0), + destructorFunction: null + }) + } + + function __embind_register_memory_view(rawType, dataTypeIndex, name) { + var typeMapping = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array, Float32Array, Float64Array]; + var TA = typeMapping[dataTypeIndex]; + + function decodeMemoryView(handle) { + handle = handle >> 2; + var heap = HEAPU32; + var size = heap[handle]; + var data = heap[handle + 1]; + return new TA(buffer, data, size) + } + name = readLatin1String(name); + registerType(rawType, { + name: name, + "fromWireType": decodeMemoryView, + "argPackAdvance": 8, + "readValueFromPointer": decodeMemoryView + }, { + ignoreDuplicateRegistrations: true + }) + } + + function __embind_register_std_string(rawType, name) { + name = readLatin1String(name); + var stdStringIsUTF8 = name === "std::string"; + registerType(rawType, { + name: name, + "fromWireType": function(value) { + var length = HEAPU32[value >> 2]; + var payload = value + 4; + var str; + if (stdStringIsUTF8) { + var decodeStartPtr = payload; + for (var i = 0; i <= length; ++i) { + var currentBytePtr = payload + i; + if (i == length || HEAPU8[currentBytePtr] == 0) { + var maxRead = currentBytePtr - decodeStartPtr; + var stringSegment = UTF8ToString(decodeStartPtr, maxRead); + if (str === undefined) { + str = stringSegment + } else { + str += String.fromCharCode(0); + str += stringSegment + } + decodeStartPtr = currentBytePtr + 1 + } + } + } else { + var a = new Array(length); + for (var i = 0; i < length; ++i) { + a[i] = String.fromCharCode(HEAPU8[payload + i]) + } + str = a.join("") + } + _free(value); + return str + }, + "toWireType": function(destructors, value) { + if (value instanceof ArrayBuffer) { + value = new Uint8Array(value) + } + var length; + var valueIsOfTypeString = typeof value == "string"; + if (!(valueIsOfTypeString || value instanceof Uint8Array || value instanceof Uint8ClampedArray || value instanceof Int8Array)) { + throwBindingError("Cannot pass non-string to std::string") + } + if (stdStringIsUTF8 && valueIsOfTypeString) { + length = lengthBytesUTF8(value) + } else { + length = value.length + } + var base = _malloc(4 + length + 1); + var ptr = base + 4; + HEAPU32[base >> 2] = length; + if (stdStringIsUTF8 && valueIsOfTypeString) { + stringToUTF8(value, ptr, length + 1) + } else { + if (valueIsOfTypeString) { + for (var i = 0; i < length; ++i) { + var charCode = value.charCodeAt(i); + if (charCode > 255) { + _free(ptr); + throwBindingError("String has UTF-16 code units that do not fit in 8 bits") + } + HEAPU8[ptr + i] = charCode + } + } else { + for (var i = 0; i < length; ++i) { + HEAPU8[ptr + i] = value[i] + } + } + } + if (destructors !== null) { + destructors.push(_free, base) + } + return base + }, + "argPackAdvance": 8, + "readValueFromPointer": simpleReadValueFromPointer, + destructorFunction: function(ptr) { + _free(ptr) + } + }) + } + var UTF16Decoder = typeof TextDecoder != "undefined" ? new TextDecoder("utf-16le") : undefined; + + function UTF16ToString(ptr, maxBytesToRead) { + var endPtr = ptr; + var idx = endPtr >> 1; + var maxIdx = idx + maxBytesToRead / 2; + while (!(idx >= maxIdx) && HEAPU16[idx]) ++idx; + endPtr = idx << 1; + if (endPtr - ptr > 32 && UTF16Decoder) { + return UTF16Decoder.decode(HEAPU8.subarray(ptr, endPtr)) + } else { + var str = ""; + for (var i = 0; !(i >= maxBytesToRead / 2); ++i) { + var codeUnit = HEAP16[ptr + i * 2 >> 1]; + if (codeUnit == 0) break; + str += String.fromCharCode(codeUnit) + } + return str + } + } + + function stringToUTF16(str, outPtr, maxBytesToWrite) { + if (maxBytesToWrite === undefined) { + maxBytesToWrite = 2147483647 + } + if (maxBytesToWrite < 2) return 0; + maxBytesToWrite -= 2; + var startPtr = outPtr; + var numCharsToWrite = maxBytesToWrite < str.length * 2 ? maxBytesToWrite / 2 : str.length; + for (var i = 0; i < numCharsToWrite; ++i) { + var codeUnit = str.charCodeAt(i); + HEAP16[outPtr >> 1] = codeUnit; + outPtr += 2 + } + HEAP16[outPtr >> 1] = 0; + return outPtr - startPtr + } + + function lengthBytesUTF16(str) { + return str.length * 2 + } + + function UTF32ToString(ptr, maxBytesToRead) { + var i = 0; + var str = ""; + while (!(i >= maxBytesToRead / 4)) { + var utf32 = HEAP32[ptr + i * 4 >> 2]; + if (utf32 == 0) break; + ++i; + if (utf32 >= 65536) { + var ch = utf32 - 65536; + str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023) + } else { + str += String.fromCharCode(utf32) + } + } + return str + } + + function stringToUTF32(str, outPtr, maxBytesToWrite) { + if (maxBytesToWrite === undefined) { + maxBytesToWrite = 2147483647 + } + if (maxBytesToWrite < 4) return 0; + var startPtr = outPtr; + var endPtr = startPtr + maxBytesToWrite - 4; + for (var i = 0; i < str.length; ++i) { + var codeUnit = str.charCodeAt(i); + if (codeUnit >= 55296 && codeUnit <= 57343) { + var trailSurrogate = str.charCodeAt(++i); + codeUnit = 65536 + ((codeUnit & 1023) << 10) | trailSurrogate & 1023 + } + HEAP32[outPtr >> 2] = codeUnit; + outPtr += 4; + if (outPtr + 4 > endPtr) break + } + HEAP32[outPtr >> 2] = 0; + return outPtr - startPtr + } + + function lengthBytesUTF32(str) { + var len = 0; + for (var i = 0; i < str.length; ++i) { + var codeUnit = str.charCodeAt(i); + if (codeUnit >= 55296 && codeUnit <= 57343) ++i; + len += 4 + } + return len + } + + function __embind_register_std_wstring(rawType, charSize, name) { + name = readLatin1String(name); + var decodeString, encodeString, getHeap, lengthBytesUTF, shift; + if (charSize === 2) { + decodeString = UTF16ToString; + encodeString = stringToUTF16; + lengthBytesUTF = lengthBytesUTF16; + getHeap = () => HEAPU16; + shift = 1 + } else if (charSize === 4) { + decodeString = UTF32ToString; + encodeString = stringToUTF32; + lengthBytesUTF = lengthBytesUTF32; + getHeap = () => HEAPU32; + shift = 2 + } + registerType(rawType, { + name: name, + "fromWireType": function(value) { + var length = HEAPU32[value >> 2]; + var HEAP = getHeap(); + var str; + var decodeStartPtr = value + 4; + for (var i = 0; i <= length; ++i) { + var currentBytePtr = value + 4 + i * charSize; + if (i == length || HEAP[currentBytePtr >> shift] == 0) { + var maxReadBytes = currentBytePtr - decodeStartPtr; + var stringSegment = decodeString(decodeStartPtr, maxReadBytes); + if (str === undefined) { + str = stringSegment + } else { + str += String.fromCharCode(0); + str += stringSegment + } + decodeStartPtr = currentBytePtr + charSize + } + } + _free(value); + return str + }, + "toWireType": function(destructors, value) { + if (!(typeof value == "string")) { + throwBindingError("Cannot pass non-string to C++ string type " + name) + } + var length = lengthBytesUTF(value); + var ptr = _malloc(4 + length + charSize); + HEAPU32[ptr >> 2] = length >> shift; + encodeString(value, ptr + 4, length + charSize); + if (destructors !== null) { + destructors.push(_free, ptr) + } + return ptr + }, + "argPackAdvance": 8, + "readValueFromPointer": simpleReadValueFromPointer, + destructorFunction: function(ptr) { + _free(ptr) + } + }) + } + + function __embind_register_value_object(rawType, name, constructorSignature, rawConstructor, destructorSignature, rawDestructor) { + structRegistrations[rawType] = { + name: readLatin1String(name), + rawConstructor: embind__requireFunction(constructorSignature, rawConstructor), + rawDestructor: embind__requireFunction(destructorSignature, rawDestructor), + fields: [] + } + } + + function __embind_register_value_object_field(structType, fieldName, getterReturnType, getterSignature, getter, getterContext, setterArgumentType, setterSignature, setter, setterContext) { + structRegistrations[structType].fields.push({ + fieldName: readLatin1String(fieldName), + getterReturnType: getterReturnType, + getter: embind__requireFunction(getterSignature, getter), + getterContext: getterContext, + setterArgumentType: setterArgumentType, + setter: embind__requireFunction(setterSignature, setter), + setterContext: setterContext + }) + } + + function __embind_register_void(rawType, name) { + name = readLatin1String(name); + registerType(rawType, { + isVoid: true, + name: name, + "argPackAdvance": 0, + "fromWireType": function() { + return undefined + }, + "toWireType": function(destructors, o) { + return undefined + } + }) + } + + function requireRegisteredType(rawType, humanName) { + var impl = registeredTypes[rawType]; + if (undefined === impl) { + throwBindingError(humanName + " has unknown type " + getTypeName(rawType)) + } + return impl + } + + function __emval_as(handle, returnType, destructorsRef) { + handle = Emval.toValue(handle); + returnType = requireRegisteredType(returnType, "emval::as"); + var destructors = []; + var rd = Emval.toHandle(destructors); + HEAPU32[destructorsRef >> 2] = rd; + return returnType["toWireType"](destructors, handle) + } + var emval_symbols = {}; + + function getStringOrSymbol(address) { + var symbol = emval_symbols[address]; + if (symbol === undefined) { + return readLatin1String(address) + } + return symbol + } + var emval_methodCallers = []; + + function __emval_call_void_method(caller, handle, methodName, args) { + caller = emval_methodCallers[caller]; + handle = Emval.toValue(handle); + methodName = getStringOrSymbol(methodName); + caller(handle, methodName, null, args) + } + + function emval_addMethodCaller(caller) { + var id = emval_methodCallers.length; + emval_methodCallers.push(caller); + return id + } + + function emval_lookupTypes(argCount, argTypes) { + var a = new Array(argCount); + for (var i = 0; i < argCount; ++i) { + a[i] = requireRegisteredType(HEAPU32[argTypes + i * POINTER_SIZE >> 2], "parameter " + i) + } + return a + } + var emval_registeredMethods = []; + + function __emval_get_method_caller(argCount, argTypes) { + var types = emval_lookupTypes(argCount, argTypes); + var retType = types[0]; + var signatureName = retType.name + "_$" + types.slice(1).map(function(t) { + return t.name + }).join("_") + "$"; + var returnId = emval_registeredMethods[signatureName]; + if (returnId !== undefined) { + return returnId + } + var params = ["retType"]; + var args = [retType]; + var argsList = ""; + for (var i = 0; i < argCount - 1; ++i) { + argsList += (i !== 0 ? ", " : "") + "arg" + i; + params.push("argType" + i); + args.push(types[1 + i]) + } + var functionName = makeLegalFunctionName("methodCaller_" + signatureName); + var functionBody = "return function " + functionName + "(handle, name, destructors, args) {\n"; + var offset = 0; + for (var i = 0; i < argCount - 1; ++i) { + functionBody += " var arg" + i + " = argType" + i + ".readValueFromPointer(args" + (offset ? "+" + offset : "") + ");\n"; + offset += types[i + 1]["argPackAdvance"] + } + functionBody += " var rv = handle[name](" + argsList + ");\n"; + for (var i = 0; i < argCount - 1; ++i) { + if (types[i + 1]["deleteObject"]) { + functionBody += " argType" + i + ".deleteObject(arg" + i + ");\n" + } + } + if (!retType.isVoid) { + functionBody += " return retType.toWireType(destructors, rv);\n" + } + functionBody += "};\n"; + params.push(functionBody); + var invokerFunction = new_(Function, params).apply(null, args); + returnId = emval_addMethodCaller(invokerFunction); + emval_registeredMethods[signatureName] = returnId; + return returnId + } + + function __emval_get_property(handle, key) { + handle = Emval.toValue(handle); + key = Emval.toValue(key); + return Emval.toHandle(handle[key]) + } + + function __emval_incref(handle) { + if (handle > 4) { + emval_handle_array[handle].refcount += 1 + } + } + + function __emval_new_array() { + return Emval.toHandle([]) + } + + function __emval_new_cstring(v) { + return Emval.toHandle(getStringOrSymbol(v)) + } + + function __emval_run_destructors(handle) { + var destructors = Emval.toValue(handle); + runDestructors(destructors); + __emval_decref(handle) + } + + function __emval_set_property(handle, key, value) { + handle = Emval.toValue(handle); + key = Emval.toValue(key); + value = Emval.toValue(value); + handle[key] = value + } + + function __emval_take_value(type, arg) { + type = requireRegisteredType(type, "_emval_take_value"); + var v = type["readValueFromPointer"](arg); + return Emval.toHandle(v) + } + + function _abort() { + abort("") + } + + function _emscripten_memcpy_big(dest, src, num) { + HEAPU8.copyWithin(dest, src, src + num) + } + + function getHeapMax() { + return 2147483648 + } + + function emscripten_realloc_buffer(size) { + try { + wasmMemory.grow(size - buffer.byteLength + 65535 >>> 16); + updateGlobalBufferAndViews(wasmMemory.buffer); + return 1 + } catch (e) {} + } + + function _emscripten_resize_heap(requestedSize) { + var oldSize = HEAPU8.length; + requestedSize = requestedSize >>> 0; + var maxHeapSize = getHeapMax(); + if (requestedSize > maxHeapSize) { + return false + } + let alignUp = (x, multiple) => x + (multiple - x % multiple) % multiple; + for (var cutDown = 1; cutDown <= 4; cutDown *= 2) { + var overGrownHeapSize = oldSize * (1 + .2 / cutDown); + overGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296); + var newSize = Math.min(maxHeapSize, alignUp(Math.max(requestedSize, overGrownHeapSize), 65536)); + var replacement = emscripten_realloc_buffer(newSize); + if (replacement) { + return true + } + } + return false + } + var WebGPU = { + initManagers: function() { + if (WebGPU.mgrDevice) return; + + function Manager() { + this.objects = {}; + this.nextId = 1; + this.create = function(object, wrapper) { + wrapper = wrapper || {}; + var id = this.nextId++; + wrapper.refcount = 1; + wrapper.object = object; + this.objects[id] = wrapper; + return id + }; + this.get = function(id) { + if (!id) return undefined; + var o = this.objects[id]; + return o.object + }; + this.reference = function(id) { + var o = this.objects[id]; + o.refcount++ + }; + this.release = function(id) { + var o = this.objects[id]; + o.refcount--; + if (o.refcount <= 0) { + delete this.objects[id] + } + } + } + WebGPU.mgrSurface = WebGPU.mgrSurface || new Manager; + WebGPU.mgrSwapChain = WebGPU.mgrSwapChain || new Manager; + WebGPU.mgrAdapter = WebGPU.mgrAdapter || new Manager; + WebGPU.mgrDevice = WebGPU.mgrDevice || new Manager; + WebGPU.mgrQueue = WebGPU.mgrQueue || new Manager; + WebGPU.mgrCommandBuffer = WebGPU.mgrCommandBuffer || new Manager; + WebGPU.mgrCommandEncoder = WebGPU.mgrCommandEncoder || new Manager; + WebGPU.mgrRenderPassEncoder = WebGPU.mgrRenderPassEncoder || new Manager; + WebGPU.mgrComputePassEncoder = WebGPU.mgrComputePassEncoder || new Manager; + WebGPU.mgrBindGroup = WebGPU.mgrBindGroup || new Manager; + WebGPU.mgrBuffer = WebGPU.mgrBuffer || new Manager; + WebGPU.mgrSampler = WebGPU.mgrSampler || new Manager; + WebGPU.mgrTexture = WebGPU.mgrTexture || new Manager; + WebGPU.mgrTextureView = WebGPU.mgrTextureView || new Manager; + WebGPU.mgrQuerySet = WebGPU.mgrQuerySet || new Manager; + WebGPU.mgrBindGroupLayout = WebGPU.mgrBindGroupLayout || new Manager; + WebGPU.mgrPipelineLayout = WebGPU.mgrPipelineLayout || new Manager; + WebGPU.mgrRenderPipeline = WebGPU.mgrRenderPipeline || new Manager; + WebGPU.mgrComputePipeline = WebGPU.mgrComputePipeline || new Manager; + WebGPU.mgrShaderModule = WebGPU.mgrShaderModule || new Manager; + WebGPU.mgrRenderBundleEncoder = WebGPU.mgrRenderBundleEncoder || new Manager; + WebGPU.mgrRenderBundle = WebGPU.mgrRenderBundle || new Manager + }, + makeColor: function(ptr) { + return { + "r": HEAPF64[ptr >> 3], + "g": HEAPF64[ptr + 8 >> 3], + "b": HEAPF64[ptr + 16 >> 3], + "a": HEAPF64[ptr + 24 >> 3] + } + }, + makeExtent3D: function(ptr) { + return { + "width": HEAPU32[ptr >> 2], + "height": HEAPU32[ptr + 4 >> 2], + "depthOrArrayLayers": HEAPU32[ptr + 8 >> 2] + } + }, + makeOrigin3D: function(ptr) { + return { + "x": HEAPU32[ptr >> 2], + "y": HEAPU32[ptr + 4 >> 2], + "z": HEAPU32[ptr + 8 >> 2] + } + }, + makeImageCopyTexture: function(ptr) { + return { + "texture": WebGPU.mgrTexture.get(HEAPU32[ptr + 4 >> 2]), + "mipLevel": HEAPU32[ptr + 8 >> 2], + "origin": WebGPU.makeOrigin3D(ptr + 12), + "aspect": WebGPU.TextureAspect[HEAPU32[ptr + 24 >> 2]] + } + }, + makeTextureDataLayout: function(ptr) { + var bytesPerRow = HEAPU32[ptr + 16 >> 2]; + var rowsPerImage = HEAPU32[ptr + 20 >> 2]; + return { + "offset": HEAPU32[ptr + 4 + 8 >> 2] * 4294967296 + HEAPU32[ptr + 8 >> 2], + "bytesPerRow": bytesPerRow === 4294967295 ? undefined : bytesPerRow, + "rowsPerImage": rowsPerImage === 4294967295 ? undefined : rowsPerImage + } + }, + makeImageCopyBuffer: function(ptr) { + var layoutPtr = ptr + 8; + var bufferCopyView = WebGPU.makeTextureDataLayout(layoutPtr); + bufferCopyView["buffer"] = WebGPU.mgrBuffer.get(HEAPU32[ptr + 32 >> 2]); + return bufferCopyView + }, + makePipelineConstants: function(constantCount, constantsPtr) { + if (!constantCount) return; + var constants = {}; + for (var i = 0; i < constantCount; ++i) { + var entryPtr = constantsPtr + 16 * i; + var key = UTF8ToString(HEAPU32[entryPtr + 4 >> 2]); + constants[key] = HEAPF64[entryPtr + 8 >> 3] + } + return constants + }, + makeProgrammableStageDescriptor: function(ptr) { + if (!ptr) return undefined; + return { + "module": WebGPU.mgrShaderModule.get(HEAPU32[ptr + 4 >> 2]), + "entryPoint": UTF8ToString(HEAPU32[ptr + 8 >> 2]), + "constants": WebGPU.makePipelineConstants(HEAPU32[ptr + 12 >> 2], HEAPU32[ptr + 16 >> 2]) + } + }, + DeviceLostReason: { + undefined: 0, + destroyed: 1 + }, + PreferredFormat: { + rgba8unorm: 18, + bgra8unorm: 23 + }, + AddressMode: ["repeat", "mirror-repeat", "clamp-to-edge"], + BlendFactor: ["zero", "one", "src", "one-minus-src", "src-alpha", "one-minus-src-alpha", "dst", "one-minus-dst", "dst-alpha", "one-minus-dst-alpha", "src-alpha-saturated", "constant", "one-minus-constant"], + BlendOperation: ["add", "subtract", "reverse-subtract", "min", "max"], + BufferBindingType: [, "uniform", "storage", "read-only-storage"], + CompareFunction: [, "never", "less", "less-equal", "greater", "greater-equal", "equal", "not-equal", "always"], + CompilationInfoRequestStatus: ["success", "error", "device-lost", "unknown"], + ComputePassTimestampLocation: ["beginning", "end"], + CullMode: ["none", "front", "back"], + ErrorFilter: ["validation", "out-of-memory"], + FeatureName: { + 0: undefined, + 1: "depth-clip-control", + 2: "depth24unorm-stencil8", + 3: "depth32float-stencil8", + 4: "timestamp-query", + 5: "pipeline-statistics-query", + 6: "texture-compression-bc", + 7: "texture-compression-etc2", + 8: "texture-compression-astc", + 9: "indirect-first-instance", + 1e3: "depth-clamping" + }, + FilterMode: ["nearest", "linear"], + FrontFace: ["ccw", "cw"], + IndexFormat: [, "uint16", "uint32"], + LoadOp: [, "clear", "load"], + PipelineStatisticName: ["vertex-shader-invocations", "clipper-invocations", "clipper-primitives-out", "fragment-shader-invocations", "compute-shader-invocations"], + PowerPreference: [, "low-power", "high-performance"], + PredefinedColorSpace: [, "srgb"], + PrimitiveTopology: ["point-list", "line-list", "line-strip", "triangle-list", "triangle-strip"], + QueryType: ["occlusion", "pipeline-statistics", "timestamp"], + RenderPassTimestampLocation: ["beginning", "end"], + SamplerBindingType: [, "filtering", "non-filtering", "comparison"], + StencilOperation: ["keep", "zero", "replace", "invert", "increment-clamp", "decrement-clamp", "increment-wrap", "decrement-wrap"], + StorageTextureAccess: [, "write-only"], + StoreOp: [, "store", "discard"], + TextureAspect: ["all", "stencil-only", "depth-only"], + TextureComponentType: ["float", "sint", "uint", "depth-comparison"], + TextureDimension: ["1d", "2d", "3d"], + TextureFormat: [, "r8unorm", "r8snorm", "r8uint", "r8sint", "r16uint", "r16sint", "r16float", "rg8unorm", "rg8snorm", "rg8uint", "rg8sint", "r32float", "r32uint", "r32sint", "rg16uint", "rg16sint", "rg16float", "rgba8unorm", "rgba8unorm-srgb", "rgba8snorm", "rgba8uint", "rgba8sint", "bgra8unorm", "bgra8unorm-srgb", "rgb10a2unorm", "rg11b10ufloat", "rgb9e5ufloat", "rg32float", "rg32uint", "rg32sint", "rgba16uint", "rgba16sint", "rgba16float", "rgba32float", "rgba32uint", "rgba32sint", "stencil8", "depth16unorm", "depth24plus", "depth24plus-stencil8", "depth24unorm-stencil8", "depth32float", "depth32float-stencil8", "bc1-rgba-unorm", "bc1-rgba-unorm-srgb", "bc2-rgba-unorm", "bc2-rgba-unorm-srgb", "bc3-rgba-unorm", "bc3-rgba-unorm-srgb", "bc4-r-unorm", "bc4-r-snorm", "bc5-rg-unorm", "bc5-rg-snorm", "bc6h-rgb-ufloat", "bc6h-rgb-float", "bc7-rgba-unorm", "bc7-rgba-unorm-srgb", "etc2-rgb8unorm", "etc2-rgb8unorm-srgb", "etc2-rgb8a1unorm", "etc2-rgb8a1unorm-srgb", "etc2-rgba8unorm", "etc2-rgba8unorm-srgb", "eac-r11unorm", "eac-r11snorm", "eac-rg11unorm", "eac-rg11snorm", "astc-4x4-unorm", "astc-4x4-unorm-srgb", "astc-5x4-unorm", "astc-5x4-unorm-srgb", "astc-5x5-unorm", "astc-5x5-unorm-srgb", "astc-6x5-unorm", "astc-6x5-unorm-srgb", "astc-6x6-unorm", "astc-6x6-unorm-srgb", "astc-8x5-unorm", "astc-8x5-unorm-srgb", "astc-8x6-unorm", "astc-8x6-unorm-srgb", "astc-8x8-unorm", "astc-8x8-unorm-srgb", "astc-10x5-unorm", "astc-10x5-unorm-srgb", "astc-10x6-unorm", "astc-10x6-unorm-srgb", "astc-10x8-unorm", "astc-10x8-unorm-srgb", "astc-10x10-unorm", "astc-10x10-unorm-srgb", "astc-12x10-unorm", "astc-12x10-unorm-srgb", "astc-12x12-unorm", "astc-12x12-unorm-srgb"], + TextureSampleType: [, "float", "unfilterable-float", "depth", "sint", "uint"], + TextureViewDimension: [, "1d", "2d", "2d-array", "cube", "cube-array", "3d"], + VertexFormat: [, "uint8x2", "uint8x4", "sint8x2", "sint8x4", "unorm8x2", "unorm8x4", "snorm8x2", "snorm8x4", "uint16x2", "uint16x4", "sint16x2", "sint16x4", "unorm16x2", "unorm16x4", "snorm16x2", "snorm16x4", "float16x2", "float16x4", "float32", "float32x2", "float32x3", "float32x4", "uint32", "uint32x2", "uint32x3", "uint32x4", "sint32", "sint32x2", "sint32x3", "sint32x4"], + VertexStepMode: ["vertex", "instance"], + FeatureNameString2Enum: { + undefined: "0", + "depth-clip-control": "1", + "depth24unorm-stencil8": "2", + "depth32float-stencil8": "3", + "timestamp-query": "4", + "pipeline-statistics-query": "5", + "texture-compression-bc": "6", + "texture-compression-etc2": "7", + "texture-compression-astc": "8", + "indirect-first-instance": "9", + "depth-clamping": "1000" + } + }; + + function _emscripten_webgpu_get_device() { + var device = Module["preinitializedWebGPUDevice"]; + var deviceWrapper = { + queueId: WebGPU.mgrQueue.create(device["queue"]) + }; + return WebGPU.mgrDevice.create(device, deviceWrapper) + } + var ENV = {}; + + function getExecutableName() { + return thisProgram || "./this.program" + } + + function getEnvStrings() { + if (!getEnvStrings.strings) { + var lang = (typeof navigator == "object" && navigator.languages && navigator.languages[0] || "C").replace("-", "_") + ".UTF-8"; + var env = { + "USER": "web_user", + "LOGNAME": "web_user", + "PATH": "/", + "PWD": "/", + "HOME": "/home/web_user", + "LANG": lang, + "_": getExecutableName() + }; + for (var x in ENV) { + if (ENV[x] === undefined) delete env[x]; + else env[x] = ENV[x] + } + var strings = []; + for (var x in env) { + strings.push(x + "=" + env[x]) + } + getEnvStrings.strings = strings + } + return getEnvStrings.strings + } + + function writeAsciiToMemory(str, buffer, dontAddNull) { + for (var i = 0; i < str.length; ++i) { + HEAP8[buffer++ >> 0] = str.charCodeAt(i) + } + if (!dontAddNull) HEAP8[buffer >> 0] = 0 + } + var SYSCALLS = { + varargs: undefined, + get: function() { + SYSCALLS.varargs += 4; + var ret = HEAP32[SYSCALLS.varargs - 4 >> 2]; + return ret + }, + getStr: function(ptr) { + var ret = UTF8ToString(ptr); + return ret + } + }; + + function _environ_get(__environ, environ_buf) { + var bufSize = 0; + getEnvStrings().forEach(function(string, i) { + var ptr = environ_buf + bufSize; + HEAPU32[__environ + i * 4 >> 2] = ptr; + writeAsciiToMemory(string, ptr); + bufSize += string.length + 1 + }); + return 0 + } + + function _environ_sizes_get(penviron_count, penviron_buf_size) { + var strings = getEnvStrings(); + HEAPU32[penviron_count >> 2] = strings.length; + var bufSize = 0; + strings.forEach(function(string) { + bufSize += string.length + 1 + }); + HEAPU32[penviron_buf_size >> 2] = bufSize; + return 0 + } + var printCharBuffers = [null, [], + [] + ]; + + function printChar(stream, curr) { + var buffer = printCharBuffers[stream]; + if (curr === 0 || curr === 10) { + (stream === 1 ? out : err)(UTF8ArrayToString(buffer, 0)); + buffer.length = 0 + } else { + buffer.push(curr) + } + } + + function _fd_write(fd, iov, iovcnt, pnum) { + var num = 0; + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAPU32[iov >> 2]; + var len = HEAPU32[iov + 4 >> 2]; + iov += 8; + for (var j = 0; j < len; j++) { + printChar(fd, HEAPU8[ptr + j]) + } + num += len + } + HEAPU32[pnum >> 2] = num; + return 0 + } + + function _setTempRet0(val) { + setTempRet0(val) + } + + function _wgpuAdapterGetProperties(adapterId, properties) { + HEAP32[properties + 4 >> 2] = 0; + HEAP32[properties + 8 >> 2] = 0; + HEAP32[properties + 12 >> 2] = 0; + HEAP32[properties + 16 >> 2] = 0; + HEAP32[properties + 20 >> 2] = 3; + HEAP32[properties + 24 >> 2] = 1 + } + + function _wgpuAdapterHasFeature(adapterId, featureEnumValue) { + var adapter = WebGPU.mgrAdapter.get(adapterId); + return adapter.features.has(WebGPU.FeatureName[featureEnumValue]) + } + + function _wgpuAdapterRelease(id) { + WebGPU.mgrAdapter.release(id) + } + + function _wgpuBindGroupRelease(id) { + WebGPU.mgrBindGroup.release(id) + } + + function _wgpuBufferDestroy(bufferId) { + WebGPU.mgrBuffer.get(bufferId)["destroy"]() + } + + function _wgpuBufferGetMappedRange(bufferId, offset, size) { + var bufferWrapper = WebGPU.mgrBuffer.objects[bufferId]; + if (size === 0) warnOnce("getMappedRange size=0 no longer means WGPU_WHOLE_MAP_SIZE"); + size = size >>> 0; + if (size === 4294967295) size = undefined; + if (bufferWrapper.mapMode !== 2) { + return 0 + } + var mapped; + try { + mapped = bufferWrapper.object["getMappedRange"](offset, size) + } catch (ex) { + return 0 + } + var data = _malloc(mapped.byteLength); + HEAPU8.fill(0, data, mapped.byteLength); + bufferWrapper.onUnmap.push(function() { + new Uint8Array(mapped).set(HEAPU8.subarray(data, data + mapped.byteLength)); + _free(data) + }); + return data + } + + function _wgpuBufferRelease(id) { + WebGPU.mgrBuffer.release(id) + } + + function _wgpuBufferUnmap(bufferId) { + var bufferWrapper = WebGPU.mgrBuffer.objects[bufferId]; + if (!bufferWrapper.onUnmap) { + return + } + for (var i = 0; i < bufferWrapper.onUnmap.length; ++i) { + bufferWrapper.onUnmap[i]() + } + bufferWrapper.onUnmap = undefined; + bufferWrapper.object["unmap"]() + } + + function _wgpuCommandBufferRelease(id) { + WebGPU.mgrCommandBuffer.release(id) + } + + function _wgpuCommandEncoderBeginComputePass(encoderId, descriptor) { + var desc; + + function makeComputePassTimestampWrite(twPtr) { + return { + "querySet": WebGPU.mgrQuerySet.get(HEAPU32[twPtr >> 2]), + "queryIndex": HEAPU32[twPtr + 4 >> 2], + "location": WebGPU.ComputePassTimestampLocation[HEAPU32[twPtr + 8 >> 2]] + } + } + + function makeComputePassTimestampWrites(count, twPtr) { + var timestampWrites = []; + for (var i = 0; i < count; ++i) { + timestampWrites.push(makeComputePassTimestampWrite(twPtr + 12 * i)) + } + return timestampWrites + } + if (descriptor) { + desc = {}; + var labelPtr = HEAPU32[descriptor + 4 >> 2]; + if (labelPtr) desc["label"] = UTF8ToString(labelPtr); + var timestampWriteCount = HEAPU32[descriptor + 8 >> 2]; + if (timestampWriteCount) { + desc["timestampWrites"] = makeComputePassTimestampWrites(timestampWriteCount, HEAPU32[descriptor + 12 >> 2]) + } + } + var commandEncoder = WebGPU.mgrCommandEncoder.get(encoderId); + return WebGPU.mgrComputePassEncoder.create(commandEncoder["beginComputePass"](desc)) + } + + function _wgpuCommandEncoderBeginRenderPass(encoderId, descriptor) { + function makeColorAttachment(caPtr) { + var viewPtr = HEAPU32[caPtr >> 2]; + if (viewPtr === 0) { + return undefined + } + var loadOpInt = HEAPU32[caPtr + 8 >> 2]; + var storeOpInt = HEAPU32[caPtr + 12 >> 2]; + var clearValue = WebGPU.makeColor(caPtr + 16); + return { + "view": WebGPU.mgrTextureView.get(viewPtr), + "resolveTarget": WebGPU.mgrTextureView.get(HEAPU32[caPtr + 4 >> 2]), + "clearValue": clearValue, + "loadOp": WebGPU.LoadOp[loadOpInt], + "storeOp": WebGPU.StoreOp[storeOpInt] + } + } + + function makeColorAttachments(count, caPtr) { + var attachments = []; + for (var i = 0; i < count; ++i) { + attachments.push(makeColorAttachment(caPtr + 48 * i)) + } + return attachments + } + + function makeDepthStencilAttachment(dsaPtr) { + if (dsaPtr === 0) return undefined; + return { + "view": WebGPU.mgrTextureView.get(HEAPU32[dsaPtr >> 2]), + "depthClearValue": HEAPF32[dsaPtr + 12 >> 2], + "depthLoadOp": WebGPU.LoadOp[HEAPU32[dsaPtr + 4 >> 2]], + "depthStoreOp": WebGPU.StoreOp[HEAPU32[dsaPtr + 8 >> 2]], + "depthReadOnly": HEAP8[dsaPtr + 16 >> 0] !== 0, + "stencilClearValue": HEAPU32[dsaPtr + 28 >> 2], + "stencilLoadOp": WebGPU.LoadOp[HEAPU32[dsaPtr + 20 >> 2]], + "stencilStoreOp": WebGPU.StoreOp[HEAPU32[dsaPtr + 24 >> 2]], + "stencilReadOnly": HEAP8[dsaPtr + 32 >> 0] !== 0 + } + } + + function makeRenderPassTimestampWrite(twPtr) { + return { + "querySet": WebGPU.mgrQuerySet.get(HEAPU32[twPtr >> 2]), + "queryIndex": HEAPU32[twPtr + 4 >> 2], + "location": WebGPU.RenderPassTimestampLocation[HEAPU32[twPtr + 8 >> 2]] + } + } + + function makeRenderPassTimestampWrites(count, twPtr) { + var timestampWrites = []; + for (var i = 0; i < count; ++i) { + timestampWrites.push(makeRenderPassTimestampWrite(twPtr + 12 * i)) + } + return timestampWrites + } + + function makeRenderPassDescriptor(descriptor) { + var desc = { + "label": undefined, + "colorAttachments": makeColorAttachments(HEAPU32[descriptor + 8 >> 2], HEAPU32[descriptor + 12 >> 2]), + "depthStencilAttachment": makeDepthStencilAttachment(HEAPU32[descriptor + 16 >> 2]), + "occlusionQuerySet": WebGPU.mgrQuerySet.get(HEAPU32[descriptor + 20 >> 2]) + }; + var labelPtr = HEAPU32[descriptor + 4 >> 2]; + if (labelPtr) desc["label"] = UTF8ToString(labelPtr); + var timestampWriteCount = HEAPU32[descriptor + 24 >> 2]; + if (timestampWriteCount) { + desc["timestampWrites"] = makeRenderPassTimestampWrites(timestampWriteCount, HEAPU32[descriptor + 28 >> 2]) + } + return desc + } + var desc = makeRenderPassDescriptor(descriptor); + var commandEncoder = WebGPU.mgrCommandEncoder.get(encoderId); + return WebGPU.mgrRenderPassEncoder.create(commandEncoder["beginRenderPass"](desc)) + } + + function _wgpuCommandEncoderCopyBufferToBuffer(encoderId, srcId, srcOffset_low, srcOffset_high, dstId, dstOffset_low, dstOffset_high, size_low, size_high) { + var commandEncoder = WebGPU.mgrCommandEncoder.get(encoderId); + var src = WebGPU.mgrBuffer.get(srcId); + var dst = WebGPU.mgrBuffer.get(dstId); + commandEncoder["copyBufferToBuffer"](src, srcOffset_high * 4294967296 + srcOffset_low, dst, dstOffset_high * 4294967296 + dstOffset_low, size_high * 4294967296 + size_low) + } + + function _wgpuCommandEncoderCopyBufferToTexture(encoderId, srcPtr, dstPtr, copySizePtr) { + var commandEncoder = WebGPU.mgrCommandEncoder.get(encoderId); + var copySize = WebGPU.makeExtent3D(copySizePtr); + commandEncoder["copyBufferToTexture"](WebGPU.makeImageCopyBuffer(srcPtr), WebGPU.makeImageCopyTexture(dstPtr), copySize) + } + + function _wgpuCommandEncoderCopyTextureToTexture(encoderId, srcPtr, dstPtr, copySizePtr) { + var commandEncoder = WebGPU.mgrCommandEncoder.get(encoderId); + var copySize = WebGPU.makeExtent3D(copySizePtr); + commandEncoder["copyTextureToTexture"](WebGPU.makeImageCopyTexture(srcPtr), WebGPU.makeImageCopyTexture(dstPtr), copySize) + } + + function _wgpuCommandEncoderFinish(encoderId) { + var commandEncoder = WebGPU.mgrCommandEncoder.get(encoderId); + return WebGPU.mgrCommandBuffer.create(commandEncoder["finish"]()) + } + + function _wgpuCommandEncoderRelease(id) { + WebGPU.mgrCommandEncoder.release(id) + } + + function _wgpuComputePassEncoderDispatchWorkgroups(passId, x, y, z) { + var pass = WebGPU.mgrComputePassEncoder.get(passId); + if (pass["dispatchWorkgroups"]) { + pass["dispatchWorkgroups"](x, y, z) + } else { + pass["dispatch"](x, y, z) + } + } + + function _wgpuComputePassEncoderDispatchWorkgroupsIndirect(passId, indirectBufferId, indirectOffset_low, indirectOffset_high) { + var indirectBuffer = WebGPU.mgrBuffer.get(indirectBufferId); + var indirectOffset = indirectOffset_high * 4294967296 + indirectOffset_low; + var pass = WebGPU.mgrComputePassEncoder.get(passId); + if (pass["dispatchWorkgroupsIndirect"]) { + pass["dispatchWorkgroupsIndirect"](indirectBuffer, indirectOffset) + } else { + pass["dispatchIndirect"](indirectBuffer, indirectOffset) + } + } + + function _wgpuComputePassEncoderEnd(passId) { + var pass = WebGPU.mgrComputePassEncoder.get(passId); + pass["end"]() + } + + function _wgpuComputePassEncoderRelease(id) { + WebGPU.mgrComputePassEncoder.release(id) + } + + function _wgpuComputePassEncoderSetBindGroup(passId, groupIndex, groupId, dynamicOffsetCount, dynamicOffsetsPtr) { + var pass = WebGPU.mgrComputePassEncoder.get(passId); + var group = WebGPU.mgrBindGroup.get(groupId); + if (dynamicOffsetCount == 0) { + pass["setBindGroup"](groupIndex, group) + } else { + var offsets = []; + for (var i = 0; i < dynamicOffsetCount; i++, dynamicOffsetsPtr += 4) { + offsets.push(HEAPU32[dynamicOffsetsPtr >> 2]) + } + pass["setBindGroup"](groupIndex, group, offsets) + } + } + + function _wgpuComputePassEncoderSetPipeline(passId, pipelineId) { + var pass = WebGPU.mgrComputePassEncoder.get(passId); + var pipeline = WebGPU.mgrComputePipeline.get(pipelineId); + pass["setPipeline"](pipeline) + } + + function _wgpuComputePipelineRelease(id) { + WebGPU.mgrComputePipeline.release(id) + } + + function _wgpuDeviceCreateBindGroup(deviceId, descriptor) { + function makeEntry(entryPtr) { + var bufferId = HEAPU32[entryPtr + 8 >> 2]; + var samplerId = HEAPU32[entryPtr + 32 >> 2]; + var textureViewId = HEAPU32[entryPtr + 36 >> 2]; + var binding = HEAPU32[entryPtr + 4 >> 2]; + if (bufferId) { + var size_low = HEAPU32[entryPtr + 24 >> 2]; + var size_high = HEAPU32[entryPtr + 28 >> 2]; + var size = size_high === -1 && size_low === -1 ? undefined : size_high * 4294967296 + size_low; + return { + "binding": binding, + "resource": { + "buffer": WebGPU.mgrBuffer.get(bufferId), + "offset": HEAPU32[entryPtr + 4 + 16 >> 2] * 4294967296 + HEAPU32[entryPtr + 16 >> 2], + "size": size + } + } + } else if (samplerId) { + return { + "binding": binding, + "resource": WebGPU.mgrSampler.get(samplerId) + } + } else { + return { + "binding": binding, + "resource": WebGPU.mgrTextureView.get(textureViewId) + } + } + } + + function makeEntries(count, entriesPtrs) { + var entries = []; + for (var i = 0; i < count; ++i) { + entries.push(makeEntry(entriesPtrs + 40 * i)) + } + return entries + } + var desc = { + "label": undefined, + "layout": WebGPU.mgrBindGroupLayout.get(HEAPU32[descriptor + 8 >> 2]), + "entries": makeEntries(HEAPU32[descriptor + 12 >> 2], HEAPU32[descriptor + 16 >> 2]) + }; + var labelPtr = HEAPU32[descriptor + 4 >> 2]; + if (labelPtr) desc["label"] = UTF8ToString(labelPtr); + var device = WebGPU.mgrDevice.get(deviceId); + return WebGPU.mgrBindGroup.create(device["createBindGroup"](desc)) + } + + function _wgpuDeviceCreateBindGroupLayout(deviceId, descriptor) { + function makeBufferEntry(entryPtr) { + var typeInt = HEAPU32[entryPtr + 4 >> 2]; + if (!typeInt) return undefined; + return { + "type": WebGPU.BufferBindingType[typeInt], + "hasDynamicOffset": HEAP8[entryPtr + 8 >> 0] !== 0, + "minBindingSize": HEAPU32[entryPtr + 4 + 16 >> 2] * 4294967296 + HEAPU32[entryPtr + 16 >> 2] + } + } + + function makeSamplerEntry(entryPtr) { + var typeInt = HEAPU32[entryPtr + 4 >> 2]; + if (!typeInt) return undefined; + return { + "type": WebGPU.SamplerBindingType[typeInt] + } + } + + function makeTextureEntry(entryPtr) { + var sampleTypeInt = HEAPU32[entryPtr + 4 >> 2]; + if (!sampleTypeInt) return undefined; + return { + "sampleType": WebGPU.TextureSampleType[sampleTypeInt], + "viewDimension": WebGPU.TextureViewDimension[HEAPU32[entryPtr + 8 >> 2]], + "multisampled": HEAP8[entryPtr + 12 >> 0] !== 0 + } + } + + function makeStorageTextureEntry(entryPtr) { + var accessInt = HEAPU32[entryPtr + 4 >> 2]; + if (!accessInt) return undefined; + return { + "access": WebGPU.StorageTextureAccess[accessInt], + "format": WebGPU.TextureFormat[HEAPU32[entryPtr + 8 >> 2]], + "viewDimension": WebGPU.TextureViewDimension[HEAPU32[entryPtr + 12 >> 2]] + } + } + + function makeEntry(entryPtr) { + return { + "binding": HEAPU32[entryPtr + 4 >> 2], + "visibility": HEAPU32[entryPtr + 8 >> 2], + "buffer": makeBufferEntry(entryPtr + 16), + "sampler": makeSamplerEntry(entryPtr + 40), + "texture": makeTextureEntry(entryPtr + 48), + "storageTexture": makeStorageTextureEntry(entryPtr + 64) + } + } + + function makeEntries(count, entriesPtrs) { + var entries = []; + for (var i = 0; i < count; ++i) { + entries.push(makeEntry(entriesPtrs + 80 * i)) + } + return entries + } + var desc = { + "entries": makeEntries(HEAPU32[descriptor + 8 >> 2], HEAPU32[descriptor + 12 >> 2]) + }; + var labelPtr = HEAPU32[descriptor + 4 >> 2]; + if (labelPtr) desc["label"] = UTF8ToString(labelPtr); + var device = WebGPU.mgrDevice.get(deviceId); + return WebGPU.mgrBindGroupLayout.create(device["createBindGroupLayout"](desc)) + } + + function _wgpuDeviceCreateBuffer(deviceId, descriptor) { + var mappedAtCreation = HEAP8[descriptor + 24 >> 0] !== 0; + var desc = { + "label": undefined, + "usage": HEAPU32[descriptor + 8 >> 2], + "size": HEAPU32[descriptor + 4 + 16 >> 2] * 4294967296 + HEAPU32[descriptor + 16 >> 2], + "mappedAtCreation": mappedAtCreation + }; + var labelPtr = HEAPU32[descriptor + 4 >> 2]; + if (labelPtr) desc["label"] = UTF8ToString(labelPtr); + var device = WebGPU.mgrDevice.get(deviceId); + var bufferWrapper = {}; + var id = WebGPU.mgrBuffer.create(device["createBuffer"](desc), bufferWrapper); + if (mappedAtCreation) { + bufferWrapper.mapMode = 2; + bufferWrapper.onUnmap = [] + } + return id + } + + function _wgpuDeviceCreateCommandEncoder(deviceId, descriptor) { + var desc; + if (descriptor) { + desc = { + "label": undefined + }; + var labelPtr = HEAPU32[descriptor + 4 >> 2]; + if (labelPtr) desc["label"] = UTF8ToString(labelPtr) + } + var device = WebGPU.mgrDevice.get(deviceId); + return WebGPU.mgrCommandEncoder.create(device["createCommandEncoder"](desc)) + } + + function _wgpuDeviceCreateComputePipeline(deviceId, descriptor) { + var desc = { + "label": undefined, + "layout": WebGPU.mgrPipelineLayout.get(HEAPU32[descriptor + 8 >> 2]), + "compute": WebGPU.makeProgrammableStageDescriptor(descriptor + 12) + }; + var labelPtr = HEAPU32[descriptor + 4 >> 2]; + if (labelPtr) desc["label"] = UTF8ToString(labelPtr); + var device = WebGPU.mgrDevice.get(deviceId); + return WebGPU.mgrComputePipeline.create(device["createComputePipeline"](desc)) + } + + function _wgpuDeviceCreatePipelineLayout(deviceId, descriptor) { + var bglCount = HEAPU32[descriptor + 8 >> 2]; + var bglPtr = HEAPU32[descriptor + 12 >> 2]; + var bgls = []; + for (var i = 0; i < bglCount; ++i) { + bgls.push(WebGPU.mgrBindGroupLayout.get(HEAPU32[bglPtr + 4 * i >> 2])) + } + var desc = { + "label": undefined, + "bindGroupLayouts": bgls + }; + var labelPtr = HEAPU32[descriptor + 4 >> 2]; + if (labelPtr) desc["label"] = UTF8ToString(labelPtr); + var device = WebGPU.mgrDevice.get(deviceId); + return WebGPU.mgrPipelineLayout.create(device["createPipelineLayout"](desc)) + } + + function _wgpuDeviceCreateRenderPipeline(deviceId, descriptor) { + function makePrimitiveState(rsPtr) { + if (!rsPtr) return undefined; + return { + "topology": WebGPU.PrimitiveTopology[HEAPU32[rsPtr + 4 >> 2]], + "stripIndexFormat": WebGPU.IndexFormat[HEAPU32[rsPtr + 8 >> 2]], + "frontFace": WebGPU.FrontFace[HEAPU32[rsPtr + 12 >> 2]], + "cullMode": WebGPU.CullMode[HEAPU32[rsPtr + 16 >> 2]] + } + } + + function makeBlendComponent(bdPtr) { + if (!bdPtr) return undefined; + return { + "operation": WebGPU.BlendOperation[HEAPU32[bdPtr >> 2]], + "srcFactor": WebGPU.BlendFactor[HEAPU32[bdPtr + 4 >> 2]], + "dstFactor": WebGPU.BlendFactor[HEAPU32[bdPtr + 8 >> 2]] + } + } + + function makeBlendState(bsPtr) { + if (!bsPtr) return undefined; + return { + "alpha": makeBlendComponent(bsPtr + 12), + "color": makeBlendComponent(bsPtr + 0) + } + } + + function makeColorState(csPtr) { + var formatInt = HEAPU32[csPtr + 4 >> 2]; + return formatInt === 0 ? undefined : { + "format": WebGPU.TextureFormat[formatInt], + "blend": makeBlendState(HEAPU32[csPtr + 8 >> 2]), + "writeMask": HEAPU32[csPtr + 12 >> 2] + } + } + + function makeColorStates(count, csArrayPtr) { + var states = []; + for (var i = 0; i < count; ++i) { + states.push(makeColorState(csArrayPtr + 16 * i)) + } + return states + } + + function makeStencilStateFace(ssfPtr) { + return { + "compare": WebGPU.CompareFunction[HEAPU32[ssfPtr >> 2]], + "failOp": WebGPU.StencilOperation[HEAPU32[ssfPtr + 4 >> 2]], + "depthFailOp": WebGPU.StencilOperation[HEAPU32[ssfPtr + 8 >> 2]], + "passOp": WebGPU.StencilOperation[HEAPU32[ssfPtr + 12 >> 2]] + } + } + + function makeDepthStencilState(dssPtr) { + if (!dssPtr) return undefined; + return { + "format": WebGPU.TextureFormat[HEAPU32[dssPtr + 4 >> 2]], + "depthWriteEnabled": HEAP8[dssPtr + 8 >> 0] !== 0, + "depthCompare": WebGPU.CompareFunction[HEAPU32[dssPtr + 12 >> 2]], + "stencilFront": makeStencilStateFace(dssPtr + 16), + "stencilBack": makeStencilStateFace(dssPtr + 32), + "stencilReadMask": HEAPU32[dssPtr + 48 >> 2], + "stencilWriteMask": HEAPU32[dssPtr + 52 >> 2], + "depthBias": HEAPU32[dssPtr + 56 >> 2], + "depthBiasSlopeScale": HEAPF32[dssPtr + 60 >> 2], + "depthBiasClamp": HEAPF32[dssPtr + 64 >> 2] + } + } + + function makeVertexAttribute(vaPtr) { + return { + "format": WebGPU.VertexFormat[HEAPU32[vaPtr >> 2]], + "offset": HEAPU32[vaPtr + 4 + 8 >> 2] * 4294967296 + HEAPU32[vaPtr + 8 >> 2], + "shaderLocation": HEAPU32[vaPtr + 16 >> 2] + } + } + + function makeVertexAttributes(count, vaArrayPtr) { + var vas = []; + for (var i = 0; i < count; ++i) { + vas.push(makeVertexAttribute(vaArrayPtr + i * 24)) + } + return vas + } + + function makeVertexBuffer(vbPtr) { + if (!vbPtr) return undefined; + return { + "arrayStride": HEAPU32[vbPtr + 4 >> 2] * 4294967296 + HEAPU32[vbPtr >> 2], + "stepMode": WebGPU.VertexStepMode[HEAPU32[vbPtr + 8 >> 2]], + "attributes": makeVertexAttributes(HEAPU32[vbPtr + 12 >> 2], HEAPU32[vbPtr + 16 >> 2]) + } + } + + function makeVertexBuffers(count, vbArrayPtr) { + if (!count) return undefined; + var vbs = []; + for (var i = 0; i < count; ++i) { + vbs.push(makeVertexBuffer(vbArrayPtr + i * 24)) + } + return vbs + } + + function makeVertexState(viPtr) { + if (!viPtr) return undefined; + return { + "module": WebGPU.mgrShaderModule.get(HEAPU32[viPtr + 4 >> 2]), + "entryPoint": UTF8ToString(HEAPU32[viPtr + 8 >> 2]), + "constants": WebGPU.makePipelineConstants(HEAPU32[viPtr + 12 >> 2], HEAPU32[viPtr + 16 >> 2]), + "buffers": makeVertexBuffers(HEAPU32[viPtr + 20 >> 2], HEAPU32[viPtr + 24 >> 2]) + } + } + + function makeMultisampleState(msPtr) { + if (!msPtr) return undefined; + return { + "count": HEAPU32[msPtr + 4 >> 2], + "mask": HEAPU32[msPtr + 8 >> 2], + "alphaToCoverageEnabled": HEAP8[msPtr + 12 >> 0] !== 0 + } + } + + function makeFragmentState(fsPtr) { + if (!fsPtr) return undefined; + return { + "module": WebGPU.mgrShaderModule.get(HEAPU32[fsPtr + 4 >> 2]), + "entryPoint": UTF8ToString(HEAPU32[fsPtr + 8 >> 2]), + "constants": WebGPU.makePipelineConstants(HEAPU32[fsPtr + 12 >> 2], HEAPU32[fsPtr + 16 >> 2]), + "targets": makeColorStates(HEAPU32[fsPtr + 20 >> 2], HEAPU32[fsPtr + 24 >> 2]) + } + } + var desc = { + "label": undefined, + "layout": WebGPU.mgrPipelineLayout.get(HEAPU32[descriptor + 8 >> 2]), + "vertex": makeVertexState(descriptor + 12), + "primitive": makePrimitiveState(descriptor + 40), + "depthStencil": makeDepthStencilState(HEAPU32[descriptor + 60 >> 2]), + "multisample": makeMultisampleState(descriptor + 64), + "fragment": makeFragmentState(HEAPU32[descriptor + 80 >> 2]) + }; + var labelPtr = HEAPU32[descriptor + 4 >> 2]; + if (labelPtr) desc["label"] = UTF8ToString(labelPtr); + var device = WebGPU.mgrDevice.get(deviceId); + return WebGPU.mgrRenderPipeline.create(device["createRenderPipeline"](desc)) + } + + function _wgpuDeviceCreateSampler(deviceId, descriptor) { + var desc = { + "label": undefined, + "addressModeU": WebGPU.AddressMode[HEAPU32[descriptor + 8 >> 2]], + "addressModeV": WebGPU.AddressMode[HEAPU32[descriptor + 12 >> 2]], + "addressModeW": WebGPU.AddressMode[HEAPU32[descriptor + 16 >> 2]], + "magFilter": WebGPU.FilterMode[HEAPU32[descriptor + 20 >> 2]], + "minFilter": WebGPU.FilterMode[HEAPU32[descriptor + 24 >> 2]], + "mipmapFilter": WebGPU.FilterMode[HEAPU32[descriptor + 28 >> 2]], + "lodMinClamp": HEAPF32[descriptor + 32 >> 2], + "lodMaxClamp": HEAPF32[descriptor + 36 >> 2], + "compare": WebGPU.CompareFunction[HEAPU32[descriptor + 40 >> 2]] + }; + var labelPtr = HEAPU32[descriptor + 4 >> 2]; + if (labelPtr) desc["label"] = UTF8ToString(labelPtr); + var device = WebGPU.mgrDevice.get(deviceId); + return WebGPU.mgrSampler.create(device["createSampler"](desc)) + } + + function _wgpuDeviceCreateShaderModule(deviceId, descriptor) { + var nextInChainPtr = HEAPU32[descriptor >> 2]; + var sType = HEAPU32[nextInChainPtr + 4 >> 2]; + var desc = { + "label": undefined, + "code": "" + }; + var labelPtr = HEAPU32[descriptor + 4 >> 2]; + if (labelPtr) desc["label"] = UTF8ToString(labelPtr); + switch (sType) { + case 5: { + var count = HEAPU32[nextInChainPtr + 8 >> 2]; + var start = HEAPU32[nextInChainPtr + 12 >> 2]; + desc["code"] = HEAPU32.subarray(start >> 2, (start >> 2) + count); + break + } + case 6: { + var sourcePtr = HEAPU32[nextInChainPtr + 8 >> 2]; + if (sourcePtr) { + desc["code"] = UTF8ToString(sourcePtr) + } + break + } + } + var device = WebGPU.mgrDevice.get(deviceId); + return WebGPU.mgrShaderModule.create(device["createShaderModule"](desc)) + } + + function _wgpuDeviceCreateSwapChain(deviceId, surfaceId, descriptor) { + var device = WebGPU.mgrDevice.get(deviceId); + var context = WebGPU.mgrSurface.get(surfaceId); + var canvasSize = [HEAPU32[descriptor + 16 >> 2], HEAPU32[descriptor + 20 >> 2]]; + if (canvasSize[0] !== 0) { + context["canvas"]["width"] = canvasSize[0] + } + if (canvasSize[1] !== 0) { + context["canvas"]["height"] = canvasSize[1] + } + var configuration = { + "device": device, + "format": WebGPU.TextureFormat[HEAPU32[descriptor + 12 >> 2]], + "usage": HEAPU32[descriptor + 8 >> 2], + "alphaMode": "opaque" + }; + context["configure"](configuration); + return WebGPU.mgrSwapChain.create(context) + } + + function _wgpuDeviceCreateTexture(deviceId, descriptor) { + var desc = { + "label": undefined, + "size": WebGPU.makeExtent3D(descriptor + 16), + "mipLevelCount": HEAPU32[descriptor + 32 >> 2], + "sampleCount": HEAPU32[descriptor + 36 >> 2], + "dimension": WebGPU.TextureDimension[HEAPU32[descriptor + 12 >> 2]], + "format": WebGPU.TextureFormat[HEAPU32[descriptor + 28 >> 2]], + "usage": HEAPU32[descriptor + 8 >> 2] + }; + var labelPtr = HEAPU32[descriptor + 4 >> 2]; + if (labelPtr) desc["label"] = UTF8ToString(labelPtr); + var viewFormatCount = HEAPU32[descriptor + 40 >> 2]; + if (viewFormatCount) { + var viewFormatsPtr = HEAPU32[descriptor + 44 >> 2]; + desc["viewFormats"] = Array.from(HEAP32.subarray(viewFormatsPtr >> 2, (viewFormatsPtr >> 2) + viewFormatCount), function(format) { + return WebGPU.TextureFormat[format] + }) + } + var device = WebGPU.mgrDevice.get(deviceId); + return WebGPU.mgrTexture.create(device["createTexture"](desc)) + } + + function _wgpuDeviceGetQueue(deviceId) { + var queueId = WebGPU.mgrDevice.objects[deviceId].queueId; + WebGPU.mgrQueue.reference(queueId); + return queueId + } + + function _wgpuDeviceRelease(id) { + WebGPU.mgrDevice.release(id) + } + + function maybeCStringToJsString(cString) { + return cString > 2 ? UTF8ToString(cString) : cString + } + var specialHTMLTargets = [0, document, window]; + + function findEventTarget(target) { + target = maybeCStringToJsString(target); + var domElement = specialHTMLTargets[target] || document.querySelector(target); + return domElement + } + + function findCanvasEventTarget(target) { + return findEventTarget(target) + } + + function _wgpuInstanceCreateSurface(instanceId, descriptor) { + var nextInChainPtr = HEAPU32[descriptor >> 2]; + var descriptorFromCanvasHTMLSelector = nextInChainPtr; + var selectorPtr = HEAPU32[descriptorFromCanvasHTMLSelector + 8 >> 2]; + var canvas = findCanvasEventTarget(selectorPtr); + var context = canvas.getContext("webgpu"); + if (!context) return 0; + var labelPtr = HEAPU32[descriptor + 4 >> 2]; + if (labelPtr) context.surfaceLabelWebGPU = UTF8ToString(labelPtr); + return WebGPU.mgrSurface.create(context) + } + + function _wgpuInstanceRelease() {} + + function callUserCallback(func) { + if (ABORT) { + return + } + try { + func() + } catch (e) { + handleException(e) + } + } + + function allocateUTF8(str) { + var size = lengthBytesUTF8(str) + 1; + var ret = _malloc(size); + if (ret) stringToUTF8Array(str, HEAP8, ret, size); + return ret + } + + function _wgpuInstanceRequestAdapter(instanceId, options, callback, userdata) { + var opts; + if (options) { + opts = { + "powerPreference": WebGPU.PowerPreference[HEAPU32[options + 8 >> 2]], + "forceFallbackAdapter": HEAP8[options + 12 >> 0] !== 0 + } + } + if (!("gpu" in navigator)) { + var messagePtr = allocateUTF8("WebGPU not available on this browser (navigator.gpu is not available)"); + getWasmTableEntry(callback)(1, 0, messagePtr, userdata); + _free(messagePtr); + return + } + navigator["gpu"]["requestAdapter"](opts).then(function(adapter) { + callUserCallback(function() { + if (adapter) { + var adapterId = WebGPU.mgrAdapter.create(adapter); + getWasmTableEntry(callback)(0, adapterId, 0, userdata) + } else { + var messagePtr = allocateUTF8("WebGPU not available on this system (requestAdapter returned null)"); + getWasmTableEntry(callback)(1, 0, messagePtr, userdata); + _free(messagePtr) + } + }) + }, function(ex) { + callUserCallback(function() { + var messagePtr = allocateUTF8(ex.message); + getWasmTableEntry(callback)(2, 0, messagePtr, userdata); + _free(messagePtr) + }) + }) + } + + function _wgpuPipelineLayoutRelease(id) { + WebGPU.mgrPipelineLayout.release(id) + } + + function _wgpuQuerySetDestroy(querySetId) { + WebGPU.mgrQuerySet.get(querySetId)["destroy"]() + } + + function _wgpuQuerySetRelease(id) { + WebGPU.mgrQuerySet.release(id) + } + + function _wgpuQueueOnSubmittedWorkDone(queueId, signalValue_low, signalValue_high, callback, userdata) { + var queue = WebGPU.mgrQueue.get(queueId); + queue["onSubmittedWorkDone"]().then(function() { + callUserCallback(function() { + getWasmTableEntry(callback)(0, userdata) + }) + }, function() { + callUserCallback(function() { + getWasmTableEntry(callback)(1, userdata) + }) + }) + } + + function _wgpuQueueRelease(id) { + WebGPU.mgrQueue.release(id) + } + + function _wgpuQueueSubmit(queueId, commandCount, commands) { + var queue = WebGPU.mgrQueue.get(queueId); + var cmds = Array.from(HEAP32.subarray(commands >> 2, (commands >> 2) + commandCount), function(id) { + return WebGPU.mgrCommandBuffer.get(id) + }); + queue["submit"](cmds) + } + + function _wgpuQueueWriteBuffer(queueId, bufferId, bufferOffset_low, bufferOffset_high, data, size) { + var queue = WebGPU.mgrQueue.get(queueId); + var buffer = WebGPU.mgrBuffer.get(bufferId); + var bufferOffset = bufferOffset_high * 4294967296 + bufferOffset_low; + var subarray = HEAPU8.subarray(data, data + size); + queue["writeBuffer"](buffer, bufferOffset, subarray, 0, size) + } + + function _wgpuQueueWriteTexture(queueId, destinationPtr, data, dataSize, dataLayoutPtr, writeSizePtr) { + var queue = WebGPU.mgrQueue.get(queueId); + var destination = WebGPU.makeImageCopyTexture(destinationPtr); + var dataLayout = WebGPU.makeTextureDataLayout(dataLayoutPtr); + var writeSize = WebGPU.makeExtent3D(writeSizePtr); + var subarray = HEAPU8.subarray(data, data + dataSize); + queue["writeTexture"](destination, subarray, dataLayout, writeSize) + } + + function _wgpuRenderPassEncoderDraw(passId, vertexCount, instanceCount, firstVertex, firstInstance) { + var pass = WebGPU.mgrRenderPassEncoder.get(passId); + pass["draw"](vertexCount, instanceCount, firstVertex, firstInstance) + } + + function _wgpuRenderPassEncoderDrawIndexed(passId, indexCount, instanceCount, firstIndex, baseVertex, firstInstance) { + var pass = WebGPU.mgrRenderPassEncoder.get(passId); + pass["drawIndexed"](indexCount, instanceCount, firstIndex, baseVertex, firstInstance) + } + + function _wgpuRenderPassEncoderDrawIndirect(passId, indirectBufferId, indirectOffset_low, indirectOffset_high) { + var indirectBuffer = WebGPU.mgrBuffer.get(indirectBufferId); + var indirectOffset = indirectOffset_high * 4294967296 + indirectOffset_low; + var pass = WebGPU.mgrRenderPassEncoder.get(passId); + pass["drawIndirect"](indirectBuffer, indirectOffset) + } + + function _wgpuRenderPassEncoderEnd(passId) { + var pass = WebGPU.mgrRenderPassEncoder.get(passId); + pass["end"]() + } + + function _wgpuRenderPassEncoderRelease(id) { + WebGPU.mgrRenderPassEncoder.release(id) + } + + function _wgpuRenderPassEncoderSetBindGroup(passId, groupIndex, groupId, dynamicOffsetCount, dynamicOffsetsPtr) { + var pass = WebGPU.mgrRenderPassEncoder.get(passId); + var group = WebGPU.mgrBindGroup.get(groupId); + if (dynamicOffsetCount == 0) { + pass["setBindGroup"](groupIndex, group) + } else { + var offsets = []; + for (var i = 0; i < dynamicOffsetCount; i++, dynamicOffsetsPtr += 4) { + offsets.push(HEAPU32[dynamicOffsetsPtr >> 2]) + } + pass["setBindGroup"](groupIndex, group, offsets) + } + } + + function _wgpuRenderPassEncoderSetBlendConstant(passId, colorPtr) { + var pass = WebGPU.mgrRenderPassEncoder.get(passId); + var color = WebGPU.makeColor(colorPtr); + pass["setBlendConstant"](color) + } + + function _wgpuRenderPassEncoderSetIndexBuffer(passId, bufferId, format, offset_low, offset_high, size_low, size_high) { + var pass = WebGPU.mgrRenderPassEncoder.get(passId); + var buffer = WebGPU.mgrBuffer.get(bufferId); + var offset = offset_high * 4294967296 + offset_low; + var size = size_high === -1 && size_low === -1 ? undefined : size_high * 4294967296 + size_low; + pass["setIndexBuffer"](buffer, WebGPU.IndexFormat[format], offset, size) + } + + function _wgpuRenderPassEncoderSetPipeline(passId, pipelineId) { + var pass = WebGPU.mgrRenderPassEncoder.get(passId); + var pipeline = WebGPU.mgrRenderPipeline.get(pipelineId); + pass["setPipeline"](pipeline) + } + + function _wgpuRenderPassEncoderSetScissorRect(passId, x, y, w, h) { + var pass = WebGPU.mgrRenderPassEncoder.get(passId); + pass["setScissorRect"](x, y, w, h) + } + + function _wgpuRenderPassEncoderSetStencilReference(passId, reference) { + var pass = WebGPU.mgrRenderPassEncoder.get(passId); + pass["setStencilReference"](reference) + } + + function _wgpuRenderPassEncoderSetVertexBuffer(passId, slot, bufferId, offset_low, offset_high, size_low, size_high) { + var pass = WebGPU.mgrRenderPassEncoder.get(passId); + var buffer = WebGPU.mgrBuffer.get(bufferId); + var offset = offset_high * 4294967296 + offset_low; + var size = size_high === -1 && size_low === -1 ? undefined : size_high * 4294967296 + size_low; + pass["setVertexBuffer"](slot, buffer, offset, size) + } + + function _wgpuRenderPassEncoderSetViewport(passId, x, y, w, h, minDepth, maxDepth) { + var pass = WebGPU.mgrRenderPassEncoder.get(passId); + pass["setViewport"](x, y, w, h, minDepth, maxDepth) + } + + function _wgpuRenderPipelineRelease(id) { + WebGPU.mgrRenderPipeline.release(id) + } + + function _wgpuSamplerRelease(id) { + WebGPU.mgrSampler.release(id) + } + + function _wgpuShaderModuleRelease(id) { + WebGPU.mgrShaderModule.release(id) + } + + function _wgpuSurfaceRelease(id) { + WebGPU.mgrSurface.release(id) + } + + function _wgpuSwapChainGetCurrentTextureView(swapChainId) { + var context = WebGPU.mgrSwapChain.get(swapChainId); + return WebGPU.mgrTextureView.create(context["getCurrentTexture"]()["createView"]()) + } + + function _wgpuSwapChainRelease(id) { + WebGPU.mgrSwapChain.release(id) + } + + function _wgpuTextureCreateView(textureId, descriptor) { + var desc; + if (descriptor) { + var mipLevelCount = HEAPU32[descriptor + 20 >> 2]; + var arrayLayerCount = HEAPU32[descriptor + 28 >> 2]; + desc = { + "format": WebGPU.TextureFormat[HEAPU32[descriptor + 8 >> 2]], + "dimension": WebGPU.TextureViewDimension[HEAPU32[descriptor + 12 >> 2]], + "baseMipLevel": HEAPU32[descriptor + 16 >> 2], + "mipLevelCount": mipLevelCount === 4294967295 ? undefined : mipLevelCount, + "baseArrayLayer": HEAPU32[descriptor + 24 >> 2], + "arrayLayerCount": arrayLayerCount === 4294967295 ? undefined : arrayLayerCount, + "aspect": WebGPU.TextureAspect[HEAPU32[descriptor + 32 >> 2]] + }; + var labelPtr = HEAPU32[descriptor + 4 >> 2]; + if (labelPtr) desc["label"] = UTF8ToString(labelPtr) + } + var texture = WebGPU.mgrTexture.get(textureId); + return WebGPU.mgrTextureView.create(texture["createView"](desc)) + } + + function _wgpuTextureDestroy(textureId) { + WebGPU.mgrTexture.get(textureId)["destroy"]() + } + + function _wgpuTextureRelease(id) { + WebGPU.mgrTexture.release(id) + } + + function _wgpuTextureViewRelease(id) { + WebGPU.mgrTextureView.release(id) + } + + function warnOnce(text) { + if (!warnOnce.shown) warnOnce.shown = {}; + if (!warnOnce.shown[text]) { + warnOnce.shown[text] = 1; + err(text) + } + } + InternalError = Module["InternalError"] = extendError(Error, "InternalError"); + embind_init_charCodes(); + BindingError = Module["BindingError"] = extendError(Error, "BindingError"); + init_ClassHandle(); + init_embind(); + init_RegisteredPointer(); + UnboundTypeError = Module["UnboundTypeError"] = extendError(Error, "UnboundTypeError"); + init_emval(); + WebGPU.initManagers(); + var asmLibraryArg = { + "h": __embind_finalize_value_object, + "Ta": __embind_register_bigint, + "na": __embind_register_bool, + "m": __embind_register_class, + "K": __embind_register_class_class_function, + "q": __embind_register_class_constructor, + "d": __embind_register_class_function, + "c": __embind_register_class_property, + "ma": __embind_register_emval, + "Q": __embind_register_float, + "s": __embind_register_integer, + "r": __embind_register_memory_view, + "R": __embind_register_std_string, + "D": __embind_register_std_wstring, + "i": __embind_register_value_object, + "a": __embind_register_value_object_field, + "oa": __embind_register_void, + "k": __emval_as, + "V": __emval_call_void_method, + "b": __emval_decref, + "W": __emval_get_method_caller, + "g": __emval_get_property, + "l": __emval_incref, + "p": __emval_new_array, + "n": __emval_new_cstring, + "j": __emval_run_destructors, + "o": __emval_set_property, + "f": __emval_take_value, + "e": _abort, + "ka": _emscripten_memcpy_big, + "C": _emscripten_resize_heap, + "Ba": _emscripten_webgpu_get_device, + "ha": _environ_get, + "ia": _environ_sizes_get, + "ja": _fd_write, + "P": _setTempRet0, + "Ga": _wgpuAdapterGetProperties, + "J": _wgpuAdapterHasFeature, + "Da": _wgpuAdapterRelease, + "Ha": _wgpuBindGroupRelease, + "ca": _wgpuBufferDestroy, + "O": _wgpuBufferGetMappedRange, + "ba": _wgpuBufferRelease, + "B": _wgpuBufferUnmap, + "N": _wgpuCommandBufferRelease, + "Ja": _wgpuCommandEncoderBeginComputePass, + "pa": _wgpuCommandEncoderBeginRenderPass, + "Wa": _wgpuCommandEncoderCopyBufferToBuffer, + "da": _wgpuCommandEncoderCopyBufferToTexture, + "Ka": _wgpuCommandEncoderCopyTextureToTexture, + "u": _wgpuCommandEncoderFinish, + "x": _wgpuCommandEncoderRelease, + "Ia": _wgpuComputePassEncoderDispatchWorkgroups, + "Va": _wgpuComputePassEncoderDispatchWorkgroupsIndirect, + "ya": _wgpuComputePassEncoderEnd, + "wa": _wgpuComputePassEncoderRelease, + "Sa": _wgpuComputePassEncoderSetBindGroup, + "Ra": _wgpuComputePassEncoderSetPipeline, + "S": _wgpuComputePipelineRelease, + "M": _wgpuDeviceCreateBindGroup, + "L": _wgpuDeviceCreateBindGroupLayout, + "v": _wgpuDeviceCreateBuffer, + "y": _wgpuDeviceCreateCommandEncoder, + "va": _wgpuDeviceCreateComputePipeline, + "xa": _wgpuDeviceCreatePipelineLayout, + "ua": _wgpuDeviceCreateRenderPipeline, + "ta": _wgpuDeviceCreateSampler, + "G": _wgpuDeviceCreateShaderModule, + "qa": _wgpuDeviceCreateSwapChain, + "E": _wgpuDeviceCreateTexture, + "Y": _wgpuDeviceGetQueue, + "Ca": _wgpuDeviceRelease, + "Aa": _wgpuInstanceCreateSurface, + "Ea": _wgpuInstanceRelease, + "za": _wgpuInstanceRequestAdapter, + "U": _wgpuPipelineLayoutRelease, + "_": _wgpuQuerySetDestroy, + "Z": _wgpuQuerySetRelease, + "Ua": _wgpuQueueOnSubmittedWorkDone, + "I": _wgpuQueueRelease, + "z": _wgpuQueueSubmit, + "ga": _wgpuQueueWriteBuffer, + "X": _wgpuQueueWriteTexture, + "La": _wgpuRenderPassEncoderDraw, + "ea": _wgpuRenderPassEncoderDrawIndexed, + "Xa": _wgpuRenderPassEncoderDrawIndirect, + "la": _wgpuRenderPassEncoderEnd, + "Za": _wgpuRenderPassEncoderRelease, + "A": _wgpuRenderPassEncoderSetBindGroup, + "Pa": _wgpuRenderPassEncoderSetBlendConstant, + "Ya": _wgpuRenderPassEncoderSetIndexBuffer, + "Qa": _wgpuRenderPassEncoderSetPipeline, + "Na": _wgpuRenderPassEncoderSetScissorRect, + "Ma": _wgpuRenderPassEncoderSetStencilReference, + "fa": _wgpuRenderPassEncoderSetVertexBuffer, + "Oa": _wgpuRenderPassEncoderSetViewport, + "T": _wgpuRenderPipelineRelease, + "sa": _wgpuSamplerRelease, + "H": _wgpuShaderModuleRelease, + "Fa": _wgpuSurfaceRelease, + "F": _wgpuSwapChainGetCurrentTextureView, + "ra": _wgpuSwapChainRelease, + "w": _wgpuTextureCreateView, + "aa": _wgpuTextureDestroy, + "$": _wgpuTextureRelease, + "t": _wgpuTextureViewRelease + }; + var asm = createWasm(); + var ___wasm_call_ctors = Module["___wasm_call_ctors"] = function() { + return (___wasm_call_ctors = Module["___wasm_call_ctors"] = Module["asm"]["$a"]).apply(null, arguments) + }; + var _malloc = Module["_malloc"] = function() { + return (_malloc = Module["_malloc"] = Module["asm"]["bb"]).apply(null, arguments) + }; + var _free = Module["_free"] = function() { + return (_free = Module["_free"] = Module["asm"]["cb"]).apply(null, arguments) + }; + var ___getTypeName = Module["___getTypeName"] = function() { + return (___getTypeName = Module["___getTypeName"] = Module["asm"]["db"]).apply(null, arguments) + }; + var ___embind_register_native_and_builtin_types = Module["___embind_register_native_and_builtin_types"] = function() { + return (___embind_register_native_and_builtin_types = Module["___embind_register_native_and_builtin_types"] = Module["asm"]["eb"]).apply(null, arguments) + }; + var dynCall_jii = Module["dynCall_jii"] = function() { + return (dynCall_jii = Module["dynCall_jii"] = Module["asm"]["fb"]).apply(null, arguments) + }; + var dynCall_viij = Module["dynCall_viij"] = function() { + return (dynCall_viij = Module["dynCall_viij"] = Module["asm"]["gb"]).apply(null, arguments) + }; + var dynCall_jiji = Module["dynCall_jiji"] = function() { + return (dynCall_jiji = Module["dynCall_jiji"] = Module["asm"]["hb"]).apply(null, arguments) + }; + var calledRun; + dependenciesFulfilled = function runCaller() { + if (!calledRun) run(); + if (!calledRun) dependenciesFulfilled = runCaller + }; + + function run(args) { + args = args || arguments_; + if (runDependencies > 0) { + return + } + preRun(); + if (runDependencies > 0) { + return + } -var Module=typeof wasmDevice!="undefined"?wasmDevice:{};var readyPromiseResolve,readyPromiseReject;Module["ready"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=true;var ENVIRONMENT_IS_WORKER=false;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=(url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=title=>document.title=title}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var POINTER_SIZE=4;var tempRet0=0;var setTempRet0=value=>{tempRet0=value};var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort(text)}}var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heapOrArray,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){{if(Module["onAbort"]){Module["onAbort"](what)}}what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}var wasmBinaryFile;wasmBinaryFile="webgpu_wasm.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch=="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["_a"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["ab"];addOnInit(Module["asm"]["$a"]);removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(function(instance){return instance}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch=="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiationResult,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiationResult)})})}else{return instantiateArrayBuffer(receiveInstantiationResult)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync().catch(readyPromiseReject);return{}}function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){callbacks.shift()(Module)}}function handleException(e){if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)}var structRegistrations={};function runDestructors(destructors){while(destructors.length){var ptr=destructors.pop();var del=destructors.pop();del(ptr)}}function simpleReadValueFromPointer(pointer){return this["fromWireType"](HEAP32[pointer>>2])}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}return name}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n")(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,function(message){this.name=errorName;this.message=message;var stack=new Error(message).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}});errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}};return errorClass}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach(function(type){typeDependencies[type]=dependentTypes});function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i{if(registeredTypes.hasOwnProperty(dt)){typeConverters[i]=registeredTypes[dt]}else{unregisteredTypes.push(dt);if(!awaitingDependencies.hasOwnProperty(dt)){awaitingDependencies[dt]=[]}awaitingDependencies[dt].push(()=>{typeConverters[i]=registeredTypes[dt];++registered;if(registered===unregisteredTypes.length){onComplete(typeConverters)}})}});if(0===unregisteredTypes.length){onComplete(typeConverters)}}function __embind_finalize_value_object(structType){var reg=structRegistrations[structType];delete structRegistrations[structType];var rawConstructor=reg.rawConstructor;var rawDestructor=reg.rawDestructor;var fieldRecords=reg.fields;var fieldTypes=fieldRecords.map(field=>field.getterReturnType).concat(fieldRecords.map(field=>field.setterArgumentType));whenDependentTypesAreResolved([structType],fieldTypes,fieldTypes=>{var fields={};fieldRecords.forEach((field,i)=>{var fieldName=field.fieldName;var getterReturnType=fieldTypes[i];var getter=field.getter;var getterContext=field.getterContext;var setterArgumentType=fieldTypes[i+fieldRecords.length];var setter=field.setter;var setterContext=field.setterContext;fields[fieldName]={read:ptr=>{return getterReturnType["fromWireType"](getter(getterContext,ptr))},write:(ptr,o)=>{var destructors=[];setter(setterContext,ptr,setterArgumentType["toWireType"](destructors,o));runDestructors(destructors)}}});return[{name:reg.name,"fromWireType":function(ptr){var rv={};for(var i in fields){rv[i]=fields[i].read(ptr)}rawDestructor(ptr);return rv},"toWireType":function(destructors,o){for(var fieldName in fields){if(!(fieldName in o)){throw new TypeError('Missing field: "'+fieldName+'"')}}var ptr=rawConstructor();for(fieldName in fields){fields[fieldName].write(ptr,o[fieldName])}if(destructors!==null){destructors.push(rawDestructor,ptr)}return ptr},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:rawDestructor}]})}function __embind_register_bigint(primitiveType,name,size,minRange,maxRange){}function getShiftFromSize(size){switch(size){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+size)}}function embind_init_charCodes(){var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i)}embind_charCodes=codes}var embind_charCodes=undefined;function readLatin1String(ptr){var ret="";var c=ptr;while(HEAPU8[c]){ret+=embind_charCodes[HEAPU8[c++]]}return ret}var BindingError=undefined;function throwBindingError(message){throw new BindingError(message)}function registerType(rawType,registeredInstance,options={}){if(!("argPackAdvance"in registeredInstance)){throw new TypeError("registerType registeredInstance requires argPackAdvance")}var name=registeredInstance.name;if(!rawType){throwBindingError('type "'+name+'" must have a positive integer typeid pointer')}if(registeredTypes.hasOwnProperty(rawType)){if(options.ignoreDuplicateRegistrations){return}else{throwBindingError("Cannot register type '"+name+"' twice")}}registeredTypes[rawType]=registeredInstance;delete typeDependencies[rawType];if(awaitingDependencies.hasOwnProperty(rawType)){var callbacks=awaitingDependencies[rawType];delete awaitingDependencies[rawType];callbacks.forEach(cb=>cb())}}function __embind_register_bool(rawType,name,size,trueValue,falseValue){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(wt){return!!wt},"toWireType":function(destructors,o){return o?trueValue:falseValue},"argPackAdvance":8,"readValueFromPointer":function(pointer){var heap;if(size===1){heap=HEAP8}else if(size===2){heap=HEAP16}else if(size===4){heap=HEAP32}else{throw new TypeError("Unknown boolean type size: "+name)}return this["fromWireType"](heap[pointer>>shift])},destructorFunction:null})}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType}}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")}var finalizationRegistry=false;function detachFinalizer(handle){}function runDestructor($$){if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}}function releaseClassHandle($$){$$.count.value-=1;var toDelete=0===$$.count.value;if(toDelete){runDestructor($$)}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)}var registeredPointers={};function getInheritedInstanceCount(){return Object.keys(registeredInstances).length}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k])}}return rv}var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}}var delayFunction=undefined;function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes)}}function init_embind(){Module["getInheritedInstanceCount"]=getInheritedInstanceCount;Module["getLiveInheritedInstances"]=getLiveInheritedInstances;Module["flushPendingDeletes"]=flushPendingDeletes;Module["setDelayFunction"]=setDelayFunction}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return attachFinalizer(Object.create(prototype,{$$:{value:record}}))}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}function attachFinalizer(handle){if("undefined"===typeof FinalizationRegistry){attachFinalizer=handle=>handle;return handle}finalizationRegistry=new FinalizationRegistry(info=>{releaseClassHandle(info.$$)});attachFinalizer=handle=>{var $$=handle.$$;var hasSmartPtr=!!$$.smartPtr;if(hasSmartPtr){var info={$$:$$};finalizationRegistry.register(handle,info,handle)}return handle};detachFinalizer=handle=>finalizationRegistry.unregister(handle);return attachFinalizer(handle)}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=attachFinalizer(Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}}));clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}detachFinalizer(this);releaseClassHandle(this.$$);if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}}function ClassHandle_isDeleted(){return!this.$$.ptr}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}function init_ClassHandle(){ClassHandle.prototype["isAliasOf"]=ClassHandle_isAliasOf;ClassHandle.prototype["clone"]=ClassHandle_clone;ClassHandle.prototype["delete"]=ClassHandle_delete;ClassHandle.prototype["isDeleted"]=ClassHandle_isDeleted;ClassHandle.prototype["deleteLater"]=ClassHandle_deleteLater}function ClassHandle(){}function ensureOverloadTable(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError("Function '"+humanName+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+proto[methodName].overloadTable+")!")}return proto[methodName].overloadTable[arguments.length].apply(this,arguments)};proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError("Cannot register public name '"+name+"' twice")}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError("Cannot register multiple overloads of a function with the same number of arguments ("+numArguments+")!")}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError("Expected null or instance of "+desiredClass.name+", got an instance of "+ptrClass.name)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+embindRepr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle.$$){throwBindingError('Cannot pass "'+embindRepr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,Emval.toHandle(function(){clonedHandle["delete"]()}));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+embindRepr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+handle.$$.ptrType.name+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr)}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle["delete"]()}}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee;RegisteredPointer.prototype.destructor=RegisteredPointer_destructor;RegisteredPointer.prototype["argPackAdvance"]=8;RegisteredPointer.prototype["readValueFromPointer"]=simpleReadValueFromPointer;RegisteredPointer.prototype["deleteObject"]=RegisteredPointer_deleteObject;RegisteredPointer.prototype["fromWireType"]=RegisteredPointer_fromWireType}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&®isteredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function dynCallLegacy(sig,ptr,args){var f=Module["dynCall_"+sig];return args&&args.length?f.apply(null,[ptr].concat(args)):f.call(null,ptr)}var wasmTableMirror=[];function getWasmTableEntry(funcPtr){var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func}function dynCall(sig,ptr,args){if(sig.includes("j")){return dynCallLegacy(sig,ptr,args)}var rtn=getWasmTableEntry(ptr).apply(null,args);return rtn}function getDynCaller(sig,ptr){var argCache=[];return function(){argCache.length=0;Object.assign(argCache,arguments);return dynCall(sig,ptr,argCache)}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(){if(signature.includes("j")){return getDynCaller(signature,rawFunction)}return getWasmTableEntry(rawFunction)}var fp=makeDynCaller();if(typeof fp!="function"){throwBindingError("unknown function pointer with signature "+signature+": "+rawFunction)}return fp}var UnboundTypeError=undefined;function getTypeName(type){var ptr=___getTypeName(type);var rv=readLatin1String(ptr);_free(ptr);return rv}function throwUnboundTypeError(message,types){var unboundTypes=[];var seen={};function visit(type){if(seen[type]){return}if(registeredTypes[type]){return}if(typeDependencies[type]){typeDependencies[type].forEach(visit);return}unboundTypes.push(type);seen[type]=true}types.forEach(visit);throw new UnboundTypeError(message+": "+unboundTypes.map(getTypeName).join([", "]))}function __embind_register_class(rawType,rawPointerType,rawConstPointerType,baseClassRawType,getActualTypeSignature,getActualType,upcastSignature,upcast,downcastSignature,downcast,name,destructorSignature,rawDestructor){name=readLatin1String(name);getActualType=embind__requireFunction(getActualTypeSignature,getActualType);if(upcast){upcast=embind__requireFunction(upcastSignature,upcast)}if(downcast){downcast=embind__requireFunction(downcastSignature,downcast)}rawDestructor=embind__requireFunction(destructorSignature,rawDestructor);var legalFunctionName=makeLegalFunctionName(name);exposePublicSymbol(legalFunctionName,function(){throwUnboundTypeError("Cannot construct "+name+" due to unbound types",[baseClassRawType])});whenDependentTypesAreResolved([rawType,rawPointerType,rawConstPointerType],baseClassRawType?[baseClassRawType]:[],function(base){base=base[0];var baseClass;var basePrototype;if(baseClassRawType){baseClass=base.registeredClass;basePrototype=baseClass.instancePrototype}else{basePrototype=ClassHandle.prototype}var constructor=createNamedFunction(legalFunctionName,function(){if(Object.getPrototypeOf(this)!==instancePrototype){throw new BindingError("Use 'new' to construct "+name)}if(undefined===registeredClass.constructor_body){throw new BindingError(name+" has no accessible constructor")}var body=registeredClass.constructor_body[arguments.length];if(undefined===body){throw new BindingError("Tried to invoke ctor of "+name+" with invalid number of parameters ("+arguments.length+") - expected ("+Object.keys(registeredClass.constructor_body).toString()+") parameters instead!")}return body.apply(this,arguments)});var instancePrototype=Object.create(basePrototype,{constructor:{value:constructor}});constructor.prototype=instancePrototype;var registeredClass=new RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast);var referenceConverter=new RegisteredPointer(name,registeredClass,true,false,false);var pointerConverter=new RegisteredPointer(name+"*",registeredClass,false,false,false);var constPointerConverter=new RegisteredPointer(name+" const*",registeredClass,false,true,false);registeredPointers[rawType]={pointerType:pointerConverter,constPointerType:constPointerConverter};replacePublicSymbol(legalFunctionName,constructor);return[referenceConverter,pointerConverter,constPointerConverter]})}function new_(constructor,argumentList){if(!(constructor instanceof Function)){throw new TypeError("new_ called with constructor type "+typeof constructor+" which is not a function")}var dummy=createNamedFunction(constructor.name||"unknownFunctionName",function(){});dummy.prototype=constructor.prototype;var obj=new dummy;var r=constructor.apply(obj,argumentList);return r instanceof Object?r:obj}function craftInvokerFunction(humanName,argTypes,classType,cppInvokerFunc,cppTargetFunc){var argCount=argTypes.length;if(argCount<2){throwBindingError("argTypes array size mismatch! Must at least get return value and 'this' types!")}var isClassMethodFunc=argTypes[1]!==null&&classType!==null;var needsDestructorStack=false;for(var i=1;i0?", ":"")+argsListWired}invokerFnBody+=(returns?"var rv = ":"")+"invoker(fn"+(argsListWired.length>0?", ":"")+argsListWired+");\n";if(needsDestructorStack){invokerFnBody+="runDestructors(destructors);\n"}else{for(var i=isClassMethodFunc?1:2;i>2])}return array}function __embind_register_class_class_function(rawClassType,methodName,argCount,rawArgTypesAddr,invokerSignature,rawInvoker,fn){var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);methodName=readLatin1String(methodName);rawInvoker=embind__requireFunction(invokerSignature,rawInvoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName=classType.name+"."+methodName;function unboundTypesHandler(){throwUnboundTypeError("Cannot call "+humanName+" due to unbound types",rawArgTypes)}if(methodName.startsWith("@@")){methodName=Symbol[methodName.substring(2)]}var proto=classType.registeredClass.constructor;if(undefined===proto[methodName]){unboundTypesHandler.argCount=argCount-1;proto[methodName]=unboundTypesHandler}else{ensureOverloadTable(proto,methodName,humanName);proto[methodName].overloadTable[argCount-1]=unboundTypesHandler}whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));var func=craftInvokerFunction(humanName,invokerArgsArray,null,rawInvoker,fn);if(undefined===proto[methodName].overloadTable){func.argCount=argCount-1;proto[methodName]=func}else{proto[methodName].overloadTable[argCount-1]=func}return[]});return[]})}function __embind_register_class_constructor(rawClassType,argCount,rawArgTypesAddr,invokerSignature,invoker,rawConstructor){assert(argCount>0);var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);invoker=embind__requireFunction(invokerSignature,invoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName="constructor "+classType.name;if(undefined===classType.registeredClass.constructor_body){classType.registeredClass.constructor_body=[]}if(undefined!==classType.registeredClass.constructor_body[argCount-1]){throw new BindingError("Cannot register multiple constructors with identical number of parameters ("+(argCount-1)+") for class '"+classType.name+"'! Overload resolution is currently only performed using the parameter count, not actual type info!")}classType.registeredClass.constructor_body[argCount-1]=()=>{throwUnboundTypeError("Cannot construct "+classType.name+" due to unbound types",rawArgTypes)};whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){argTypes.splice(1,0,null);classType.registeredClass.constructor_body[argCount-1]=craftInvokerFunction(humanName,argTypes,null,invoker,rawConstructor);return[]});return[]})}function __embind_register_class_function(rawClassType,methodName,argCount,rawArgTypesAddr,invokerSignature,rawInvoker,context,isPureVirtual){var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);methodName=readLatin1String(methodName);rawInvoker=embind__requireFunction(invokerSignature,rawInvoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName=classType.name+"."+methodName;if(methodName.startsWith("@@")){methodName=Symbol[methodName.substring(2)]}if(isPureVirtual){classType.registeredClass.pureVirtualFunctions.push(methodName)}function unboundTypesHandler(){throwUnboundTypeError("Cannot call "+humanName+" due to unbound types",rawArgTypes)}var proto=classType.registeredClass.instancePrototype;var method=proto[methodName];if(undefined===method||undefined===method.overloadTable&&method.className!==classType.name&&method.argCount===argCount-2){unboundTypesHandler.argCount=argCount-2;unboundTypesHandler.className=classType.name;proto[methodName]=unboundTypesHandler}else{ensureOverloadTable(proto,methodName,humanName);proto[methodName].overloadTable[argCount-2]=unboundTypesHandler}whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){var memberFunction=craftInvokerFunction(humanName,argTypes,classType,rawInvoker,context);if(undefined===proto[methodName].overloadTable){memberFunction.argCount=argCount-2;proto[methodName]=memberFunction}else{proto[methodName].overloadTable[argCount-2]=memberFunction}return[]});return[]})}function validateThis(this_,classType,humanName){if(!(this_ instanceof Object)){throwBindingError(humanName+' with invalid "this": '+this_)}if(!(this_ instanceof classType.registeredClass.constructor)){throwBindingError(humanName+' incompatible with "this" of type '+this_.constructor.name)}if(!this_.$$.ptr){throwBindingError("cannot call emscripten binding method "+humanName+" on deleted object")}return upcastPointer(this_.$$.ptr,this_.$$.ptrType.registeredClass,classType.registeredClass)}function __embind_register_class_property(classType,fieldName,getterReturnType,getterSignature,getter,getterContext,setterArgumentType,setterSignature,setter,setterContext){fieldName=readLatin1String(fieldName);getter=embind__requireFunction(getterSignature,getter);whenDependentTypesAreResolved([],[classType],function(classType){classType=classType[0];var humanName=classType.name+"."+fieldName;var desc={get:function(){throwUnboundTypeError("Cannot access "+humanName+" due to unbound types",[getterReturnType,setterArgumentType])},enumerable:true,configurable:true};if(setter){desc.set=()=>{throwUnboundTypeError("Cannot access "+humanName+" due to unbound types",[getterReturnType,setterArgumentType])}}else{desc.set=v=>{throwBindingError(humanName+" is a read-only property")}}Object.defineProperty(classType.registeredClass.instancePrototype,fieldName,desc);whenDependentTypesAreResolved([],setter?[getterReturnType,setterArgumentType]:[getterReturnType],function(types){var getterReturnType=types[0];var desc={get:function(){var ptr=validateThis(this,classType,humanName+" getter");return getterReturnType["fromWireType"](getter(getterContext,ptr))},enumerable:true};if(setter){setter=embind__requireFunction(setterSignature,setter);var setterArgumentType=types[1];desc.set=function(v){var ptr=validateThis(this,classType,humanName+" setter");var destructors=[];setter(setterContext,ptr,setterArgumentType["toWireType"](destructors,v));runDestructors(destructors)}}Object.defineProperty(classType.registeredClass.instancePrototype,fieldName,desc);return[]});return[]})}var emval_free_list=[];var emval_handle_array=[{},{value:undefined},{value:null},{value:true},{value:false}];function __emval_decref(handle){if(handle>4&&0===--emval_handle_array[handle].refcount){emval_handle_array[handle]=undefined;emval_free_list.push(handle)}}function count_emval_handles(){var count=0;for(var i=5;i{if(!handle){throwBindingError("Cannot use deleted val. handle = "+handle)}return emval_handle_array[handle].value},toHandle:value=>{switch(value){case undefined:return 1;case null:return 2;case true:return 3;case false:return 4;default:{var handle=emval_free_list.length?emval_free_list.pop():emval_handle_array.length;emval_handle_array[handle]={refcount:1,value:value};return handle}}}};function __embind_register_emval(rawType,name){name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(handle){var rv=Emval.toValue(handle);__emval_decref(handle);return rv},"toWireType":function(destructors,value){return Emval.toHandle(value)},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:null})}function embindRepr(v){if(v===null){return"null"}var t=typeof v;if(t==="object"||t==="array"||t==="function"){return v.toString()}else{return""+v}}function floatReadValueFromPointer(name,shift){switch(shift){case 2:return function(pointer){return this["fromWireType"](HEAPF32[pointer>>2])};case 3:return function(pointer){return this["fromWireType"](HEAPF64[pointer>>3])};default:throw new TypeError("Unknown float type: "+name)}}function __embind_register_float(rawType,name,size){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(value){return value},"toWireType":function(destructors,value){return value},"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer]}:function readU8FromPointer(pointer){return HEAPU8[pointer]};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=value=>value;if(minRange===0){var bitshift=32-8*size;fromWireType=value=>value<>>bitshift}var isUnsignedType=name.includes("unsigned");var checkAssertions=(value,toTypeName)=>{};var toWireType;if(isUnsignedType){toWireType=function(destructors,value){checkAssertions(value,this.name);return value>>>0}}else{toWireType=function(destructors,value){checkAssertions(value,this.name);return value}}registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":toWireType,"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(buffer,data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);var stdStringIsUTF8=name==="std::string";registerType(rawType,{name:name,"fromWireType":function(value){var length=HEAPU32[value>>2];var payload=value+4;var str;if(stdStringIsUTF8){var decodeStartPtr=payload;for(var i=0;i<=length;++i){var currentBytePtr=payload+i;if(i==length||HEAPU8[currentBytePtr]==0){var maxRead=currentBytePtr-decodeStartPtr;var stringSegment=UTF8ToString(decodeStartPtr,maxRead);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+1}}}else{var a=new Array(length);for(var i=0;i>2]=length;if(stdStringIsUTF8&&valueIsOfTypeString){stringToUTF8(value,ptr,length+1)}else{if(valueIsOfTypeString){for(var i=0;i255){_free(ptr);throwBindingError("String has UTF-16 code units that do not fit in 8 bits")}HEAPU8[ptr+i]=charCode}}else{for(var i=0;i>1;var maxIdx=idx+maxBytesToRead/2;while(!(idx>=maxIdx)&&HEAPU16[idx])++idx;endPtr=idx<<1;if(endPtr-ptr>32&&UTF16Decoder){return UTF16Decoder.decode(HEAPU8.subarray(ptr,endPtr))}else{var str="";for(var i=0;!(i>=maxBytesToRead/2);++i){var codeUnit=HEAP16[ptr+i*2>>1];if(codeUnit==0)break;str+=String.fromCharCode(codeUnit)}return str}}function stringToUTF16(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr}function lengthBytesUTF16(str){return str.length*2}function UTF32ToString(ptr,maxBytesToRead){var i=0;var str="";while(!(i>=maxBytesToRead/4)){var utf32=HEAP32[ptr+i*4>>2];if(utf32==0)break;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}return str}function stringToUTF32(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr}function lengthBytesUTF32(str){var len=0;for(var i=0;i=55296&&codeUnit<=57343)++i;len+=4}return len}function __embind_register_std_wstring(rawType,charSize,name){name=readLatin1String(name);var decodeString,encodeString,getHeap,lengthBytesUTF,shift;if(charSize===2){decodeString=UTF16ToString;encodeString=stringToUTF16;lengthBytesUTF=lengthBytesUTF16;getHeap=()=>HEAPU16;shift=1}else if(charSize===4){decodeString=UTF32ToString;encodeString=stringToUTF32;lengthBytesUTF=lengthBytesUTF32;getHeap=()=>HEAPU32;shift=2}registerType(rawType,{name:name,"fromWireType":function(value){var length=HEAPU32[value>>2];var HEAP=getHeap();var str;var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i*charSize;if(i==length||HEAP[currentBytePtr>>shift]==0){var maxReadBytes=currentBytePtr-decodeStartPtr;var stringSegment=decodeString(decodeStartPtr,maxReadBytes);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+charSize}}_free(value);return str},"toWireType":function(destructors,value){if(!(typeof value=="string")){throwBindingError("Cannot pass non-string to C++ string type "+name)}var length=lengthBytesUTF(value);var ptr=_malloc(4+length+charSize);HEAPU32[ptr>>2]=length>>shift;encodeString(value,ptr+4,length+charSize);if(destructors!==null){destructors.push(_free,ptr)}return ptr},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:function(ptr){_free(ptr)}})}function __embind_register_value_object(rawType,name,constructorSignature,rawConstructor,destructorSignature,rawDestructor){structRegistrations[rawType]={name:readLatin1String(name),rawConstructor:embind__requireFunction(constructorSignature,rawConstructor),rawDestructor:embind__requireFunction(destructorSignature,rawDestructor),fields:[]}}function __embind_register_value_object_field(structType,fieldName,getterReturnType,getterSignature,getter,getterContext,setterArgumentType,setterSignature,setter,setterContext){structRegistrations[structType].fields.push({fieldName:readLatin1String(fieldName),getterReturnType:getterReturnType,getter:embind__requireFunction(getterSignature,getter),getterContext:getterContext,setterArgumentType:setterArgumentType,setter:embind__requireFunction(setterSignature,setter),setterContext:setterContext})}function __embind_register_void(rawType,name){name=readLatin1String(name);registerType(rawType,{isVoid:true,name:name,"argPackAdvance":0,"fromWireType":function(){return undefined},"toWireType":function(destructors,o){return undefined}})}function requireRegisteredType(rawType,humanName){var impl=registeredTypes[rawType];if(undefined===impl){throwBindingError(humanName+" has unknown type "+getTypeName(rawType))}return impl}function __emval_as(handle,returnType,destructorsRef){handle=Emval.toValue(handle);returnType=requireRegisteredType(returnType,"emval::as");var destructors=[];var rd=Emval.toHandle(destructors);HEAPU32[destructorsRef>>2]=rd;return returnType["toWireType"](destructors,handle)}var emval_symbols={};function getStringOrSymbol(address){var symbol=emval_symbols[address];if(symbol===undefined){return readLatin1String(address)}return symbol}var emval_methodCallers=[];function __emval_call_void_method(caller,handle,methodName,args){caller=emval_methodCallers[caller];handle=Emval.toValue(handle);methodName=getStringOrSymbol(methodName);caller(handle,methodName,null,args)}function emval_addMethodCaller(caller){var id=emval_methodCallers.length;emval_methodCallers.push(caller);return id}function emval_lookupTypes(argCount,argTypes){var a=new Array(argCount);for(var i=0;i>2],"parameter "+i)}return a}var emval_registeredMethods=[];function __emval_get_method_caller(argCount,argTypes){var types=emval_lookupTypes(argCount,argTypes);var retType=types[0];var signatureName=retType.name+"_$"+types.slice(1).map(function(t){return t.name}).join("_")+"$";var returnId=emval_registeredMethods[signatureName];if(returnId!==undefined){return returnId}var params=["retType"];var args=[retType];var argsList="";for(var i=0;i4){emval_handle_array[handle].refcount+=1}}function __emval_new_array(){return Emval.toHandle([])}function __emval_new_cstring(v){return Emval.toHandle(getStringOrSymbol(v))}function __emval_run_destructors(handle){var destructors=Emval.toValue(handle);runDestructors(destructors);__emval_decref(handle)}function __emval_set_property(handle,key,value){handle=Emval.toValue(handle);key=Emval.toValue(key);value=Emval.toValue(value);handle[key]=value}function __emval_take_value(type,arg){type=requireRegisteredType(type,"_emval_take_value");var v=type["readValueFromPointer"](arg);return Emval.toHandle(v)}function _abort(){abort("")}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function getHeapMax(){return 2147483648}function emscripten_realloc_buffer(size){try{wasmMemory.grow(size-buffer.byteLength+65535>>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}let alignUp=(x,multiple)=>x+(multiple-x%multiple)%multiple;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}var WebGPU={initManagers:function(){if(WebGPU.mgrDevice)return;function Manager(){this.objects={};this.nextId=1;this.create=function(object,wrapper){wrapper=wrapper||{};var id=this.nextId++;wrapper.refcount=1;wrapper.object=object;this.objects[id]=wrapper;return id};this.get=function(id){if(!id)return undefined;var o=this.objects[id];return o.object};this.reference=function(id){var o=this.objects[id];o.refcount++};this.release=function(id){var o=this.objects[id];o.refcount--;if(o.refcount<=0){delete this.objects[id]}}}WebGPU.mgrSurface=WebGPU.mgrSurface||new Manager;WebGPU.mgrSwapChain=WebGPU.mgrSwapChain||new Manager;WebGPU.mgrAdapter=WebGPU.mgrAdapter||new Manager;WebGPU.mgrDevice=WebGPU.mgrDevice||new Manager;WebGPU.mgrQueue=WebGPU.mgrQueue||new Manager;WebGPU.mgrCommandBuffer=WebGPU.mgrCommandBuffer||new Manager;WebGPU.mgrCommandEncoder=WebGPU.mgrCommandEncoder||new Manager;WebGPU.mgrRenderPassEncoder=WebGPU.mgrRenderPassEncoder||new Manager;WebGPU.mgrComputePassEncoder=WebGPU.mgrComputePassEncoder||new Manager;WebGPU.mgrBindGroup=WebGPU.mgrBindGroup||new Manager;WebGPU.mgrBuffer=WebGPU.mgrBuffer||new Manager;WebGPU.mgrSampler=WebGPU.mgrSampler||new Manager;WebGPU.mgrTexture=WebGPU.mgrTexture||new Manager;WebGPU.mgrTextureView=WebGPU.mgrTextureView||new Manager;WebGPU.mgrQuerySet=WebGPU.mgrQuerySet||new Manager;WebGPU.mgrBindGroupLayout=WebGPU.mgrBindGroupLayout||new Manager;WebGPU.mgrPipelineLayout=WebGPU.mgrPipelineLayout||new Manager;WebGPU.mgrRenderPipeline=WebGPU.mgrRenderPipeline||new Manager;WebGPU.mgrComputePipeline=WebGPU.mgrComputePipeline||new Manager;WebGPU.mgrShaderModule=WebGPU.mgrShaderModule||new Manager;WebGPU.mgrRenderBundleEncoder=WebGPU.mgrRenderBundleEncoder||new Manager;WebGPU.mgrRenderBundle=WebGPU.mgrRenderBundle||new Manager},makeColor:function(ptr){return{"r":HEAPF64[ptr>>3],"g":HEAPF64[ptr+8>>3],"b":HEAPF64[ptr+16>>3],"a":HEAPF64[ptr+24>>3]}},makeExtent3D:function(ptr){return{"width":HEAPU32[ptr>>2],"height":HEAPU32[ptr+4>>2],"depthOrArrayLayers":HEAPU32[ptr+8>>2]}},makeOrigin3D:function(ptr){return{"x":HEAPU32[ptr>>2],"y":HEAPU32[ptr+4>>2],"z":HEAPU32[ptr+8>>2]}},makeImageCopyTexture:function(ptr){return{"texture":WebGPU.mgrTexture.get(HEAPU32[ptr+4>>2]),"mipLevel":HEAPU32[ptr+8>>2],"origin":WebGPU.makeOrigin3D(ptr+12),"aspect":WebGPU.TextureAspect[HEAPU32[ptr+24>>2]]}},makeTextureDataLayout:function(ptr){var bytesPerRow=HEAPU32[ptr+16>>2];var rowsPerImage=HEAPU32[ptr+20>>2];return{"offset":HEAPU32[ptr+4+8>>2]*4294967296+HEAPU32[ptr+8>>2],"bytesPerRow":bytesPerRow===4294967295?undefined:bytesPerRow,"rowsPerImage":rowsPerImage===4294967295?undefined:rowsPerImage}},makeImageCopyBuffer:function(ptr){var layoutPtr=ptr+8;var bufferCopyView=WebGPU.makeTextureDataLayout(layoutPtr);bufferCopyView["buffer"]=WebGPU.mgrBuffer.get(HEAPU32[ptr+32>>2]);return bufferCopyView},makePipelineConstants:function(constantCount,constantsPtr){if(!constantCount)return;var constants={};for(var i=0;i>2]);constants[key]=HEAPF64[entryPtr+8>>3]}return constants},makeProgrammableStageDescriptor:function(ptr){if(!ptr)return undefined;return{"module":WebGPU.mgrShaderModule.get(HEAPU32[ptr+4>>2]),"entryPoint":UTF8ToString(HEAPU32[ptr+8>>2]),"constants":WebGPU.makePipelineConstants(HEAPU32[ptr+12>>2],HEAPU32[ptr+16>>2])}},DeviceLostReason:{undefined:0,destroyed:1},PreferredFormat:{rgba8unorm:18,bgra8unorm:23},AddressMode:["repeat","mirror-repeat","clamp-to-edge"],BlendFactor:["zero","one","src","one-minus-src","src-alpha","one-minus-src-alpha","dst","one-minus-dst","dst-alpha","one-minus-dst-alpha","src-alpha-saturated","constant","one-minus-constant"],BlendOperation:["add","subtract","reverse-subtract","min","max"],BufferBindingType:[,"uniform","storage","read-only-storage"],CompareFunction:[,"never","less","less-equal","greater","greater-equal","equal","not-equal","always"],CompilationInfoRequestStatus:["success","error","device-lost","unknown"],ComputePassTimestampLocation:["beginning","end"],CullMode:["none","front","back"],ErrorFilter:["validation","out-of-memory"],FeatureName:{0:undefined,1:"depth-clip-control",2:"depth24unorm-stencil8",3:"depth32float-stencil8",4:"timestamp-query",5:"pipeline-statistics-query",6:"texture-compression-bc",7:"texture-compression-etc2",8:"texture-compression-astc",9:"indirect-first-instance",1e3:"depth-clamping"},FilterMode:["nearest","linear"],FrontFace:["ccw","cw"],IndexFormat:[,"uint16","uint32"],LoadOp:[,"clear","load"],PipelineStatisticName:["vertex-shader-invocations","clipper-invocations","clipper-primitives-out","fragment-shader-invocations","compute-shader-invocations"],PowerPreference:[,"low-power","high-performance"],PredefinedColorSpace:[,"srgb"],PrimitiveTopology:["point-list","line-list","line-strip","triangle-list","triangle-strip"],QueryType:["occlusion","pipeline-statistics","timestamp"],RenderPassTimestampLocation:["beginning","end"],SamplerBindingType:[,"filtering","non-filtering","comparison"],StencilOperation:["keep","zero","replace","invert","increment-clamp","decrement-clamp","increment-wrap","decrement-wrap"],StorageTextureAccess:[,"write-only"],StoreOp:[,"store","discard"],TextureAspect:["all","stencil-only","depth-only"],TextureComponentType:["float","sint","uint","depth-comparison"],TextureDimension:["1d","2d","3d"],TextureFormat:[,"r8unorm","r8snorm","r8uint","r8sint","r16uint","r16sint","r16float","rg8unorm","rg8snorm","rg8uint","rg8sint","r32float","r32uint","r32sint","rg16uint","rg16sint","rg16float","rgba8unorm","rgba8unorm-srgb","rgba8snorm","rgba8uint","rgba8sint","bgra8unorm","bgra8unorm-srgb","rgb10a2unorm","rg11b10ufloat","rgb9e5ufloat","rg32float","rg32uint","rg32sint","rgba16uint","rgba16sint","rgba16float","rgba32float","rgba32uint","rgba32sint","stencil8","depth16unorm","depth24plus","depth24plus-stencil8","depth24unorm-stencil8","depth32float","depth32float-stencil8","bc1-rgba-unorm","bc1-rgba-unorm-srgb","bc2-rgba-unorm","bc2-rgba-unorm-srgb","bc3-rgba-unorm","bc3-rgba-unorm-srgb","bc4-r-unorm","bc4-r-snorm","bc5-rg-unorm","bc5-rg-snorm","bc6h-rgb-ufloat","bc6h-rgb-float","bc7-rgba-unorm","bc7-rgba-unorm-srgb","etc2-rgb8unorm","etc2-rgb8unorm-srgb","etc2-rgb8a1unorm","etc2-rgb8a1unorm-srgb","etc2-rgba8unorm","etc2-rgba8unorm-srgb","eac-r11unorm","eac-r11snorm","eac-rg11unorm","eac-rg11snorm","astc-4x4-unorm","astc-4x4-unorm-srgb","astc-5x4-unorm","astc-5x4-unorm-srgb","astc-5x5-unorm","astc-5x5-unorm-srgb","astc-6x5-unorm","astc-6x5-unorm-srgb","astc-6x6-unorm","astc-6x6-unorm-srgb","astc-8x5-unorm","astc-8x5-unorm-srgb","astc-8x6-unorm","astc-8x6-unorm-srgb","astc-8x8-unorm","astc-8x8-unorm-srgb","astc-10x5-unorm","astc-10x5-unorm-srgb","astc-10x6-unorm","astc-10x6-unorm-srgb","astc-10x8-unorm","astc-10x8-unorm-srgb","astc-10x10-unorm","astc-10x10-unorm-srgb","astc-12x10-unorm","astc-12x10-unorm-srgb","astc-12x12-unorm","astc-12x12-unorm-srgb"],TextureSampleType:[,"float","unfilterable-float","depth","sint","uint"],TextureViewDimension:[,"1d","2d","2d-array","cube","cube-array","3d"],VertexFormat:[,"uint8x2","uint8x4","sint8x2","sint8x4","unorm8x2","unorm8x4","snorm8x2","snorm8x4","uint16x2","uint16x4","sint16x2","sint16x4","unorm16x2","unorm16x4","snorm16x2","snorm16x4","float16x2","float16x4","float32","float32x2","float32x3","float32x4","uint32","uint32x2","uint32x3","uint32x4","sint32","sint32x2","sint32x3","sint32x4"],VertexStepMode:["vertex","instance"],FeatureNameString2Enum:{undefined:"0","depth-clip-control":"1","depth24unorm-stencil8":"2","depth32float-stencil8":"3","timestamp-query":"4","pipeline-statistics-query":"5","texture-compression-bc":"6","texture-compression-etc2":"7","texture-compression-astc":"8","indirect-first-instance":"9","depth-clamping":"1000"}};function _emscripten_webgpu_get_device(){var device=Module["preinitializedWebGPUDevice"];var deviceWrapper={queueId:WebGPU.mgrQueue.create(device["queue"])};return WebGPU.mgrDevice.create(device,deviceWrapper)}var ENV={};function getExecutableName(){return thisProgram||"./this.program"}function getEnvStrings(){if(!getEnvStrings.strings){var lang=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={"USER":"web_user","LOGNAME":"web_user","PATH":"/","PWD":"/","HOME":"/home/web_user","LANG":lang,"_":getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(x+"="+env[x])}getEnvStrings.strings=strings}return getEnvStrings.strings}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}var SYSCALLS={varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret}};function _environ_get(__environ,environ_buf){var bufSize=0;getEnvStrings().forEach(function(string,i){var ptr=environ_buf+bufSize;HEAPU32[__environ+i*4>>2]=ptr;writeAsciiToMemory(string,ptr);bufSize+=string.length+1});return 0}function _environ_sizes_get(penviron_count,penviron_buf_size){var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});HEAPU32[penviron_buf_size>>2]=bufSize;return 0}var printCharBuffers=[null,[],[]];function printChar(stream,curr){var buffer=printCharBuffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}}function _fd_write(fd,iov,iovcnt,pnum){var num=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;for(var j=0;j>2]=num;return 0}function _setTempRet0(val){setTempRet0(val)}function _wgpuAdapterGetProperties(adapterId,properties){HEAP32[properties+4>>2]=0;HEAP32[properties+8>>2]=0;HEAP32[properties+12>>2]=0;HEAP32[properties+16>>2]=0;HEAP32[properties+20>>2]=3;HEAP32[properties+24>>2]=1}function _wgpuAdapterHasFeature(adapterId,featureEnumValue){var adapter=WebGPU.mgrAdapter.get(adapterId);return adapter.features.has(WebGPU.FeatureName[featureEnumValue])}function _wgpuAdapterRelease(id){WebGPU.mgrAdapter.release(id)}function _wgpuBindGroupRelease(id){WebGPU.mgrBindGroup.release(id)}function _wgpuBufferDestroy(bufferId){WebGPU.mgrBuffer.get(bufferId)["destroy"]()}function _wgpuBufferGetMappedRange(bufferId,offset,size){var bufferWrapper=WebGPU.mgrBuffer.objects[bufferId];if(size===0)warnOnce("getMappedRange size=0 no longer means WGPU_WHOLE_MAP_SIZE");size=size>>>0;if(size===4294967295)size=undefined;if(bufferWrapper.mapMode!==2){return 0}var mapped;try{mapped=bufferWrapper.object["getMappedRange"](offset,size)}catch(ex){return 0}var data=_malloc(mapped.byteLength);HEAPU8.fill(0,data,mapped.byteLength);bufferWrapper.onUnmap.push(function(){new Uint8Array(mapped).set(HEAPU8.subarray(data,data+mapped.byteLength));_free(data)});return data}function _wgpuBufferRelease(id){WebGPU.mgrBuffer.release(id)}function _wgpuBufferUnmap(bufferId){var bufferWrapper=WebGPU.mgrBuffer.objects[bufferId];if(!bufferWrapper.onUnmap){return}for(var i=0;i>2]),"queryIndex":HEAPU32[twPtr+4>>2],"location":WebGPU.ComputePassTimestampLocation[HEAPU32[twPtr+8>>2]]}}function makeComputePassTimestampWrites(count,twPtr){var timestampWrites=[];for(var i=0;i>2];if(labelPtr)desc["label"]=UTF8ToString(labelPtr);var timestampWriteCount=HEAPU32[descriptor+8>>2];if(timestampWriteCount){desc["timestampWrites"]=makeComputePassTimestampWrites(timestampWriteCount,HEAPU32[descriptor+12>>2])}}var commandEncoder=WebGPU.mgrCommandEncoder.get(encoderId);return WebGPU.mgrComputePassEncoder.create(commandEncoder["beginComputePass"](desc))}function _wgpuCommandEncoderBeginRenderPass(encoderId,descriptor){function makeColorAttachment(caPtr){var viewPtr=HEAPU32[caPtr>>2];if(viewPtr===0){return undefined}var loadOpInt=HEAPU32[caPtr+8>>2];var storeOpInt=HEAPU32[caPtr+12>>2];var clearValue=WebGPU.makeColor(caPtr+16);return{"view":WebGPU.mgrTextureView.get(viewPtr),"resolveTarget":WebGPU.mgrTextureView.get(HEAPU32[caPtr+4>>2]),"clearValue":clearValue,"loadOp":WebGPU.LoadOp[loadOpInt],"storeOp":WebGPU.StoreOp[storeOpInt]}}function makeColorAttachments(count,caPtr){var attachments=[];for(var i=0;i>2]),"depthClearValue":HEAPF32[dsaPtr+12>>2],"depthLoadOp":WebGPU.LoadOp[HEAPU32[dsaPtr+4>>2]],"depthStoreOp":WebGPU.StoreOp[HEAPU32[dsaPtr+8>>2]],"depthReadOnly":HEAP8[dsaPtr+16>>0]!==0,"stencilClearValue":HEAPU32[dsaPtr+28>>2],"stencilLoadOp":WebGPU.LoadOp[HEAPU32[dsaPtr+20>>2]],"stencilStoreOp":WebGPU.StoreOp[HEAPU32[dsaPtr+24>>2]],"stencilReadOnly":HEAP8[dsaPtr+32>>0]!==0}}function makeRenderPassTimestampWrite(twPtr){return{"querySet":WebGPU.mgrQuerySet.get(HEAPU32[twPtr>>2]),"queryIndex":HEAPU32[twPtr+4>>2],"location":WebGPU.RenderPassTimestampLocation[HEAPU32[twPtr+8>>2]]}}function makeRenderPassTimestampWrites(count,twPtr){var timestampWrites=[];for(var i=0;i>2],HEAPU32[descriptor+12>>2]),"depthStencilAttachment":makeDepthStencilAttachment(HEAPU32[descriptor+16>>2]),"occlusionQuerySet":WebGPU.mgrQuerySet.get(HEAPU32[descriptor+20>>2])};var labelPtr=HEAPU32[descriptor+4>>2];if(labelPtr)desc["label"]=UTF8ToString(labelPtr);var timestampWriteCount=HEAPU32[descriptor+24>>2];if(timestampWriteCount){desc["timestampWrites"]=makeRenderPassTimestampWrites(timestampWriteCount,HEAPU32[descriptor+28>>2])}return desc}var desc=makeRenderPassDescriptor(descriptor);var commandEncoder=WebGPU.mgrCommandEncoder.get(encoderId);return WebGPU.mgrRenderPassEncoder.create(commandEncoder["beginRenderPass"](desc))}function _wgpuCommandEncoderCopyBufferToBuffer(encoderId,srcId,srcOffset_low,srcOffset_high,dstId,dstOffset_low,dstOffset_high,size_low,size_high){var commandEncoder=WebGPU.mgrCommandEncoder.get(encoderId);var src=WebGPU.mgrBuffer.get(srcId);var dst=WebGPU.mgrBuffer.get(dstId);commandEncoder["copyBufferToBuffer"](src,srcOffset_high*4294967296+srcOffset_low,dst,dstOffset_high*4294967296+dstOffset_low,size_high*4294967296+size_low)}function _wgpuCommandEncoderCopyBufferToTexture(encoderId,srcPtr,dstPtr,copySizePtr){var commandEncoder=WebGPU.mgrCommandEncoder.get(encoderId);var copySize=WebGPU.makeExtent3D(copySizePtr);commandEncoder["copyBufferToTexture"](WebGPU.makeImageCopyBuffer(srcPtr),WebGPU.makeImageCopyTexture(dstPtr),copySize)}function _wgpuCommandEncoderCopyTextureToTexture(encoderId,srcPtr,dstPtr,copySizePtr){var commandEncoder=WebGPU.mgrCommandEncoder.get(encoderId);var copySize=WebGPU.makeExtent3D(copySizePtr);commandEncoder["copyTextureToTexture"](WebGPU.makeImageCopyTexture(srcPtr),WebGPU.makeImageCopyTexture(dstPtr),copySize)}function _wgpuCommandEncoderFinish(encoderId){var commandEncoder=WebGPU.mgrCommandEncoder.get(encoderId);return WebGPU.mgrCommandBuffer.create(commandEncoder["finish"]())}function _wgpuCommandEncoderRelease(id){WebGPU.mgrCommandEncoder.release(id)}function _wgpuComputePassEncoderDispatchWorkgroups(passId,x,y,z){var pass=WebGPU.mgrComputePassEncoder.get(passId);if(pass["dispatchWorkgroups"]){pass["dispatchWorkgroups"](x,y,z)}else{pass["dispatch"](x,y,z)}}function _wgpuComputePassEncoderDispatchWorkgroupsIndirect(passId,indirectBufferId,indirectOffset_low,indirectOffset_high){var indirectBuffer=WebGPU.mgrBuffer.get(indirectBufferId);var indirectOffset=indirectOffset_high*4294967296+indirectOffset_low;var pass=WebGPU.mgrComputePassEncoder.get(passId);if(pass["dispatchWorkgroupsIndirect"]){pass["dispatchWorkgroupsIndirect"](indirectBuffer,indirectOffset)}else{pass["dispatchIndirect"](indirectBuffer,indirectOffset)}}function _wgpuComputePassEncoderEnd(passId){var pass=WebGPU.mgrComputePassEncoder.get(passId);pass["end"]()}function _wgpuComputePassEncoderRelease(id){WebGPU.mgrComputePassEncoder.release(id)}function _wgpuComputePassEncoderSetBindGroup(passId,groupIndex,groupId,dynamicOffsetCount,dynamicOffsetsPtr){var pass=WebGPU.mgrComputePassEncoder.get(passId);var group=WebGPU.mgrBindGroup.get(groupId);if(dynamicOffsetCount==0){pass["setBindGroup"](groupIndex,group)}else{var offsets=[];for(var i=0;i>2])}pass["setBindGroup"](groupIndex,group,offsets)}}function _wgpuComputePassEncoderSetPipeline(passId,pipelineId){var pass=WebGPU.mgrComputePassEncoder.get(passId);var pipeline=WebGPU.mgrComputePipeline.get(pipelineId);pass["setPipeline"](pipeline)}function _wgpuComputePipelineRelease(id){WebGPU.mgrComputePipeline.release(id)}function _wgpuDeviceCreateBindGroup(deviceId,descriptor){function makeEntry(entryPtr){var bufferId=HEAPU32[entryPtr+8>>2];var samplerId=HEAPU32[entryPtr+32>>2];var textureViewId=HEAPU32[entryPtr+36>>2];var binding=HEAPU32[entryPtr+4>>2];if(bufferId){var size_low=HEAPU32[entryPtr+24>>2];var size_high=HEAPU32[entryPtr+28>>2];var size=size_high===-1&&size_low===-1?undefined:size_high*4294967296+size_low;return{"binding":binding,"resource":{"buffer":WebGPU.mgrBuffer.get(bufferId),"offset":HEAPU32[entryPtr+4+16>>2]*4294967296+HEAPU32[entryPtr+16>>2],"size":size}}}else if(samplerId){return{"binding":binding,"resource":WebGPU.mgrSampler.get(samplerId)}}else{return{"binding":binding,"resource":WebGPU.mgrTextureView.get(textureViewId)}}}function makeEntries(count,entriesPtrs){var entries=[];for(var i=0;i>2]),"entries":makeEntries(HEAPU32[descriptor+12>>2],HEAPU32[descriptor+16>>2])};var labelPtr=HEAPU32[descriptor+4>>2];if(labelPtr)desc["label"]=UTF8ToString(labelPtr);var device=WebGPU.mgrDevice.get(deviceId);return WebGPU.mgrBindGroup.create(device["createBindGroup"](desc))}function _wgpuDeviceCreateBindGroupLayout(deviceId,descriptor){function makeBufferEntry(entryPtr){var typeInt=HEAPU32[entryPtr+4>>2];if(!typeInt)return undefined;return{"type":WebGPU.BufferBindingType[typeInt],"hasDynamicOffset":HEAP8[entryPtr+8>>0]!==0,"minBindingSize":HEAPU32[entryPtr+4+16>>2]*4294967296+HEAPU32[entryPtr+16>>2]}}function makeSamplerEntry(entryPtr){var typeInt=HEAPU32[entryPtr+4>>2];if(!typeInt)return undefined;return{"type":WebGPU.SamplerBindingType[typeInt]}}function makeTextureEntry(entryPtr){var sampleTypeInt=HEAPU32[entryPtr+4>>2];if(!sampleTypeInt)return undefined;return{"sampleType":WebGPU.TextureSampleType[sampleTypeInt],"viewDimension":WebGPU.TextureViewDimension[HEAPU32[entryPtr+8>>2]],"multisampled":HEAP8[entryPtr+12>>0]!==0}}function makeStorageTextureEntry(entryPtr){var accessInt=HEAPU32[entryPtr+4>>2];if(!accessInt)return undefined;return{"access":WebGPU.StorageTextureAccess[accessInt],"format":WebGPU.TextureFormat[HEAPU32[entryPtr+8>>2]],"viewDimension":WebGPU.TextureViewDimension[HEAPU32[entryPtr+12>>2]]}}function makeEntry(entryPtr){return{"binding":HEAPU32[entryPtr+4>>2],"visibility":HEAPU32[entryPtr+8>>2],"buffer":makeBufferEntry(entryPtr+16),"sampler":makeSamplerEntry(entryPtr+40),"texture":makeTextureEntry(entryPtr+48),"storageTexture":makeStorageTextureEntry(entryPtr+64)}}function makeEntries(count,entriesPtrs){var entries=[];for(var i=0;i>2],HEAPU32[descriptor+12>>2])};var labelPtr=HEAPU32[descriptor+4>>2];if(labelPtr)desc["label"]=UTF8ToString(labelPtr);var device=WebGPU.mgrDevice.get(deviceId);return WebGPU.mgrBindGroupLayout.create(device["createBindGroupLayout"](desc))}function _wgpuDeviceCreateBuffer(deviceId,descriptor){var mappedAtCreation=HEAP8[descriptor+24>>0]!==0;var desc={"label":undefined,"usage":HEAPU32[descriptor+8>>2],"size":HEAPU32[descriptor+4+16>>2]*4294967296+HEAPU32[descriptor+16>>2],"mappedAtCreation":mappedAtCreation};var labelPtr=HEAPU32[descriptor+4>>2];if(labelPtr)desc["label"]=UTF8ToString(labelPtr);var device=WebGPU.mgrDevice.get(deviceId);var bufferWrapper={};var id=WebGPU.mgrBuffer.create(device["createBuffer"](desc),bufferWrapper);if(mappedAtCreation){bufferWrapper.mapMode=2;bufferWrapper.onUnmap=[]}return id}function _wgpuDeviceCreateCommandEncoder(deviceId,descriptor){var desc;if(descriptor){desc={"label":undefined};var labelPtr=HEAPU32[descriptor+4>>2];if(labelPtr)desc["label"]=UTF8ToString(labelPtr)}var device=WebGPU.mgrDevice.get(deviceId);return WebGPU.mgrCommandEncoder.create(device["createCommandEncoder"](desc))}function _wgpuDeviceCreateComputePipeline(deviceId,descriptor){var desc={"label":undefined,"layout":WebGPU.mgrPipelineLayout.get(HEAPU32[descriptor+8>>2]),"compute":WebGPU.makeProgrammableStageDescriptor(descriptor+12)};var labelPtr=HEAPU32[descriptor+4>>2];if(labelPtr)desc["label"]=UTF8ToString(labelPtr);var device=WebGPU.mgrDevice.get(deviceId);return WebGPU.mgrComputePipeline.create(device["createComputePipeline"](desc))}function _wgpuDeviceCreatePipelineLayout(deviceId,descriptor){var bglCount=HEAPU32[descriptor+8>>2];var bglPtr=HEAPU32[descriptor+12>>2];var bgls=[];for(var i=0;i>2]))}var desc={"label":undefined,"bindGroupLayouts":bgls};var labelPtr=HEAPU32[descriptor+4>>2];if(labelPtr)desc["label"]=UTF8ToString(labelPtr);var device=WebGPU.mgrDevice.get(deviceId);return WebGPU.mgrPipelineLayout.create(device["createPipelineLayout"](desc))}function _wgpuDeviceCreateRenderPipeline(deviceId,descriptor){function makePrimitiveState(rsPtr){if(!rsPtr)return undefined;return{"topology":WebGPU.PrimitiveTopology[HEAPU32[rsPtr+4>>2]],"stripIndexFormat":WebGPU.IndexFormat[HEAPU32[rsPtr+8>>2]],"frontFace":WebGPU.FrontFace[HEAPU32[rsPtr+12>>2]],"cullMode":WebGPU.CullMode[HEAPU32[rsPtr+16>>2]]}}function makeBlendComponent(bdPtr){if(!bdPtr)return undefined;return{"operation":WebGPU.BlendOperation[HEAPU32[bdPtr>>2]],"srcFactor":WebGPU.BlendFactor[HEAPU32[bdPtr+4>>2]],"dstFactor":WebGPU.BlendFactor[HEAPU32[bdPtr+8>>2]]}}function makeBlendState(bsPtr){if(!bsPtr)return undefined;return{"alpha":makeBlendComponent(bsPtr+12),"color":makeBlendComponent(bsPtr+0)}}function makeColorState(csPtr){var formatInt=HEAPU32[csPtr+4>>2];return formatInt===0?undefined:{"format":WebGPU.TextureFormat[formatInt],"blend":makeBlendState(HEAPU32[csPtr+8>>2]),"writeMask":HEAPU32[csPtr+12>>2]}}function makeColorStates(count,csArrayPtr){var states=[];for(var i=0;i>2]],"failOp":WebGPU.StencilOperation[HEAPU32[ssfPtr+4>>2]],"depthFailOp":WebGPU.StencilOperation[HEAPU32[ssfPtr+8>>2]],"passOp":WebGPU.StencilOperation[HEAPU32[ssfPtr+12>>2]]}}function makeDepthStencilState(dssPtr){if(!dssPtr)return undefined;return{"format":WebGPU.TextureFormat[HEAPU32[dssPtr+4>>2]],"depthWriteEnabled":HEAP8[dssPtr+8>>0]!==0,"depthCompare":WebGPU.CompareFunction[HEAPU32[dssPtr+12>>2]],"stencilFront":makeStencilStateFace(dssPtr+16),"stencilBack":makeStencilStateFace(dssPtr+32),"stencilReadMask":HEAPU32[dssPtr+48>>2],"stencilWriteMask":HEAPU32[dssPtr+52>>2],"depthBias":HEAPU32[dssPtr+56>>2],"depthBiasSlopeScale":HEAPF32[dssPtr+60>>2],"depthBiasClamp":HEAPF32[dssPtr+64>>2]}}function makeVertexAttribute(vaPtr){return{"format":WebGPU.VertexFormat[HEAPU32[vaPtr>>2]],"offset":HEAPU32[vaPtr+4+8>>2]*4294967296+HEAPU32[vaPtr+8>>2],"shaderLocation":HEAPU32[vaPtr+16>>2]}}function makeVertexAttributes(count,vaArrayPtr){var vas=[];for(var i=0;i>2]*4294967296+HEAPU32[vbPtr>>2],"stepMode":WebGPU.VertexStepMode[HEAPU32[vbPtr+8>>2]],"attributes":makeVertexAttributes(HEAPU32[vbPtr+12>>2],HEAPU32[vbPtr+16>>2])}}function makeVertexBuffers(count,vbArrayPtr){if(!count)return undefined;var vbs=[];for(var i=0;i>2]),"entryPoint":UTF8ToString(HEAPU32[viPtr+8>>2]),"constants":WebGPU.makePipelineConstants(HEAPU32[viPtr+12>>2],HEAPU32[viPtr+16>>2]),"buffers":makeVertexBuffers(HEAPU32[viPtr+20>>2],HEAPU32[viPtr+24>>2])}}function makeMultisampleState(msPtr){if(!msPtr)return undefined;return{"count":HEAPU32[msPtr+4>>2],"mask":HEAPU32[msPtr+8>>2],"alphaToCoverageEnabled":HEAP8[msPtr+12>>0]!==0}}function makeFragmentState(fsPtr){if(!fsPtr)return undefined;return{"module":WebGPU.mgrShaderModule.get(HEAPU32[fsPtr+4>>2]),"entryPoint":UTF8ToString(HEAPU32[fsPtr+8>>2]),"constants":WebGPU.makePipelineConstants(HEAPU32[fsPtr+12>>2],HEAPU32[fsPtr+16>>2]),"targets":makeColorStates(HEAPU32[fsPtr+20>>2],HEAPU32[fsPtr+24>>2])}}var desc={"label":undefined,"layout":WebGPU.mgrPipelineLayout.get(HEAPU32[descriptor+8>>2]),"vertex":makeVertexState(descriptor+12),"primitive":makePrimitiveState(descriptor+40),"depthStencil":makeDepthStencilState(HEAPU32[descriptor+60>>2]),"multisample":makeMultisampleState(descriptor+64),"fragment":makeFragmentState(HEAPU32[descriptor+80>>2])};var labelPtr=HEAPU32[descriptor+4>>2];if(labelPtr)desc["label"]=UTF8ToString(labelPtr);var device=WebGPU.mgrDevice.get(deviceId);return WebGPU.mgrRenderPipeline.create(device["createRenderPipeline"](desc))}function _wgpuDeviceCreateSampler(deviceId,descriptor){var desc={"label":undefined,"addressModeU":WebGPU.AddressMode[HEAPU32[descriptor+8>>2]],"addressModeV":WebGPU.AddressMode[HEAPU32[descriptor+12>>2]],"addressModeW":WebGPU.AddressMode[HEAPU32[descriptor+16>>2]],"magFilter":WebGPU.FilterMode[HEAPU32[descriptor+20>>2]],"minFilter":WebGPU.FilterMode[HEAPU32[descriptor+24>>2]],"mipmapFilter":WebGPU.FilterMode[HEAPU32[descriptor+28>>2]],"lodMinClamp":HEAPF32[descriptor+32>>2],"lodMaxClamp":HEAPF32[descriptor+36>>2],"compare":WebGPU.CompareFunction[HEAPU32[descriptor+40>>2]]};var labelPtr=HEAPU32[descriptor+4>>2];if(labelPtr)desc["label"]=UTF8ToString(labelPtr);var device=WebGPU.mgrDevice.get(deviceId);return WebGPU.mgrSampler.create(device["createSampler"](desc))}function _wgpuDeviceCreateShaderModule(deviceId,descriptor){var nextInChainPtr=HEAPU32[descriptor>>2];var sType=HEAPU32[nextInChainPtr+4>>2];var desc={"label":undefined,"code":""};var labelPtr=HEAPU32[descriptor+4>>2];if(labelPtr)desc["label"]=UTF8ToString(labelPtr);switch(sType){case 5:{var count=HEAPU32[nextInChainPtr+8>>2];var start=HEAPU32[nextInChainPtr+12>>2];desc["code"]=HEAPU32.subarray(start>>2,(start>>2)+count);break}case 6:{var sourcePtr=HEAPU32[nextInChainPtr+8>>2];if(sourcePtr){desc["code"]=UTF8ToString(sourcePtr)}break}}var device=WebGPU.mgrDevice.get(deviceId);return WebGPU.mgrShaderModule.create(device["createShaderModule"](desc))}function _wgpuDeviceCreateSwapChain(deviceId,surfaceId,descriptor){var device=WebGPU.mgrDevice.get(deviceId);var context=WebGPU.mgrSurface.get(surfaceId);var canvasSize=[HEAPU32[descriptor+16>>2],HEAPU32[descriptor+20>>2]];if(canvasSize[0]!==0){context["canvas"]["width"]=canvasSize[0]}if(canvasSize[1]!==0){context["canvas"]["height"]=canvasSize[1]}var configuration={"device":device,"format":WebGPU.TextureFormat[HEAPU32[descriptor+12>>2]],"usage":HEAPU32[descriptor+8>>2],"alphaMode":"opaque"};context["configure"](configuration);return WebGPU.mgrSwapChain.create(context)}function _wgpuDeviceCreateTexture(deviceId,descriptor){var desc={"label":undefined,"size":WebGPU.makeExtent3D(descriptor+16),"mipLevelCount":HEAPU32[descriptor+32>>2],"sampleCount":HEAPU32[descriptor+36>>2],"dimension":WebGPU.TextureDimension[HEAPU32[descriptor+12>>2]],"format":WebGPU.TextureFormat[HEAPU32[descriptor+28>>2]],"usage":HEAPU32[descriptor+8>>2]};var labelPtr=HEAPU32[descriptor+4>>2];if(labelPtr)desc["label"]=UTF8ToString(labelPtr);var viewFormatCount=HEAPU32[descriptor+40>>2];if(viewFormatCount){var viewFormatsPtr=HEAPU32[descriptor+44>>2];desc["viewFormats"]=Array.from(HEAP32.subarray(viewFormatsPtr>>2,(viewFormatsPtr>>2)+viewFormatCount),function(format){return WebGPU.TextureFormat[format]})}var device=WebGPU.mgrDevice.get(deviceId);return WebGPU.mgrTexture.create(device["createTexture"](desc))}function _wgpuDeviceGetQueue(deviceId){var queueId=WebGPU.mgrDevice.objects[deviceId].queueId;WebGPU.mgrQueue.reference(queueId);return queueId}function _wgpuDeviceRelease(id){WebGPU.mgrDevice.release(id)}function maybeCStringToJsString(cString){return cString>2?UTF8ToString(cString):cString}var specialHTMLTargets=[0,document,window];function findEventTarget(target){target=maybeCStringToJsString(target);var domElement=specialHTMLTargets[target]||document.querySelector(target);return domElement}function findCanvasEventTarget(target){return findEventTarget(target)}function _wgpuInstanceCreateSurface(instanceId,descriptor){var nextInChainPtr=HEAPU32[descriptor>>2];var descriptorFromCanvasHTMLSelector=nextInChainPtr;var selectorPtr=HEAPU32[descriptorFromCanvasHTMLSelector+8>>2];var canvas=findCanvasEventTarget(selectorPtr);var context=canvas.getContext("webgpu");if(!context)return 0;var labelPtr=HEAPU32[descriptor+4>>2];if(labelPtr)context.surfaceLabelWebGPU=UTF8ToString(labelPtr);return WebGPU.mgrSurface.create(context)}function _wgpuInstanceRelease(){}function callUserCallback(func){if(ABORT){return}try{func()}catch(e){handleException(e)}}function allocateUTF8(str){var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8Array(str,HEAP8,ret,size);return ret}function _wgpuInstanceRequestAdapter(instanceId,options,callback,userdata){var opts;if(options){opts={"powerPreference":WebGPU.PowerPreference[HEAPU32[options+8>>2]],"forceFallbackAdapter":HEAP8[options+12>>0]!==0}}if(!("gpu"in navigator)){var messagePtr=allocateUTF8("WebGPU not available on this browser (navigator.gpu is not available)");getWasmTableEntry(callback)(1,0,messagePtr,userdata);_free(messagePtr);return}navigator["gpu"]["requestAdapter"](opts).then(function(adapter){callUserCallback(function(){if(adapter){var adapterId=WebGPU.mgrAdapter.create(adapter);getWasmTableEntry(callback)(0,adapterId,0,userdata)}else{var messagePtr=allocateUTF8("WebGPU not available on this system (requestAdapter returned null)");getWasmTableEntry(callback)(1,0,messagePtr,userdata);_free(messagePtr)}})},function(ex){callUserCallback(function(){var messagePtr=allocateUTF8(ex.message);getWasmTableEntry(callback)(2,0,messagePtr,userdata);_free(messagePtr)})})}function _wgpuPipelineLayoutRelease(id){WebGPU.mgrPipelineLayout.release(id)}function _wgpuQuerySetDestroy(querySetId){WebGPU.mgrQuerySet.get(querySetId)["destroy"]()}function _wgpuQuerySetRelease(id){WebGPU.mgrQuerySet.release(id)}function _wgpuQueueOnSubmittedWorkDone(queueId,signalValue_low,signalValue_high,callback,userdata){var queue=WebGPU.mgrQueue.get(queueId);queue["onSubmittedWorkDone"]().then(function(){callUserCallback(function(){getWasmTableEntry(callback)(0,userdata)})},function(){callUserCallback(function(){getWasmTableEntry(callback)(1,userdata)})})}function _wgpuQueueRelease(id){WebGPU.mgrQueue.release(id)}function _wgpuQueueSubmit(queueId,commandCount,commands){var queue=WebGPU.mgrQueue.get(queueId);var cmds=Array.from(HEAP32.subarray(commands>>2,(commands>>2)+commandCount),function(id){return WebGPU.mgrCommandBuffer.get(id)});queue["submit"](cmds)}function _wgpuQueueWriteBuffer(queueId,bufferId,bufferOffset_low,bufferOffset_high,data,size){var queue=WebGPU.mgrQueue.get(queueId);var buffer=WebGPU.mgrBuffer.get(bufferId);var bufferOffset=bufferOffset_high*4294967296+bufferOffset_low;var subarray=HEAPU8.subarray(data,data+size);queue["writeBuffer"](buffer,bufferOffset,subarray,0,size)}function _wgpuQueueWriteTexture(queueId,destinationPtr,data,dataSize,dataLayoutPtr,writeSizePtr){var queue=WebGPU.mgrQueue.get(queueId);var destination=WebGPU.makeImageCopyTexture(destinationPtr);var dataLayout=WebGPU.makeTextureDataLayout(dataLayoutPtr);var writeSize=WebGPU.makeExtent3D(writeSizePtr);var subarray=HEAPU8.subarray(data,data+dataSize);queue["writeTexture"](destination,subarray,dataLayout,writeSize)}function _wgpuRenderPassEncoderDraw(passId,vertexCount,instanceCount,firstVertex,firstInstance){var pass=WebGPU.mgrRenderPassEncoder.get(passId);pass["draw"](vertexCount,instanceCount,firstVertex,firstInstance)}function _wgpuRenderPassEncoderDrawIndexed(passId,indexCount,instanceCount,firstIndex,baseVertex,firstInstance){var pass=WebGPU.mgrRenderPassEncoder.get(passId);pass["drawIndexed"](indexCount,instanceCount,firstIndex,baseVertex,firstInstance)}function _wgpuRenderPassEncoderDrawIndirect(passId,indirectBufferId,indirectOffset_low,indirectOffset_high){var indirectBuffer=WebGPU.mgrBuffer.get(indirectBufferId);var indirectOffset=indirectOffset_high*4294967296+indirectOffset_low;var pass=WebGPU.mgrRenderPassEncoder.get(passId);pass["drawIndirect"](indirectBuffer,indirectOffset)}function _wgpuRenderPassEncoderEnd(passId){var pass=WebGPU.mgrRenderPassEncoder.get(passId);pass["end"]()}function _wgpuRenderPassEncoderRelease(id){WebGPU.mgrRenderPassEncoder.release(id)}function _wgpuRenderPassEncoderSetBindGroup(passId,groupIndex,groupId,dynamicOffsetCount,dynamicOffsetsPtr){var pass=WebGPU.mgrRenderPassEncoder.get(passId);var group=WebGPU.mgrBindGroup.get(groupId);if(dynamicOffsetCount==0){pass["setBindGroup"](groupIndex,group)}else{var offsets=[];for(var i=0;i>2])}pass["setBindGroup"](groupIndex,group,offsets)}}function _wgpuRenderPassEncoderSetBlendConstant(passId,colorPtr){var pass=WebGPU.mgrRenderPassEncoder.get(passId);var color=WebGPU.makeColor(colorPtr);pass["setBlendConstant"](color)}function _wgpuRenderPassEncoderSetIndexBuffer(passId,bufferId,format,offset_low,offset_high,size_low,size_high){var pass=WebGPU.mgrRenderPassEncoder.get(passId);var buffer=WebGPU.mgrBuffer.get(bufferId);var offset=offset_high*4294967296+offset_low;var size=size_high===-1&&size_low===-1?undefined:size_high*4294967296+size_low;pass["setIndexBuffer"](buffer,WebGPU.IndexFormat[format],offset,size)}function _wgpuRenderPassEncoderSetPipeline(passId,pipelineId){var pass=WebGPU.mgrRenderPassEncoder.get(passId);var pipeline=WebGPU.mgrRenderPipeline.get(pipelineId);pass["setPipeline"](pipeline)}function _wgpuRenderPassEncoderSetScissorRect(passId,x,y,w,h){var pass=WebGPU.mgrRenderPassEncoder.get(passId);pass["setScissorRect"](x,y,w,h)}function _wgpuRenderPassEncoderSetStencilReference(passId,reference){var pass=WebGPU.mgrRenderPassEncoder.get(passId);pass["setStencilReference"](reference)}function _wgpuRenderPassEncoderSetVertexBuffer(passId,slot,bufferId,offset_low,offset_high,size_low,size_high){var pass=WebGPU.mgrRenderPassEncoder.get(passId);var buffer=WebGPU.mgrBuffer.get(bufferId);var offset=offset_high*4294967296+offset_low;var size=size_high===-1&&size_low===-1?undefined:size_high*4294967296+size_low;pass["setVertexBuffer"](slot,buffer,offset,size)}function _wgpuRenderPassEncoderSetViewport(passId,x,y,w,h,minDepth,maxDepth){var pass=WebGPU.mgrRenderPassEncoder.get(passId);pass["setViewport"](x,y,w,h,minDepth,maxDepth)}function _wgpuRenderPipelineRelease(id){WebGPU.mgrRenderPipeline.release(id)}function _wgpuSamplerRelease(id){WebGPU.mgrSampler.release(id)}function _wgpuShaderModuleRelease(id){WebGPU.mgrShaderModule.release(id)}function _wgpuSurfaceRelease(id){WebGPU.mgrSurface.release(id)}function _wgpuSwapChainGetCurrentTextureView(swapChainId){var context=WebGPU.mgrSwapChain.get(swapChainId);return WebGPU.mgrTextureView.create(context["getCurrentTexture"]()["createView"]())}function _wgpuSwapChainRelease(id){WebGPU.mgrSwapChain.release(id)}function _wgpuTextureCreateView(textureId,descriptor){var desc;if(descriptor){var mipLevelCount=HEAPU32[descriptor+20>>2];var arrayLayerCount=HEAPU32[descriptor+28>>2];desc={"format":WebGPU.TextureFormat[HEAPU32[descriptor+8>>2]],"dimension":WebGPU.TextureViewDimension[HEAPU32[descriptor+12>>2]],"baseMipLevel":HEAPU32[descriptor+16>>2],"mipLevelCount":mipLevelCount===4294967295?undefined:mipLevelCount,"baseArrayLayer":HEAPU32[descriptor+24>>2],"arrayLayerCount":arrayLayerCount===4294967295?undefined:arrayLayerCount,"aspect":WebGPU.TextureAspect[HEAPU32[descriptor+32>>2]]};var labelPtr=HEAPU32[descriptor+4>>2];if(labelPtr)desc["label"]=UTF8ToString(labelPtr)}var texture=WebGPU.mgrTexture.get(textureId);return WebGPU.mgrTextureView.create(texture["createView"](desc))}function _wgpuTextureDestroy(textureId){WebGPU.mgrTexture.get(textureId)["destroy"]()}function _wgpuTextureRelease(id){WebGPU.mgrTexture.release(id)}function _wgpuTextureViewRelease(id){WebGPU.mgrTextureView.release(id)}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}InternalError=Module["InternalError"]=extendError(Error,"InternalError");embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");init_ClassHandle();init_embind();init_RegisteredPointer();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");init_emval();WebGPU.initManagers();var asmLibraryArg={"h":__embind_finalize_value_object,"Ta":__embind_register_bigint,"na":__embind_register_bool,"m":__embind_register_class,"K":__embind_register_class_class_function,"q":__embind_register_class_constructor,"d":__embind_register_class_function,"c":__embind_register_class_property,"ma":__embind_register_emval,"Q":__embind_register_float,"s":__embind_register_integer,"r":__embind_register_memory_view,"R":__embind_register_std_string,"D":__embind_register_std_wstring,"i":__embind_register_value_object,"a":__embind_register_value_object_field,"oa":__embind_register_void,"k":__emval_as,"V":__emval_call_void_method,"b":__emval_decref,"W":__emval_get_method_caller,"g":__emval_get_property,"l":__emval_incref,"p":__emval_new_array,"n":__emval_new_cstring,"j":__emval_run_destructors,"o":__emval_set_property,"f":__emval_take_value,"e":_abort,"ka":_emscripten_memcpy_big,"C":_emscripten_resize_heap,"Ba":_emscripten_webgpu_get_device,"ha":_environ_get,"ia":_environ_sizes_get,"ja":_fd_write,"P":_setTempRet0,"Ga":_wgpuAdapterGetProperties,"J":_wgpuAdapterHasFeature,"Da":_wgpuAdapterRelease,"Ha":_wgpuBindGroupRelease,"ca":_wgpuBufferDestroy,"O":_wgpuBufferGetMappedRange,"ba":_wgpuBufferRelease,"B":_wgpuBufferUnmap,"N":_wgpuCommandBufferRelease,"Ja":_wgpuCommandEncoderBeginComputePass,"pa":_wgpuCommandEncoderBeginRenderPass,"Wa":_wgpuCommandEncoderCopyBufferToBuffer,"da":_wgpuCommandEncoderCopyBufferToTexture,"Ka":_wgpuCommandEncoderCopyTextureToTexture,"u":_wgpuCommandEncoderFinish,"x":_wgpuCommandEncoderRelease,"Ia":_wgpuComputePassEncoderDispatchWorkgroups,"Va":_wgpuComputePassEncoderDispatchWorkgroupsIndirect,"ya":_wgpuComputePassEncoderEnd,"wa":_wgpuComputePassEncoderRelease,"Sa":_wgpuComputePassEncoderSetBindGroup,"Ra":_wgpuComputePassEncoderSetPipeline,"S":_wgpuComputePipelineRelease,"M":_wgpuDeviceCreateBindGroup,"L":_wgpuDeviceCreateBindGroupLayout,"v":_wgpuDeviceCreateBuffer,"y":_wgpuDeviceCreateCommandEncoder,"va":_wgpuDeviceCreateComputePipeline,"xa":_wgpuDeviceCreatePipelineLayout,"ua":_wgpuDeviceCreateRenderPipeline,"ta":_wgpuDeviceCreateSampler,"G":_wgpuDeviceCreateShaderModule,"qa":_wgpuDeviceCreateSwapChain,"E":_wgpuDeviceCreateTexture,"Y":_wgpuDeviceGetQueue,"Ca":_wgpuDeviceRelease,"Aa":_wgpuInstanceCreateSurface,"Ea":_wgpuInstanceRelease,"za":_wgpuInstanceRequestAdapter,"U":_wgpuPipelineLayoutRelease,"_":_wgpuQuerySetDestroy,"Z":_wgpuQuerySetRelease,"Ua":_wgpuQueueOnSubmittedWorkDone,"I":_wgpuQueueRelease,"z":_wgpuQueueSubmit,"ga":_wgpuQueueWriteBuffer,"X":_wgpuQueueWriteTexture,"La":_wgpuRenderPassEncoderDraw,"ea":_wgpuRenderPassEncoderDrawIndexed,"Xa":_wgpuRenderPassEncoderDrawIndirect,"la":_wgpuRenderPassEncoderEnd,"Za":_wgpuRenderPassEncoderRelease,"A":_wgpuRenderPassEncoderSetBindGroup,"Pa":_wgpuRenderPassEncoderSetBlendConstant,"Ya":_wgpuRenderPassEncoderSetIndexBuffer,"Qa":_wgpuRenderPassEncoderSetPipeline,"Na":_wgpuRenderPassEncoderSetScissorRect,"Ma":_wgpuRenderPassEncoderSetStencilReference,"fa":_wgpuRenderPassEncoderSetVertexBuffer,"Oa":_wgpuRenderPassEncoderSetViewport,"T":_wgpuRenderPipelineRelease,"sa":_wgpuSamplerRelease,"H":_wgpuShaderModuleRelease,"Fa":_wgpuSurfaceRelease,"F":_wgpuSwapChainGetCurrentTextureView,"ra":_wgpuSwapChainRelease,"w":_wgpuTextureCreateView,"aa":_wgpuTextureDestroy,"$":_wgpuTextureRelease,"t":_wgpuTextureViewRelease};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["$a"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["bb"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["cb"]).apply(null,arguments)};var ___getTypeName=Module["___getTypeName"]=function(){return(___getTypeName=Module["___getTypeName"]=Module["asm"]["db"]).apply(null,arguments)};var ___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=function(){return(___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=Module["asm"]["eb"]).apply(null,arguments)};var dynCall_jii=Module["dynCall_jii"]=function(){return(dynCall_jii=Module["dynCall_jii"]=Module["asm"]["fb"]).apply(null,arguments)};var dynCall_viij=Module["dynCall_viij"]=function(){return(dynCall_viij=Module["dynCall_viij"]=Module["asm"]["gb"]).apply(null,arguments)};var dynCall_jiji=Module["dynCall_jiji"]=function(){return(dynCall_jiji=Module["dynCall_jiji"]=Module["asm"]["hb"]).apply(null,arguments)};var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve(Module);if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}run(); + function doRun() { + if (calledRun) return; + calledRun = true; + Module["calledRun"] = true; + if (ABORT) return; + initRuntime(); + readyPromiseResolve(Module); + if (Module["onRuntimeInitialized"]) Module["onRuntimeInitialized"](); + postRun() + } + if (Module["setStatus"]) { + Module["setStatus"]("Running..."); + setTimeout(function() { + setTimeout(function() { + Module["setStatus"]("") + }, 1); + doRun() + }, 1) + } else { + doRun() + } + } + if (Module["preInit"]) { + if (typeof Module["preInit"] == "function") Module["preInit"] = [Module["preInit"]]; + while (Module["preInit"].length > 0) { + Module["preInit"].pop()() + } + } + run(); - return wasmDevice.ready -} -); + return wasmDevice.ready + } + ); })(); export default wasmDevice; \ No newline at end of file diff --git a/native/cocos/renderer/gfx-wgpu/WGPUDescriptorSet.cpp b/native/cocos/renderer/gfx-wgpu/WGPUDescriptorSet.cpp index 2da1a08a3ca..7e351790d50 100644 --- a/native/cocos/renderer/gfx-wgpu/WGPUDescriptorSet.cpp +++ b/native/cocos/renderer/gfx-wgpu/WGPUDescriptorSet.cpp @@ -146,19 +146,22 @@ void CCWGPUDescriptorSet::doInit(const DescriptorSetInfo &info) { ccstd::hash_t CCWGPUDescriptorSet::hash() const { ccstd::hash_t hash = 9527; - for (const auto &buffer : _buffers) { + for (const auto &bufferWrapper : _buffers) { + auto *buffer = bufferWrapper.ptr; if (buffer) { auto *wgpuBuffer = static_cast(buffer)->gpuBufferObject()->wgpuBuffer; ccstd::hash_combine(hash, wgpuBuffer); } } - for (const auto &texture : _textures) { + for (const auto &textureWrapper : _textures) { + auto *texture = textureWrapper.ptr; if (texture) { auto *wgpuTextureView = static_cast(texture)->gpuTextureObject()->selfView; ccstd::hash_combine(hash, wgpuTextureView); } } - for (const auto &sampler : _samplers) { + for (const auto &samplerWrapper : _samplers) { + auto *sampler = samplerWrapper.ptr; if (sampler) { auto *wgpuSampler = static_cast(sampler)->gpuSampler(); ccstd::hash_combine(hash, wgpuSampler); @@ -185,8 +188,8 @@ void CCWGPUDescriptorSet::update() { const auto &binding = bindings[i]; uint8_t resourceIndex = _layout->getDescriptorIndices()[i]; if (hasFlag(DESCRIPTOR_BUFFER_TYPE, bindings[i].descriptorType)) { - if (_buffers[resourceIndex]) { - auto *buffer = static_cast(_buffers[resourceIndex]); + if (_buffers[resourceIndex].ptr) { + auto *buffer = static_cast(_buffers[resourceIndex].ptr); auto &bindGroupEntry = _gpuBindGroupObj->bindGroupEntries[i]; buffer->check(); bindGroupEntry.binding = binding.binding; @@ -210,33 +213,33 @@ void CCWGPUDescriptorSet::update() { uint8_t textureIdx = texIter != _textureIdxMap.end() ? texIter->second : 255; uint8_t samplerIdx = smpIter != _samplerIdxMap.end() ? smpIter->second : 255; - if (textureIdx != 255 && _textures[resourceIndex]) { + if (textureIdx != 255 && _textures[resourceIndex].ptr) { auto &bindGroupEntry = _gpuBindGroupObj->bindGroupEntries[textureIdx]; - auto *texture = static_cast(_textures[resourceIndex]); + auto *texture = static_cast(_textures[resourceIndex].ptr); bindGroupEntry.binding = binding.binding; bindGroupEntry.textureView = texture->gpuTextureObject()->selfView; dsLayout->updateTextureLayout(bindGroupEntry.binding, texture); _gpuBindGroupObj->bindingSet.insert(binding.binding); } - if (samplerIdx != 255 && _samplers[resourceIndex]) { + if (samplerIdx != 255 && _samplers[resourceIndex].ptr) { auto &bindGroupEntry = _gpuBindGroupObj->bindGroupEntries[samplerIdx]; - auto *sampler = static_cast(_samplers[resourceIndex]); + auto *sampler = static_cast(_samplers[resourceIndex].ptr); bindGroupEntry.binding = binding.binding + CC_WGPU_MAX_ATTACHMENTS; bindGroupEntry.sampler = sampler->gpuSampler(); dsLayout->updateSamplerLayout(bindGroupEntry.binding, sampler); _gpuBindGroupObj->bindingSet.insert(binding.binding + CC_WGPU_MAX_ATTACHMENTS); } } else if (DescriptorType::STORAGE_IMAGE == bindings[i].descriptorType || DescriptorType::TEXTURE == bindings[i].descriptorType) { - if (_textures[resourceIndex]) { + if (_textures[resourceIndex].ptr) { auto &bindGroupEntry = _gpuBindGroupObj->bindGroupEntries[resourceIndex]; - auto *texture = static_cast(_textures[resourceIndex]); + auto *texture = static_cast(_textures[resourceIndex].ptr); bindGroupEntry.binding = binding.binding; bindGroupEntry.textureView = texture->gpuTextureObject()->selfView; dsLayout->updateTextureLayout(bindGroupEntry.binding, texture); } } else if (DescriptorType::SAMPLER == bindings[i].descriptorType) { auto &bindGroupEntry = _gpuBindGroupObj->bindGroupEntries[resourceIndex]; - auto *sampler = static_cast(_samplers[resourceIndex]); + auto *sampler = static_cast(_samplers[resourceIndex].ptr); bindGroupEntry.binding = binding.binding; bindGroupEntry.sampler = sampler->gpuSampler(); dsLayout->updateSamplerLayout(bindGroupEntry.binding, sampler); @@ -247,11 +250,11 @@ void CCWGPUDescriptorSet::update() { } void CCWGPUDescriptorSet::prepare() { - auto buffIter = std::find_if(_buffers.begin(), _buffers.end(), [](const Buffer *buffer) { - return buffer && static_cast(buffer)->internalChanged(); + auto buffIter = std::find_if(_buffers.begin(), _buffers.end(), [](const ObjectWithId &buffer) { + return buffer.ptr && static_cast(buffer.ptr)->internalChanged(); }); - auto texIter = std::find_if(_textures.begin(), _textures.end(), [](const Texture *texture) { - return texture && static_cast(texture)->internalChanged(); + auto texIter = std::find_if(_textures.begin(), _textures.end(), [](const ObjectWithId &texture) { + return texture.ptr && static_cast(texture.ptr)->internalChanged(); }); bool forceUpdate = buffIter != _buffers.end() || texIter != _textures.end(); @@ -301,14 +304,14 @@ void CCWGPUDescriptorSet::prepare() { _isDirty = false; if (buffIter != _buffers.end()) - std::for_each(_buffers.begin(), _buffers.end(), [](Buffer *buffer) { - if (buffer) - static_cast(buffer)->stamp(); + std::for_each(_buffers.begin(), _buffers.end(), [](ObjectWithId &buffer) { + if (buffer.ptr) + static_cast(buffer.ptr)->stamp(); }); if (texIter != _textures.end()) - std::for_each(_textures.begin(), _textures.end(), [](Texture *texture) { - if (texture) - static_cast(texture)->stamp(); + std::for_each(_textures.begin(), _textures.end(), [](ObjectWithId &texture) { + if (texture.ptr) + static_cast(texture.ptr)->stamp(); }); bindGroupMap.insert(std::make_pair(_hash, BindGroupCache{this, _gpuBindGroupObj->bindgroup, _bornHash})); diff --git a/native/cocos/renderer/gfx-wgpu/WGPUExports.h b/native/cocos/renderer/gfx-wgpu/WGPUExports.h index 81bdbe6ded8..18fbcac6835 100644 --- a/native/cocos/renderer/gfx-wgpu/WGPUExports.h +++ b/native/cocos/renderer/gfx-wgpu/WGPUExports.h @@ -122,7 +122,7 @@ EMSCRIPTEN_BINDINGS(WEBGPU_DEVICE_WASM_EXPORT) { .property("width", &Swapchain::getWidth) .property("height", &Swapchain::getHeight) .property("surfaceTransform", &Swapchain::getSurfaceTransform) - .property("objectID", &Swapchain::getObjectID); + .property("objectID", select_overload(&Swapchain::getObjectID)); class_>("CCWGPUSwapchain") .property("depthStencilTexture", &CCWGPUSwapchain::getDepthStencilTexture, &CCWGPUSwapchain::setDepthStencilTexture) .property("colorTexture", &CCWGPUSwapchain::getColorTexture, &CCWGPUSwapchain::setColorTexture); @@ -186,7 +186,7 @@ EMSCRIPTEN_BINDINGS(WEBGPU_DEVICE_WASM_EXPORT) { .property("subpasses", &RenderPass::getSubpasses) .property("dependencies", &RenderPass::getDependencies) .property("hash", &RenderPass::getHash) - .property("objectID", &RenderPass::getObjectID); + .property("objectID", select_overload(&RenderPass::getObjectID)); class_>("CCWGPURenderPass") .constructor<>(); @@ -202,7 +202,7 @@ EMSCRIPTEN_BINDINGS(WEBGPU_DEVICE_WASM_EXPORT) { .property("height", &Texture::getHeight) .property("size", &Texture::getSize) .property("isTextureView", &Texture::isTextureView) - .property("objectID", &Texture::getObjectID); + .property("objectID", select_overload(&Texture::getObjectID)); class_>("CCWGPUTexture") .property("depth", &CCWGPUTexture::getDepth) .property("layerCount", &CCWGPUTexture::getLayerCount) @@ -218,7 +218,7 @@ EMSCRIPTEN_BINDINGS(WEBGPU_DEVICE_WASM_EXPORT) { .class_function("computeHash", select_overload(&Framebuffer::computeHash), allow_raw_pointer>()) .function("destroy", &Framebuffer::destroy) .function("initialize", &Framebuffer::initialize, allow_raw_pointer>()) - .property("objectID", &Framebuffer::getObjectID); + .property("objectID", select_overload(&Framebuffer::getObjectID)); class_>("CCWGPUFramebuffer") .constructor<>() .property("renderPass", &CCWGPUFramebuffer::getRenderPass, &CCWGPUFramebuffer::setRenderPass) @@ -228,7 +228,7 @@ EMSCRIPTEN_BINDINGS(WEBGPU_DEVICE_WASM_EXPORT) { class_("Sampler") .function("getInfo", &Sampler::getInfo) .property("hash", &Sampler::getHash) - .property("objectID", &Sampler::getObjectID); + .property("objectID", select_overload(&Sampler::getObjectID)); class_>("CCWGPUSampler") .constructor(); @@ -241,7 +241,7 @@ EMSCRIPTEN_BINDINGS(WEBGPU_DEVICE_WASM_EXPORT) { .property("usage", &Buffer::getUsage) .property("memUsage", &Buffer::getMemUsage) .property("flags", &Buffer::getFlags) - .property("objectID", &Buffer::getObjectID); + .property("objectID", select_overload(&Buffer::getObjectID)); class_>("CCWGPUBuffer") // .function("update", select_overload(&CCWGPUBuffer::update), allow_raw_pointer>()) .function("update", select_overload(&CCWGPUBuffer::update)) @@ -253,7 +253,7 @@ EMSCRIPTEN_BINDINGS(WEBGPU_DEVICE_WASM_EXPORT) { .property("bindings", &DescriptorSetLayout::getBindings) .property("bindingIndices", &DescriptorSetLayout::getBindingIndices) .property("descriptorIndices", &DescriptorSetLayout::getDescriptorIndices) - .property("objectID", &DescriptorSetLayout::getObjectID); + .property("objectID", select_overload(&DescriptorSetLayout::getObjectID)); class_>("CCWGPUDescriptorSetLayout") .constructor<>(); @@ -274,7 +274,7 @@ EMSCRIPTEN_BINDINGS(WEBGPU_DEVICE_WASM_EXPORT) { .function("getSampler", select_overload(&DescriptorSet::getSampler), allow_raw_pointers()) .function("getSampler", select_overload(&DescriptorSet::getSampler), allow_raw_pointers()) .property("layout", &DescriptorSet::getLayout) - .property("objectID", &DescriptorSet::getObjectID); + .property("objectID", select_overload(&DescriptorSet::getObjectID)); class_>("CCWGPUDescriptorSet") .constructor<>(); @@ -282,7 +282,7 @@ EMSCRIPTEN_BINDINGS(WEBGPU_DEVICE_WASM_EXPORT) { .function("initialize", &PipelineLayout::initialize) .function("destroy", &PipelineLayout::destroy) .property("setLayouts", &PipelineLayout::getSetLayouts) - .property("objectID", &PipelineLayout::getObjectID); + .property("objectID", select_overload(&PipelineLayout::getObjectID)); class_>("CCWGPUPipelineLayout") .constructor<>(); @@ -299,7 +299,7 @@ EMSCRIPTEN_BINDINGS(WEBGPU_DEVICE_WASM_EXPORT) { .property("textures", &Shader::getTextures) .property("images", &Shader::getImages) .property("subpassInputs", &Shader::getSubpassInputs) - .property("objectID", &Shader::getObjectID); + .property("objectID", select_overload(&Shader::getObjectID)); class_>("CCWGPUShader") .constructor<>(); @@ -319,7 +319,7 @@ EMSCRIPTEN_BINDINGS(WEBGPU_DEVICE_WASM_EXPORT) { .property("vertexBuffers", &InputAssembler::getVertexBuffers) .property("indexBuffer", &InputAssembler::getIndexBuffer) .property("indirectBuffer", &InputAssembler::getIndirectBuffer) - .property("objectID", &InputAssembler::getObjectID); + .property("objectID", select_overload(&InputAssembler::getObjectID)); class_>("CCWGPUInputAssembler") .constructor<>(); @@ -350,7 +350,7 @@ EMSCRIPTEN_BINDINGS(WEBGPU_DEVICE_WASM_EXPORT) { .property("numDrawCalls", &CommandBuffer::getNumDrawCalls) .property("numInstances", &CommandBuffer::getNumInstances) .property("numTris", &CommandBuffer::getNumTris) - .property("objectID", &CommandBuffer::getObjectID); + .property("objectID", select_overload(&CommandBuffer::getObjectID)); class_>("CCWGPUCommandBuffer") .constructor<>() .function("setViewport", select_overload(&CCWGPUCommandBuffer::setViewport)) @@ -368,7 +368,7 @@ EMSCRIPTEN_BINDINGS(WEBGPU_DEVICE_WASM_EXPORT) { .function("destroy", &Queue::destroy) .function("submit", select_overload(&Queue::submit)) .property("type", &Queue::getType) - .property("objectID", &Queue::getObjectID); + .property("objectID", select_overload(&Queue::getObjectID)); class_>("CCWGPUQueue") .constructor<>(); @@ -384,25 +384,25 @@ EMSCRIPTEN_BINDINGS(WEBGPU_DEVICE_WASM_EXPORT) { .property("inputState", &PipelineState::getInputState) .property("dynamicStates", &PipelineState::getDynamicStates) .property("renderPass", &PipelineState::getRenderPass) - .property("objectID", &PipelineState::getObjectID); + .property("objectID", select_overload(&PipelineState::getObjectID)); class_>("CCWGPUPipelineState") .constructor<>(); class_("GeneralBarrier") .constructor() - .property("objectID", &GeneralBarrier::getObjectID); + .property("objectID", select_overload(&GeneralBarrier::getObjectID)); class_("WGPUGeneralBarrier") .constructor(); class_("BufferBarrier") .constructor() - .property("objectID", &BufferBarrier::getObjectID); + .property("objectID", select_overload(&BufferBarrier::getObjectID)); class_("WGPUBufferBarrier") .constructor(); class_("TextureBarrier") .constructor() - .property("objectID", &TextureBarrier::getObjectID); + .property("objectID", select_overload(&TextureBarrier::getObjectID)); class_("WGPUTextureBarrier") .constructor(); }; From 01b2632af6c0c1f401644fe3499c463ccfc3b68a Mon Sep 17 00:00:00 2001 From: ycg <1670543365@qq.com> Date: Tue, 18 Oct 2022 16:10:59 +0800 Subject: [PATCH 034/829] Adapter Network (#13074) * Adapter Network * Modify _triggerEvent to private method * Fix: Only one WebSocket can be created at the same time. --- .../taobao/wrapper/builtin/WebSocket.js | 134 ++++++++++++------ .../taobao/wrapper/builtin/XMLHttpRequest.js | 8 +- .../platforms/taobao/wrapper/utils.js | 109 +++++++++++++- 3 files changed, 199 insertions(+), 52 deletions(-) diff --git a/platforms/minigame/platforms/taobao/wrapper/builtin/WebSocket.js b/platforms/minigame/platforms/taobao/wrapper/builtin/WebSocket.js index 94c8b73a181..60529d75d98 100644 --- a/platforms/minigame/platforms/taobao/wrapper/builtin/WebSocket.js +++ b/platforms/minigame/platforms/taobao/wrapper/builtin/WebSocket.js @@ -1,4 +1,7 @@ -const _socketTask = new WeakMap() +const _utils = require('../utils'); + +const MAX_VALUE_WEBSOCkET = 1; +let CURR_VALUE_WEBSOCKET = 0; export default class WebSocket { static CONNECTING = 0 // The connection is not yet open. @@ -10,78 +13,127 @@ export default class WebSocket { bufferedAmount = 0 // TODO 更新 bufferedAmount extensions = '' - onclose = null - onerror = null - onmessage = null onopen = null + onmessage = null + onerror = null + onclose = null + + _onMessage = null + _onOpen = null + _onError = null + _onClose = null + _isReduced = false; protocol = '' // TODO 小程序内目前获取不到,实际上需要根据服务器选择的 sub-protocol 返回 readyState = 3 constructor(url, protocols = []) { + if(this._isMaxRef()){ + console.warn(`Failed to construct 'WebSocket': Only ${CURR_VALUE_WEBSOCKET} WebSocket can be created at the same time on TaoBao.`); + return this; + } + if (typeof url !== 'string' || !(/(^ws:\/\/)|(^wss:\/\/)/).test(url)) { throw new TypeError(`Failed to construct 'WebSocket': The URL '${url}' is invalid`) } this.url = url this.readyState = WebSocket.CONNECTING + this._addRef(); - const socketTask = my.connectSocket({ + my.connectSocket({ url, - protocols: Array.isArray(protocols) ? protocols : [protocols], - tcpNoDelay: true - }) - - _socketTask.set(this, socketTask) - - socketTask.onClose((res) => { - this.readyState = WebSocket.CLOSED - if (typeof this.onclose === 'function') { - this.onclose(res) - } - }) - - socketTask.onMessage((res) => { - if (typeof this.onmessage === 'function') { - this.onmessage(res) + fail: function fail(res) { + this._triggerEvent('error', res) } }) - socketTask.onOpen(() => { + this._onOpen = (res) => { this.readyState = WebSocket.OPEN - if (typeof this.onopen === 'function') { - this.onopen() - } - }) + this._triggerEvent('open') + } + my.onSocketOpen(this._onOpen) - socketTask.onError((res) => { - if (typeof this.onerror === 'function') { - this.onerror(new Error(res.errMsg)) + this._onMessage = (res) => { + if (res && res.data && res.isBuffer) { + res.data = _utils.base64ToArrayBuffer(res.data) } - }) + this._triggerEvent('message', res) + } + my.onSocketMessage(this._onMessage) + + this._onError = (res) => { + this._triggerEvent('error', res) + this._reduceRef(); + } + my.onSocketError(this._onError) + + this._onClose = (res) => { + this.readyState = WebSocket.CLOSED + this._triggerEvent('close') + this._removeAllSocketListenr() + this._reduceRef(); + } + my.onSocketClose(this._onClose) return this } - close(code, reason) { + close() { this.readyState = WebSocket.CLOSING - const socketTask = _socketTask.get(this) - - socketTask.close({ - code, - reason - }) + my.closeSocket() } send(data) { if (typeof data !== 'string' && !(data instanceof ArrayBuffer) && !ArrayBuffer.isView(data)) { throw new TypeError(`Failed to send message: The data ${data} is invalid`) + }else{ + var isBuffer = false; + if (data instanceof ArrayBuffer) { + data = _utils.arrayBufferToBase64(data) + isBuffer = true + } + + my.sendSocketMessage({ + data, + isBuffer, + fail: function (res) { + this._triggerEvent('error', res) + } + }); } + } - const socketTask = _socketTask.get(this) + _triggerEvent(type, ...args) { + if (typeof this[`on${type}`] === 'function') { + this[`on${type}`].apply(this, args) + } + } - socketTask.send({ - data - }) + _removeAllSocketListenr(){ + my.offSocketOpen(this._onOpen) + my.offSocketMessage(this._onMessage) + my.offSocketError(this._onError) + my.offSocketClose(this._onClose) + + this._onOpen = null + this._onMessage = null + this._onError = null + this._onClose = null + } + + _addRef(){ + CURR_VALUE_WEBSOCKET += 1 + } + + _reduceRef(){ + if(!this._isReduced){ + CURR_VALUE_WEBSOCKET -= 1 + _isReduced = true; + } + } + + _isMaxRef(){ + return CURR_VALUE_WEBSOCKET >= MAX_VALUE_WEBSOCkET } } diff --git a/platforms/minigame/platforms/taobao/wrapper/builtin/XMLHttpRequest.js b/platforms/minigame/platforms/taobao/wrapper/builtin/XMLHttpRequest.js index cc54632c157..7a161fd9f9e 100644 --- a/platforms/minigame/platforms/taobao/wrapper/builtin/XMLHttpRequest.js +++ b/platforms/minigame/platforms/taobao/wrapper/builtin/XMLHttpRequest.js @@ -136,14 +136,14 @@ export default class XMLHttpRequest extends EventTarget { _triggerEvent.call(this, 'load') _triggerEvent.call(this, 'loadend') }, - fail: ({ errMsg }) => { + fail: ({ error, errorMessage }) => { // TODO 规范错误 - if (errMsg.indexOf('abort') !== -1) { + if (9 === error || errorMessage.indexOf('abort') !== -1) { _triggerEvent.call(this, 'abort') - } else if (errMsg.indexOf('timeout') !== -1) { + } else if (13 === error || errorMessage.indexOf('超时') !== -1) { _triggerEvent.call(this, 'timeout') } else { - _triggerEvent.call(this, 'error', errMsg) + _triggerEvent.call(this, 'error', errorMessage) } _triggerEvent.call(this, 'loadend') } diff --git a/platforms/minigame/platforms/taobao/wrapper/utils.js b/platforms/minigame/platforms/taobao/wrapper/utils.js index 947fc069588..3ead0b65284 100644 --- a/platforms/minigame/platforms/taobao/wrapper/utils.js +++ b/platforms/minigame/platforms/taobao/wrapper/utils.js @@ -1,16 +1,111 @@ -let utils = { +const utils = { /** - * @param {Object} target - * @param {Object} origin - * @param {String} methodName - * @param {String} targetMethodName + * @param {Object} target + * @param {Object} origin + * @param {String} methodName + * @param {String} targetMethodName */ cloneMethod (target, origin, methodName, targetMethodName) { if (origin[methodName]) { targetMethodName = targetMethodName || methodName; target[targetMethodName] = origin[methodName].bind(origin); } - } + }, + + /** + * + * @param {String} str + * @returns + */ + encode (str) { + let encodings = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; + const string = String(str); + let result = ''; + let currentIndex = 0; + let sum = void 0; + while (string.charAt(0 | currentIndex) || (encodings = '=', currentIndex % 1)) { + currentIndex += 0.75; + const currentCode = string.charCodeAt(currentIndex); + if (currentCode > 255) { + // Cannot handle when it is greater than 255 + throw new Error('"btoa" failed'); + } + sum = sum << 8 | currentCode; + const encodeIndex = 63 & sum >> 8 - currentIndex % 1 * 8; + result += encodings.charAt(encodeIndex); + } + + return result; + }, + + /** + * + * @param {String} str + */ + decode (str) { + const encodings = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; + let res = ''; + const string = String(str).replace(/[=]+$/, ''); + let o; + let r; + let i = 0; + let currentIndex = 0; + while (r = string.charAt(currentIndex)) { + currentIndex += 1; + r = encodings.indexOf(r); + if (~r) { + o = i % 4 ? 64 * o + r : r; + if (i++ % 4) { + res += String.fromCharCode(255 & o >> (-2 * i & 6)); + } + } + } + + return res; + }, + + /** + * + * @param {ArrayBuffer} buffer + */ + arrayBufferToBase64 (buffer) { + return utils.encode(utils.arrayBufferToString(buffer)); + }, + + /** + * + * @param {String} base64 + */ + base64ToArrayBuffer (base64) { + return utils.stringToArrayBuffer(utils.decode(base64)); + }, + + /** + * + * @param {ArrayBuffer} buffer + */ + arrayBufferToString (buffer) { + let result = ''; + const uintArray = new Uint8Array(buffer); + const byteLength = uintArray.byteLength; + for (let i = 0; i < byteLength; i++) { + result += String.fromCharCode(uintArray[i]); + } + return result; + }, + + /** + * + * @param {String} string + */ + stringToArrayBuffer (string) { + const length = string.length; + const uintArray = new Uint8Array(length); + for (let i = 0; i < length; i++) { + uintArray[i] = string.charCodeAt(i); + } + return uintArray.buffer; + }, }; -module.exports = utils; \ No newline at end of file +module.exports = utils; From 579ee692e0beca32c12c496fe34a1dca747419f0 Mon Sep 17 00:00:00 2001 From: Zeqiang Li Date: Tue, 18 Oct 2022 17:52:23 +0800 Subject: [PATCH 035/829] remove redundant config (#13079) --- editor/engine-features/render-config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/editor/engine-features/render-config.json b/editor/engine-features/render-config.json index 85ae9c0f4a0..6f2f8eb65dc 100644 --- a/editor/engine-features/render-config.json +++ b/editor/engine-features/render-config.json @@ -12,7 +12,7 @@ "label": "i18n:ENGINE.features.graphics.label", "multi": true, "description": "i18n:ENGINE.features.graphics.description", - "default": ["gfx-webgl", "gfx-webgl2", "gfx-webgpu"], + "default": ["gfx-webgl", "gfx-webgl2"], "options": { "gfx-webgl": { "required": true, From 5e70d67b5fe8b3627bcf90100e7a92c04e5ad3c2 Mon Sep 17 00:00:00 2001 From: mmyduckx <308303735@qq.com> Date: Tue, 18 Oct 2022 18:21:28 +0800 Subject: [PATCH 036/829] fix JSBLoadFont memory leak & refine implementation (#13076) --- .../bindings/manual/jsb_platform_apple.mm | 58 ++----------------- 1 file changed, 5 insertions(+), 53 deletions(-) diff --git a/native/cocos/bindings/manual/jsb_platform_apple.mm b/native/cocos/bindings/manual/jsb_platform_apple.mm index de7b03c22b7..93fcc856356 100644 --- a/native/cocos/bindings/manual/jsb_platform_apple.mm +++ b/native/cocos/bindings/manual/jsb_platform_apple.mm @@ -42,53 +42,6 @@ of this software and associated engine source code (the "Software"), a limited, return _fontFamilyNameMap; } -static ccstd::vector getAvailableFontFamilyNames() { - ccstd::vector ret; - -#if CC_PLATFORM == CC_PLATFORM_MACOS - CFArrayRef allFamilyNames = CTFontManagerCopyAvailableFontFamilyNames(); -#else - CFArrayRef allFamilyNames = (CFArrayRef)[[NSClassFromString(@"UIFont") familyNames] retain]; -#endif - - char buf[256] = {0}; - for (CFIndex i = 0; i < CFArrayGetCount(allFamilyNames); i++) { - CFStringRef fontName = (CFStringRef)CFArrayGetValueAtIndex(allFamilyNames, i); - if (CFStringGetCString(fontName, buf, sizeof(buf), kCFStringEncodingUTF8) != 0) { - ret.push_back(buf); - } - } - - CFRelease(allFamilyNames); - return ret; -} - -static ccstd::string getFontFamilyByCompareAvailableFontFamilyNames(const ccstd::vector &before, const ccstd::vector &after) { - ccstd::string ret; - size_t beforeLen = before.size(); - size_t afterLen = after.size(); - if (afterLen > beforeLen) { - for (size_t i = 0; i < afterLen; ++i) { - bool hasFont = false; - for (size_t j = 0; j < beforeLen; ++j) { - if (after[i] == before[j]) { - hasFont = true; - break; - } - } - - if (!hasFont) { - ret = after[i]; - break; - } - - if (ret.empty()) - ret = after.back(); - } - } - return ret; -} - static bool JSB_loadFont(se::State &s) { const auto &args = s.args(); size_t argc = args.size(); @@ -123,15 +76,12 @@ static bool JSB_loadFont(se::State &s) { return true; } - NSURL *url = [NSURL fileURLWithPath:[NSString stringWithUTF8String:fontFilePath.c_str()]]; - NSData *dynamicFontData = [NSData dataWithContentsOfURL:url]; + NSData *dynamicFontData = [NSData dataWithContentsOfFile:[NSString stringWithUTF8String:fontFilePath.c_str()]]; if (!dynamicFontData) { SE_LOGE("load font (%s) failed!", source.c_str()); return true; } - const auto &familyNamesBeforeRegister = getAvailableFontFamilyNames(); - bool succeed = true; CFErrorRef error; CGDataProviderRef providerRef = CGDataProviderCreateWithCFData((CFDataRef)dynamicFontData); @@ -145,12 +95,14 @@ static bool JSB_loadFont(se::State &s) { } if (succeed) { - const auto &familyNamesAfterRegister = getAvailableFontFamilyNames(); - ccstd::string familyName = getFontFamilyByCompareAvailableFontFamilyNames(familyNamesBeforeRegister, familyNamesAfterRegister); + CFStringRef fontName = CGFontCopyFullName(font); + ccstd::string familyName([(NSString *)fontName UTF8String]); + if (!familyName.empty()) { _fontFamilyNameMap.emplace(originalFamilyName, familyName); s.rval().setString(familyName); } + CFRelease(fontName); } CFRelease(font); From f413ff7a9b8ff04517a380f0fbf512943fd1963e Mon Sep 17 00:00:00 2001 From: Yiwen <15225434259xue@gmail.com> Date: Wed, 19 Oct 2022 10:19:40 +0800 Subject: [PATCH 037/829] Add a new class to manage a set of default device resources. (#12936) --- cocos/gfx/base/device.ts | 103 +++++++++++++++++- native/cocos/renderer/GFXDeviceManager.h | 1 - native/cocos/renderer/gfx-base/GFXDevice.cpp | 69 ++++++++++++ native/cocos/renderer/gfx-base/GFXDevice.h | 17 +++ .../gfx-validator/TextureValidator.cpp | 7 ++ 5 files changed, 195 insertions(+), 2 deletions(-) diff --git a/cocos/gfx/base/device.ts b/cocos/gfx/base/device.ts index 83fe68140cf..7ef76d0e45d 100644 --- a/cocos/gfx/base/device.ts +++ b/cocos/gfx/base/device.ts @@ -28,7 +28,7 @@ import { CommandBufferInfo, BufferInfo, BufferViewInfo, TextureInfo, TextureViewInfo, SamplerInfo, DescriptorSetInfo, ShaderInfo, InputAssemblerInfo, RenderPassInfo, FramebufferInfo, DescriptorSetLayoutInfo, PipelineLayoutInfo, QueueInfo, BufferTextureCopy, DeviceInfo, DeviceCaps, GeneralBarrierInfo, TextureBarrierInfo, BufferBarrierInfo, - SwapchainInfo, BindingMappingInfo, Format, FormatFeature, + SwapchainInfo, BindingMappingInfo, Format, FormatFeature, TextureType, TextureUsageBit, TextureFlagBit, Offset, Extent, SampleCount, TextureSubresLayers, } from './define'; import { Buffer } from './buffer'; import { CommandBuffer } from './command-buffer'; @@ -353,3 +353,104 @@ export abstract class Device { return this._formatFeatures[format]; } } + +export class DefaultResource { + private _texture2D : Texture | null = null; + private _texture3D : Texture | null = null; + private _textureCube : Texture | null = null; + private _texture1DArray : Texture | null = null; + private _texture2DArray : Texture | null = null; + + constructor (device: Device) { + const bufferSize = 64; + // create a new buffer and fill it with a white pixel + const buffer = new Uint8Array(bufferSize); + buffer.fill(255); + if (device.capabilities.maxTextureSize >= 2) { + this._texture2D = device.createTexture(new TextureInfo( + TextureType.TEX2D, + TextureUsageBit.STORAGE | TextureUsageBit.SAMPLED, + Format.RGBA8, + 2, 2, + TextureFlagBit.NONE, + )); + const copyRegion = new BufferTextureCopy(0, 0, 0, new Offset(0, 0, 0), new Extent(2, 2, 1)); + device.copyBuffersToTexture([buffer], this._texture2D, [copyRegion]); + } + if (device.capabilities.maxTextureSize >= 2) { + this._textureCube = device.createTexture(new TextureInfo( + TextureType.CUBE, + TextureUsageBit.STORAGE | TextureUsageBit.SAMPLED, + Format.RGBA8, + 2, 2, + TextureFlagBit.NONE, + 6, + )); + const copyRegion = new BufferTextureCopy(0, 0, 0, new Offset(0, 0, 0), new Extent(2, 2, 1)); + device.copyBuffersToTexture([buffer], this._textureCube, [copyRegion]); + copyRegion.texSubres.baseArrayLayer = 1; + device.copyBuffersToTexture([buffer], this._textureCube, [copyRegion]); + copyRegion.texSubres.baseArrayLayer = 2; + device.copyBuffersToTexture([buffer], this._textureCube, [copyRegion]); + copyRegion.texSubres.baseArrayLayer = 3; + device.copyBuffersToTexture([buffer], this._textureCube, [copyRegion]); + copyRegion.texSubres.baseArrayLayer = 4; + device.copyBuffersToTexture([buffer], this._textureCube, [copyRegion]); + copyRegion.texSubres.baseArrayLayer = 5; + device.copyBuffersToTexture([buffer], this._textureCube, [copyRegion]); + } + if (device.capabilities.max3DTextureSize >= 2) { + this._texture3D = device.createTexture(new TextureInfo( + TextureType.TEX3D, + TextureUsageBit.STORAGE | TextureUsageBit.SAMPLED, + Format.RGBA8, + 2, 2, + TextureFlagBit.NONE, + 1, 1, + SampleCount.ONE, + 2, + )); + const copyRegion = new BufferTextureCopy(0, 0, 0, new Offset(0, 0, 0), new Extent(2, 2, 2), new TextureSubresLayers(0, 0, 1)); + device.copyBuffersToTexture([buffer], this._texture3D, [copyRegion]); + } + if (device.capabilities.maxArrayTextureLayers >= 2) { + this._texture1DArray = device.createTexture(new TextureInfo( + TextureType.TEX1D_ARRAY, + TextureUsageBit.STORAGE | TextureUsageBit.SAMPLED, + Format.RGBA8, + 1, 1, + TextureFlagBit.NONE, + 2, + )); + const copyRegion = new BufferTextureCopy(0, 0, 0, new Offset(0, 0, 0), new Extent(1, 1, 1), new TextureSubresLayers(0, 0, 1)); + device.copyBuffersToTexture([buffer], this._texture1DArray, [copyRegion]); + copyRegion.texSubres.baseArrayLayer = 1; + device.copyBuffersToTexture([buffer], this._texture1DArray, [copyRegion]); + } + if (device.capabilities.maxArrayTextureLayers >= 2) { + this._texture2DArray = device.createTexture(new TextureInfo( + TextureType.TEX2D_ARRAY, + TextureUsageBit.STORAGE | TextureUsageBit.SAMPLED, + Format.RGBA8, + 2, 2, + TextureFlagBit.NONE, + 2, + )); + const copyRegion = new BufferTextureCopy(0, 0, 0, new Offset(0, 0, 0), new Extent(2, 2, 1), new TextureSubresLayers(0, 0, 1)); + device.copyBuffersToTexture([buffer], this._texture2DArray, [copyRegion]); + copyRegion.texSubres.baseArrayLayer = 1; + device.copyBuffersToTexture([buffer], this._texture2DArray, [copyRegion]); + } + } + + public getTexture (type : TextureType) { + switch (type) { + case TextureType.TEX2D: return this._texture2D; + case TextureType.TEX3D: return this._texture3D; + case TextureType.CUBE: return this._textureCube; + case TextureType.TEX1D_ARRAY: return this._texture1DArray; + case TextureType.TEX2D_ARRAY: return this._texture2DArray; + default: return null; + } + } +} diff --git a/native/cocos/renderer/GFXDeviceManager.h b/native/cocos/renderer/GFXDeviceManager.h index 75ee60a521d..3f619fc6f1c 100644 --- a/native/cocos/renderer/GFXDeviceManager.h +++ b/native/cocos/renderer/GFXDeviceManager.h @@ -62,7 +62,6 @@ namespace cc { namespace gfx { - class CC_DLL DeviceManager final { static constexpr bool DETACH_DEVICE_THREAD{true}; static constexpr bool FORCE_DISABLE_VALIDATION{false}; diff --git a/native/cocos/renderer/gfx-base/GFXDevice.cpp b/native/cocos/renderer/gfx-base/GFXDevice.cpp index fef0987313c..a22c551bf9c 100644 --- a/native/cocos/renderer/gfx-base/GFXDevice.cpp +++ b/native/cocos/renderer/gfx-base/GFXDevice.cpp @@ -126,5 +126,74 @@ BufferBarrier *Device::getBufferBarrier(const BufferBarrierInfo &info) { return _bufferBarriers[info]; } +DefaultResource::DefaultResource(Device *device) { + uint32_t bufferSize = 64; + ccstd::vector buffer(bufferSize, 255); + const uint8_t *bufferData = buffer.data(); + if (device->getCapabilities().maxTextureSize >= 2) { + _texture2D = device->createTexture({TextureType::TEX2D, TextureUsageBit::STORAGE | TextureUsageBit::SAMPLED, + Format::RGBA8, 2, 2, TextureFlagBit::NONE}); + BufferTextureCopy region = {0, 0, 0, {0, 0, 0}, {2, 2, 1}, {0, 0, 1}}; + device->copyBuffersToTexture(&bufferData, _texture2D, ®ion, 1); + } + if (device->getCapabilities().maxTextureSize >= 2) { + _textureCube = device->createTexture({TextureType::CUBE, TextureUsageBit::STORAGE | TextureUsageBit::SAMPLED, + Format::RGBA8, 2, 2, TextureFlagBit::NONE, 6}); + BufferTextureCopy region = {0, 0, 0, {0, 0, 0}, {2, 2, 1}, {0, 0, 1}}; + device->copyBuffersToTexture(&bufferData, _textureCube, ®ion, 1); + region.texSubres.baseArrayLayer = 1; + device->copyBuffersToTexture(&bufferData, _textureCube, ®ion, 1); + region.texSubres.baseArrayLayer = 2; + device->copyBuffersToTexture(&bufferData, _textureCube, ®ion, 1); + region.texSubres.baseArrayLayer = 3; + device->copyBuffersToTexture(&bufferData, _textureCube, ®ion, 1); + region.texSubres.baseArrayLayer = 4; + device->copyBuffersToTexture(&bufferData, _textureCube, ®ion, 1); + region.texSubres.baseArrayLayer = 5; + device->copyBuffersToTexture(&bufferData, _textureCube, ®ion, 1); + } + + if (device->getCapabilities().max3DTextureSize >= 2) { + _texture3D = device->createTexture({TextureType::TEX3D, TextureUsageBit::STORAGE | TextureUsageBit::SAMPLED, + Format::RGBA8, 2, 2, TextureFlagBit::NONE, 1, 1, SampleCount::ONE, 2}); + BufferTextureCopy region = {0, 0, 0, {0, 0, 0}, {2, 2, 2}, {0, 0, 1}}; + device->copyBuffersToTexture(&bufferData, _texture3D, ®ion, 1); + } + if (device->getCapabilities().maxArrayTextureLayers >= 2) { + _texture1DArray = device->createTexture({TextureType::TEX1D_ARRAY, TextureUsageBit::STORAGE | TextureUsageBit::SAMPLED, + Format::RGBA8, 1, 1, TextureFlagBit::NONE, 2}); + BufferTextureCopy region = {0, 0, 0, {0, 0, 0}, {1, 1, 1}, {0, 0, 1}}; + device->copyBuffersToTexture(&bufferData, _texture1DArray, ®ion, 1); + region.texSubres.baseArrayLayer = 1; + device->copyBuffersToTexture(&bufferData, _texture1DArray, ®ion, 1); + } + if (device->getCapabilities().maxArrayTextureLayers >= 2) { + _texture2DArray = device->createTexture({TextureType::TEX2D_ARRAY, TextureUsageBit::STORAGE | TextureUsageBit::SAMPLED, + Format::RGBA8, 2, 2, TextureFlagBit::NONE, 2}); + BufferTextureCopy region = {0, 0, 0, {0, 0, 0}, {2, 2, 1}, {0, 0, 1}}; + device->copyBuffersToTexture(&bufferData, _texture2DArray, ®ion, 1); + region.texSubres.baseArrayLayer = 1; + device->copyBuffersToTexture(&bufferData, _texture2DArray, ®ion, 1); + } +} + +const Texture *DefaultResource::getTexture(TextureType type) const { + switch (type) { + case TextureType::TEX2D: + return _texture2D; + case TextureType::CUBE: + return _textureCube; + case TextureType::TEX3D: + return _texture3D; + case TextureType::TEX1D_ARRAY: + return _texture1DArray; + case TextureType::TEX2D_ARRAY: + return _texture2DArray; + default: + CC_ASSERT(false); + return nullptr; + } +} + } // namespace gfx } // namespace cc diff --git a/native/cocos/renderer/gfx-base/GFXDevice.h b/native/cocos/renderer/gfx-base/GFXDevice.h index a7c256b1225..8ab53e703f3 100644 --- a/native/cocos/renderer/gfx-base/GFXDevice.h +++ b/native/cocos/renderer/gfx-base/GFXDevice.h @@ -191,6 +191,23 @@ class CC_DLL Device : public RefCounted { ccstd::vector _swapchains; // weak reference }; +class DefaultResource { +public: + explicit DefaultResource(Device *device); + + ~DefaultResource() = default; + + const Texture *getTexture(TextureType type) const; + +private: + IntrusivePtr _texture1D; + IntrusivePtr _texture2D; + IntrusivePtr _texture1DArray; + IntrusivePtr _texture2DArray; + IntrusivePtr _textureCube; + IntrusivePtr _texture3D; +}; + ////////////////////////////////////////////////////////////////////////// CommandBuffer *Device::createCommandBuffer(const CommandBufferInfo &info) { diff --git a/native/cocos/renderer/gfx-validator/TextureValidator.cpp b/native/cocos/renderer/gfx-validator/TextureValidator.cpp index d5893846909..a75366dda67 100644 --- a/native/cocos/renderer/gfx-validator/TextureValidator.cpp +++ b/native/cocos/renderer/gfx-validator/TextureValidator.cpp @@ -74,6 +74,13 @@ void TextureValidator::doInit(const TextureInfo &info) { } break; } + case TextureType::TEX1D_ARRAY: { + if (std::min(info.width, info.height) > 1 || std::max(info.width, info.height) > DeviceValidator::getInstance()->getCapabilities().maxTextureSize + || info.layerCount > DeviceValidator::getInstance()->getCapabilities().maxArrayTextureLayers) { + CC_ASSERT(false); + } + break; + } case TextureType::TEX2D_ARRAY: { if (std::max(info.width, info.height) > DeviceValidator::getInstance()->getCapabilities().maxTextureSize || info.layerCount > DeviceValidator::getInstance()->getCapabilities().maxArrayTextureLayers) { From 88402b9d588410457f361091a7937a322b847de5 Mon Sep 17 00:00:00 2001 From: Cocos Robot <48829427+cocos-robot@users.noreply.github.com> Date: Wed, 19 Oct 2022 10:30:45 +0800 Subject: [PATCH 038/829] [ci skip][AUTO]: Automated code generating update: 6bb4677d9555e9692c41c8eb32828ab53c0758e9 (#12936) (#13080) Co-authored-by: cocos-robot --- native/cocos/bindings/auto/jsb_gfx_auto.cpp | 93 +++++++++++++++++++++ native/cocos/bindings/auto/jsb_gfx_auto.h | 5 ++ 2 files changed, 98 insertions(+) diff --git a/native/cocos/bindings/auto/jsb_gfx_auto.cpp b/native/cocos/bindings/auto/jsb_gfx_auto.cpp index 7a04e03f684..714d7da3e92 100644 --- a/native/cocos/bindings/auto/jsb_gfx_auto.cpp +++ b/native/cocos/bindings/auto/jsb_gfx_auto.cpp @@ -29374,6 +29374,98 @@ bool js_register_cc_gfx_Device(se::Object* obj) { } +se::Class* __jsb_cc_gfx_DefaultResource_class = nullptr; +se::Object* __jsb_cc_gfx_DefaultResource_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_gfx_DefaultResource) + +// js_ctor +static bool js_new_cc_gfx_DefaultResource(se::State& s) // NOLINT(readability-identifier-naming) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + + if (argc != 1) { + SE_REPORT_ERROR("js_new_cc_gfx_DefaultResource: wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + + cc::gfx::Device *arg1 = (cc::gfx::Device *) NULL ; + cc::gfx::DefaultResource *result; + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg1, s.thisObject()); + SE_PRECONDITION2(ok, false, "new_DefaultResource,1,SWIGTYPE_p_cc__gfx__Device"); + result = (cc::gfx::DefaultResource *)new cc::gfx::DefaultResource(arg1); + + + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); + return true; +} +SE_BIND_CTOR(js_new_cc_gfx_DefaultResource, __jsb_cc_gfx_DefaultResource_class, js_delete_cc_gfx_DefaultResource) + +static bool js_delete_cc_gfx_DefaultResource(se::State& s) +{ + // js_dtoroverride + return true; +} +SE_BIND_FINALIZE_FUNC(js_delete_cc_gfx_DefaultResource) + +static bool js_cc_gfx_DefaultResource_getTexture(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gfx::DefaultResource *arg1 = (cc::gfx::DefaultResource *) NULL ; + cc::gfx::TextureType arg2 ; + int32_t temp2 ; + cc::gfx::Texture *result = 0 ; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) enum SWIGTYPE (int32_t temp2) + ok &= sevalue_to_native(args[0], &temp2); + SE_PRECONDITION2(ok, false, "DefaultResource_getTexture,2,SWIGTYPE_cc__gfx__TextureType"); + arg2 = (cc::gfx::TextureType)temp2; + result = (cc::gfx::Texture *)((cc::gfx::DefaultResource const *)arg1)->getTexture(arg2); + // %typemap(out) SWIGTYPE* + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "DefaultResource_getTexture, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + return true; +} +SE_BIND_FUNC(js_cc_gfx_DefaultResource_getTexture) + +bool js_register_cc_gfx_DefaultResource(se::Object* obj) { + auto* cls = se::Class::create("DefaultResource", obj, nullptr, _SE(js_new_cc_gfx_DefaultResource)); + + + cls->defineFunction("getTexture", _SE(js_cc_gfx_DefaultResource_getTexture)); + + + + + cls->defineFinalizeFunction(_SE(js_delete_cc_gfx_DefaultResource)); + + + cls->install(); + JSBClassType::registerClass(cls); + + __jsb_cc_gfx_DefaultResource_proto = cls->getProto(); + __jsb_cc_gfx_DefaultResource_class = cls; + se::ScriptEngine::getInstance()->clearException(); + return true; +} + + se::Class* __jsb_cc_gfx_DeviceManager_class = nullptr; se::Object* __jsb_cc_gfx_DeviceManager_proto = nullptr; SE_DECLARE_FINALIZE_FUNC(js_delete_cc_gfx_DeviceManager) @@ -29635,6 +29727,7 @@ bool register_all_gfx(se::Object* obj) { js_register_cc_gfx_TextureBarrier(ns); js_register_cc_gfx_BufferBarrier(ns); js_register_cc_gfx_Device(ns); + js_register_cc_gfx_DefaultResource(ns); js_register_cc_gfx_DeviceManager(ns); /* Register global variables & global functions */ diff --git a/native/cocos/bindings/auto/jsb_gfx_auto.h b/native/cocos/bindings/auto/jsb_gfx_auto.h index bff9f3932d5..ec05b29a061 100644 --- a/native/cocos/bindings/auto/jsb_gfx_auto.h +++ b/native/cocos/bindings/auto/jsb_gfx_auto.h @@ -694,6 +694,11 @@ extern se::Object *__jsb_cc_gfx_Device_proto; // NOLINT extern se::Class * __jsb_cc_gfx_Device_class; // NOLINT +JSB_REGISTER_OBJECT_TYPE(cc::gfx::DefaultResource); +extern se::Object *__jsb_cc_gfx_DefaultResource_proto; // NOLINT +extern se::Class * __jsb_cc_gfx_DefaultResource_class; // NOLINT + + JSB_REGISTER_OBJECT_TYPE(cc::gfx::DeviceManager); extern se::Object *__jsb_cc_gfx_DeviceManager_proto; // NOLINT extern se::Class * __jsb_cc_gfx_DeviceManager_class; // NOLINT From ce4e422a5e35221902068ffef65388d361f63feb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B1=9F=E6=88=98?= <40414978+PatriceJiang@users.noreply.github.com> Date: Wed, 19 Oct 2022 10:33:37 +0800 Subject: [PATCH 039/829] Update CMakeLists.txt (#13077) --- native/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/native/CMakeLists.txt b/native/CMakeLists.txt index 91de546f16a..ac75b166032 100644 --- a/native/CMakeLists.txt +++ b/native/CMakeLists.txt @@ -2978,6 +2978,7 @@ if(MSVC) /wd4309 # truncation of constant value /wd4819 # file contains a character that cannot be represented in the current code page /wd4996 # deprecated + /wd4099 # PDB 'filename' was not found with 'object/library' or at 'path'; linking object as if no debug info ) endif() From 8db3fc509376ae6ef0187317124f4f19caed65e9 Mon Sep 17 00:00:00 2001 From: hyde zhou Date: Wed, 19 Oct 2022 13:38:14 +0800 Subject: [PATCH 040/829] [develop] graph serialization updated (#13068) * graph serialization updated * add ccclass back * graph ts serialization added * format * fix switch * improve safety --- cocos/rendering/custom/layout-graph.ts | 212 ++++++++++++++++++ cocos/rendering/custom/render-graph.ts | 27 +++ cocos/rendering/custom/types.ts | 2 +- .../custom/LayoutGraphSerialization.h | 150 ++++++++++++- 4 files changed, 387 insertions(+), 4 deletions(-) diff --git a/cocos/rendering/custom/layout-graph.ts b/cocos/rendering/custom/layout-graph.ts index 4f0ee6214c5..c77a1beb47b 100644 --- a/cocos/rendering/custom/layout-graph.ts +++ b/cocos/rendering/custom/layout-graph.ts @@ -203,6 +203,15 @@ export class LayoutGraph implements impl.BidirectionalGraph return this._vertices.length; } //----------------------------------------------------------------- + // EdgeListGraph + numEdges (): number { + let numEdges = 0; + for (const v of this.vertices()) { + numEdges += this.outDegree(v); + } + return numEdges; + } + //----------------------------------------------------------------- // MutableGraph clear (): void { // ComponentGraph @@ -822,6 +831,15 @@ export class LayoutGraphData implements impl.BidirectionalGraph return this._vertices.length; } //----------------------------------------------------------------- + // EdgeListGraph + numEdges (): number { + let numEdges = 0; + for (const v of this.vertices()) { + numEdges += this.outDegree(v); + } + return numEdges; + } + //----------------------------------------------------------------- // MutableGraph clear (): void { // Members @@ -1236,6 +1254,74 @@ export function loadRenderPhase (ar: InputArchive, v: RenderPhase) { } } +export function saveLayoutGraph (ar: OutputArchive, g: LayoutGraph) { + const numVertices = g.numVertices(); + const numEdges = g.numEdges(); + ar.writeNumber(numVertices); + ar.writeNumber(numEdges); + let numStages = 0; + let numPhases = 0; + for (const v of g.vertices()) { + switch (g.id(v)) { + case LayoutGraphValue.RenderStage: + numStages += 1; + break; + case LayoutGraphValue.RenderPhase: + numPhases += 1; + break; + default: + break; + } + } + ar.writeNumber(numStages); + ar.writeNumber(numPhases); + for (const v of g.vertices()) { + ar.writeNumber(g.id(v)); + ar.writeNumber(g.getParent(v)); + ar.writeString(g.getName(v)); + saveDescriptorDB(ar, g.getDescriptors(v)); + switch (g.id(v)) { + case LayoutGraphValue.RenderStage: + ar.writeNumber(g.getRenderStage(v)); + break; + case LayoutGraphValue.RenderPhase: + saveRenderPhase(ar, g.getRenderPhase(v)); + break; + default: + break; + } + } +} + +export function loadLayoutGraph (ar: InputArchive, g: LayoutGraph) { + const numVertices = ar.readNumber(); + const numEdges = ar.readNumber(); + const numStages = ar.readNumber(); + const numPhases = ar.readNumber(); + for (let v = 0; v !== numVertices; ++v) { + const id = ar.readNumber(); + const u = ar.readNumber(); + const name = ar.readString(); + const descriptors = new DescriptorDB(); + loadDescriptorDB(ar, descriptors); + switch (id) { + case LayoutGraphValue.RenderStage: { + const renderStage = ar.readNumber(); + g.addVertex(LayoutGraphValue.RenderStage, renderStage, name, descriptors, u); + break; + } + case LayoutGraphValue.RenderPhase: { + const renderPhase = new RenderPhase(); + loadRenderPhase(ar, renderPhase); + g.addVertex(LayoutGraphValue.RenderPhase, renderPhase, name, descriptors, u); + break; + } + default: + break; + } + } +} + export function saveUniformData (ar: OutputArchive, v: UniformData) { ar.writeNumber(v.uniformID); ar.writeNumber(v.uniformType); @@ -1515,3 +1601,129 @@ export function loadRenderPhaseData (ar: InputArchive, v: RenderPhaseData) { v.shaderIndex.set(k1, v1); } } + +export function saveLayoutGraphData (ar: OutputArchive, g: LayoutGraphData) { + const numVertices = g.numVertices(); + const numEdges = g.numEdges(); + ar.writeNumber(numVertices); + ar.writeNumber(numEdges); + let numStages = 0; + let numPhases = 0; + for (const v of g.vertices()) { + switch (g.id(v)) { + case LayoutGraphDataValue.RenderStage: + numStages += 1; + break; + case LayoutGraphDataValue.RenderPhase: + numPhases += 1; + break; + default: + break; + } + } + ar.writeNumber(numStages); + ar.writeNumber(numPhases); + for (const v of g.vertices()) { + ar.writeNumber(g.id(v)); + ar.writeNumber(g.getParent(v)); + ar.writeString(g.getName(v)); + ar.writeNumber(g.getUpdate(v)); + savePipelineLayoutData(ar, g.getLayout(v)); + switch (g.id(v)) { + case LayoutGraphDataValue.RenderStage: + saveRenderStageData(ar, g.getRenderStage(v)); + break; + case LayoutGraphDataValue.RenderPhase: + saveRenderPhaseData(ar, g.getRenderPhase(v)); + break; + default: + break; + } + } + ar.writeNumber(g.valueNames.length); // string[] + for (const v1 of g.valueNames) { + ar.writeString(v1); + } + ar.writeNumber(g.attributeIndex.size); // Map + for (const [k1, v1] of g.attributeIndex) { + ar.writeString(k1); + ar.writeNumber(v1); + } + ar.writeNumber(g.constantIndex.size); // Map + for (const [k1, v1] of g.constantIndex) { + ar.writeString(k1); + ar.writeNumber(v1); + } + ar.writeNumber(g.shaderLayoutIndex.size); // Map + for (const [k1, v1] of g.shaderLayoutIndex) { + ar.writeString(k1); + ar.writeNumber(v1); + } + ar.writeNumber(g.effects.size); // Map + for (const [k1, v1] of g.effects) { + ar.writeString(k1); + saveEffectData(ar, v1); + } +} + +export function loadLayoutGraphData (ar: InputArchive, g: LayoutGraphData) { + const numVertices = ar.readNumber(); + const numEdges = ar.readNumber(); + const numStages = ar.readNumber(); + const numPhases = ar.readNumber(); + for (let v = 0; v !== numVertices; ++v) { + const id = ar.readNumber(); + const u = ar.readNumber(); + const name = ar.readString(); + const update = ar.readNumber(); + const layout = new PipelineLayoutData(); + loadPipelineLayoutData(ar, layout); + switch (id) { + case LayoutGraphDataValue.RenderStage: { + const renderStage = new RenderStageData(); + loadRenderStageData(ar, renderStage); + g.addVertex(LayoutGraphDataValue.RenderStage, renderStage, name, update, layout, u); + break; + } + case LayoutGraphDataValue.RenderPhase: { + const renderPhase = new RenderPhaseData(); + loadRenderPhaseData(ar, renderPhase); + g.addVertex(LayoutGraphDataValue.RenderPhase, renderPhase, name, update, layout, u); + break; + } + default: + break; + } + } + let sz = 0; + sz = ar.readNumber(); // string[] + g.valueNames.length = sz; + for (let i1 = 0; i1 !== sz; ++i1) { + g.valueNames[i1] = ar.readString(); + } + sz = ar.readNumber(); // Map + for (let i1 = 0; i1 !== sz; ++i1) { + const k1 = ar.readString(); + const v1 = ar.readNumber(); + g.attributeIndex.set(k1, v1); + } + sz = ar.readNumber(); // Map + for (let i1 = 0; i1 !== sz; ++i1) { + const k1 = ar.readString(); + const v1 = ar.readNumber(); + g.constantIndex.set(k1, v1); + } + sz = ar.readNumber(); // Map + for (let i1 = 0; i1 !== sz; ++i1) { + const k1 = ar.readString(); + const v1 = ar.readNumber(); + g.shaderLayoutIndex.set(k1, v1); + } + sz = ar.readNumber(); // Map + for (let i1 = 0; i1 !== sz; ++i1) { + const k1 = ar.readString(); + const v1 = new EffectData(); + loadEffectData(ar, v1); + g.effects.set(k1, v1); + } +} diff --git a/cocos/rendering/custom/render-graph.ts b/cocos/rendering/custom/render-graph.ts index c571dcac5b2..da9a690d695 100644 --- a/cocos/rendering/custom/render-graph.ts +++ b/cocos/rendering/custom/render-graph.ts @@ -310,6 +310,15 @@ export class ResourceGraph implements impl.BidirectionalGraph return this._vertices.length; } //----------------------------------------------------------------- + // EdgeListGraph + numEdges (): number { + let numEdges = 0; + for (const v of this.vertices()) { + numEdges += this.outDegree(v); + } + return numEdges; + } + //----------------------------------------------------------------- // MutableGraph clear (): void { // Members @@ -819,6 +828,15 @@ export class SubpassGraph implements impl.BidirectionalGraph return this._vertices.length; } //----------------------------------------------------------------- + // EdgeListGraph + numEdges (): number { + let numEdges = 0; + for (const v of this.vertices()) { + numEdges += this.outDegree(v); + } + return numEdges; + } + //----------------------------------------------------------------- // MutableGraph clear (): void { // ComponentGraph @@ -1325,6 +1343,15 @@ export class RenderGraph implements impl.BidirectionalGraph return this._vertices.length; } //----------------------------------------------------------------- + // EdgeListGraph + numEdges (): number { + let numEdges = 0; + for (const v of this.vertices()) { + numEdges += this.outDegree(v); + } + return numEdges; + } + //----------------------------------------------------------------- // MutableGraph clear (): void { // Members diff --git a/cocos/rendering/custom/types.ts b/cocos/rendering/custom/types.ts index cefb6c7f683..f55dbd49524 100644 --- a/cocos/rendering/custom/types.ts +++ b/cocos/rendering/custom/types.ts @@ -29,11 +29,11 @@ * ========================= !DO NOT CHANGE THE FOLLOWING SECTION MANUALLY! ========================= */ /* eslint-disable max-len */ -import { ccclass } from '../../core/data/decorators'; import { ClearFlagBit, Color, LoadOp, ShaderStageFlagBit, StoreOp, Type, UniformBlock } from '../../gfx'; import { Light } from '../../render-scene/scene'; import { OutputArchive, InputArchive } from './archive'; import { saveColor, loadColor, saveUniformBlock, loadUniformBlock } from './serialization'; +import { ccclass } from '../../core/data/decorators'; export enum UpdateFrequency { PER_INSTANCE, diff --git a/native/cocos/renderer/pipeline/custom/LayoutGraphSerialization.h b/native/cocos/renderer/pipeline/custom/LayoutGraphSerialization.h index 6d0b7a6ba41..e9e0cb4caf1 100644 --- a/native/cocos/renderer/pipeline/custom/LayoutGraphSerialization.h +++ b/native/cocos/renderer/pipeline/custom/LayoutGraphSerialization.h @@ -60,16 +60,80 @@ inline void save(OutputArchive& ar, const LayoutGraph& g) { using Graph = LayoutGraph; using VertexT = Graph::vertex_descriptor; using SizeT = Graph::vertices_size_type; - static_assert(std::is_same_v); + static_assert(std::is_same_v); const auto numVertices = num_vertices(g); const auto numEdges = num_edges(g); save(ar, numVertices); save(ar, numEdges); + save(ar, static_cast(g.stages.size())); save(ar, static_cast(g.phases.size())); + + const auto nameMap = get(Graph::Name, g); + const auto descriptorsMap = get(Graph::Descriptors, g); for (const auto& v : makeRange(vertices(g))) { - save(ar, get(LayoutGraph::Name, g, v)); + const auto typeID = static_cast(tag(v, g).index()); + static_assert(std::is_same_v); + save(ar, typeID); + save(ar, parent(v, g)); + save(ar, get(nameMap, v)); + save(ar, get(descriptorsMap, v)); + visitObject( + v, g, + overload( + [&](const auto& object) { + save(ar, object); + })); + } +} + +inline void load(InputArchive& ar, LayoutGraph& g) { + using Graph = LayoutGraph; + using VertexT = Graph::vertex_descriptor; + using SizeT = Graph::vertices_size_type; + static_assert(std::is_same_v); + + SizeT numVertices = 0; + SizeT numEdges = 0; + load(ar, numVertices); + load(ar, numEdges); + g.reserve(numVertices); + + SizeT stages = 0; + SizeT phases = 0; + load(ar, stages); + load(ar, phases); + g.stages.reserve(stages); + g.phases.reserve(phases); + + const auto nameMap = get(Graph::Name, g); + const auto descriptorsMap = get(Graph::Descriptors, g); + for (SizeT v = 0; v != numVertices; ++v) { + SizeT id = std::numeric_limits::max(); + VertexT u = Graph::null_vertex(); + ccstd::pmr::string name(g.get_allocator()); + DescriptorDB descriptors(g.get_allocator()); + load(ar, id); + load(ar, u); + load(ar, name); + load(ar, descriptors); + switch(id) { + case 0: { + uint32_t val; + load(ar, val); + addVertex(std::move(name), std::move(descriptors), val, g, u); + break; + } + case 1: { + RenderPhase val(g.get_allocator()); + load(ar, val); + addVertex(std::move(name), std::move(descriptors), std::move(val), g, u); + break; + } + default: + throw std::runtime_error("load graph failed"); + } } } @@ -233,16 +297,96 @@ inline void save(OutputArchive& ar, const LayoutGraphData& g) { using Graph = LayoutGraphData; using VertexT = Graph::vertex_descriptor; using SizeT = Graph::vertices_size_type; - static_assert(std::is_same_v); + static_assert(std::is_same_v); const auto numVertices = num_vertices(g); const auto numEdges = num_edges(g); save(ar, numVertices); save(ar, numEdges); + save(ar, static_cast(g.stages.size())); save(ar, static_cast(g.phases.size())); + + const auto nameMap = get(Graph::Name, g); + const auto updateMap = get(Graph::Update, g); + const auto layoutMap = get(Graph::Layout, g); for (const auto& v : makeRange(vertices(g))) { + const auto typeID = static_cast(tag(v, g).index()); + static_assert(std::is_same_v); + save(ar, typeID); + save(ar, parent(v, g)); + save(ar, get(nameMap, v)); + save(ar, get(updateMap, v)); + save(ar, get(layoutMap, v)); + visitObject( + v, g, + overload( + [&](const auto& object) { + save(ar, object); + })); + } + save(ar, g.valueNames); + save(ar, g.attributeIndex); + save(ar, g.constantIndex); + save(ar, g.shaderLayoutIndex); + save(ar, g.effects); +} + +inline void load(InputArchive& ar, LayoutGraphData& g) { + using Graph = LayoutGraphData; + using VertexT = Graph::vertex_descriptor; + using SizeT = Graph::vertices_size_type; + static_assert(std::is_same_v); + + SizeT numVertices = 0; + SizeT numEdges = 0; + load(ar, numVertices); + load(ar, numEdges); + g.reserve(numVertices); + + SizeT stages = 0; + SizeT phases = 0; + load(ar, stages); + load(ar, phases); + g.stages.reserve(stages); + g.phases.reserve(phases); + + const auto nameMap = get(Graph::Name, g); + const auto updateMap = get(Graph::Update, g); + const auto layoutMap = get(Graph::Layout, g); + for (SizeT v = 0; v != numVertices; ++v) { + SizeT id = std::numeric_limits::max(); + VertexT u = Graph::null_vertex(); + ccstd::pmr::string name(g.get_allocator()); + UpdateFrequency update{}; + PipelineLayoutData layout(g.get_allocator()); + load(ar, id); + load(ar, u); + load(ar, name); + load(ar, update); + load(ar, layout); + switch(id) { + case 0: { + RenderStageData val(g.get_allocator()); + load(ar, val); + addVertex(std::move(name), update, std::move(layout), std::move(val), g, u); + break; + } + case 1: { + RenderPhaseData val(g.get_allocator()); + load(ar, val); + addVertex(std::move(name), update, std::move(layout), std::move(val), g, u); + break; + } + default: + throw std::runtime_error("load graph failed"); + } } + load(ar, g.valueNames); + load(ar, g.attributeIndex); + load(ar, g.constantIndex); + load(ar, g.shaderLayoutIndex); + load(ar, g.effects); } } // namespace render From 4e545eb4cbbf2bc9e88f113dcde8809f7ff4451b Mon Sep 17 00:00:00 2001 From: ycg <1670543365@qq.com> Date: Wed, 19 Oct 2022 14:32:49 +0800 Subject: [PATCH 041/829] Add Hindi language. (#13084) --- native/cocos/platform/interfaces/modules/ISystem.cpp | 3 +++ native/cocos/platform/interfaces/modules/ISystem.h | 3 ++- native/cocos/platform/ios/modules/System.mm | 1 + native/cocos/platform/java/modules/CommonSystem.cpp | 2 ++ native/cocos/platform/linux/modules/System.cpp | 2 ++ native/cocos/platform/mac/modules/System.mm | 1 + native/cocos/platform/qnx/modules/System.cpp | 2 ++ native/cocos/platform/win32/modules/System.cpp | 3 +++ pal/system-info/enum-type/language.ts | 6 ++++++ 9 files changed, 22 insertions(+), 1 deletion(-) diff --git a/native/cocos/platform/interfaces/modules/ISystem.cpp b/native/cocos/platform/interfaces/modules/ISystem.cpp index bab73f06d1c..afd03ec32f5 100644 --- a/native/cocos/platform/interfaces/modules/ISystem.cpp +++ b/native/cocos/platform/interfaces/modules/ISystem.cpp @@ -89,6 +89,9 @@ ccstd::string ISystem::getCurrentLanguageToString() { case ISystem::LanguageType::BULGARIAN: languageStr = "bg"; break; + case ISystem::LanguageType::HINDI: + languageStr = "hi"; + break; default: languageStr = "unknown"; break; diff --git a/native/cocos/platform/interfaces/modules/ISystem.h b/native/cocos/platform/interfaces/modules/ISystem.h index 07f74335f65..86d6a4343ac 100644 --- a/native/cocos/platform/interfaces/modules/ISystem.h +++ b/native/cocos/platform/interfaces/modules/ISystem.h @@ -53,7 +53,8 @@ class CC_DLL ISystem : public OSInterface { TURKISH, UKRAINIAN, ROMANIAN, - BULGARIAN + BULGARIAN, + HINDI }; enum class OSType { WINDOWS, /**< Windows */ diff --git a/native/cocos/platform/ios/modules/System.mm b/native/cocos/platform/ios/modules/System.mm index 7225a6db0a5..b90ff216a0e 100644 --- a/native/cocos/platform/ios/modules/System.mm +++ b/native/cocos/platform/ios/modules/System.mm @@ -73,6 +73,7 @@ of this software and associated engine source code (the "Software"), a limited, if ([languageCode isEqualToString:@"uk"]) return LanguageType::UKRAINIAN; if ([languageCode isEqualToString:@"ro"]) return LanguageType::ROMANIAN; if ([languageCode isEqualToString:@"bg"]) return LanguageType::BULGARIAN; + if ([languageCode isEqualToString:@"hi"]) return LanguageType::HINDI; return LanguageType::ENGLISH; } diff --git a/native/cocos/platform/java/modules/CommonSystem.cpp b/native/cocos/platform/java/modules/CommonSystem.cpp index 6da4c25105d..6cd53a7221c 100644 --- a/native/cocos/platform/java/modules/CommonSystem.cpp +++ b/native/cocos/platform/java/modules/CommonSystem.cpp @@ -78,6 +78,8 @@ CommonSystem::LanguageType CommonSystem::getCurrentLanguage() const { ret = LanguageType::ROMANIAN; } else if (0 == strcmp("bg", pLanguageName)) { ret = LanguageType::BULGARIAN; + } else if (0 == strcmp("hi", pLanguageName)) { + ret = LanguageType::HINDI; } return ret; } diff --git a/native/cocos/platform/linux/modules/System.cpp b/native/cocos/platform/linux/modules/System.cpp index 85c60d4bc75..43f37f13176 100644 --- a/native/cocos/platform/linux/modules/System.cpp +++ b/native/cocos/platform/linux/modules/System.cpp @@ -119,6 +119,8 @@ System::LanguageType System::getLanguageTypeByISO2(const char *code) const { ret = LanguageType::ROMANIAN; } else if (strncmp(code, "bg", 2) == 0) { ret = LanguageType::BULGARIAN; + } else if (strncmp(code, "hi", 2) == 0) { + ret = LanguageType::HINDI; } return ret; } diff --git a/native/cocos/platform/mac/modules/System.mm b/native/cocos/platform/mac/modules/System.mm index c638530f5f5..343e0605fea 100644 --- a/native/cocos/platform/mac/modules/System.mm +++ b/native/cocos/platform/mac/modules/System.mm @@ -73,6 +73,7 @@ of this software and associated engine source code (the "Software"), a limited, if ([languageCode isEqualToString:@"uk"]) return LanguageType::UKRAINIAN; if ([languageCode isEqualToString:@"ro"]) return LanguageType::ROMANIAN; if ([languageCode isEqualToString:@"bg"]) return LanguageType::BULGARIAN; + if ([languageCode isEqualToString:@"hi"]) return LanguageType::HINDI; return LanguageType::ENGLISH; } diff --git a/native/cocos/platform/qnx/modules/System.cpp b/native/cocos/platform/qnx/modules/System.cpp index 8af64388bdd..cacc1f6e707 100644 --- a/native/cocos/platform/qnx/modules/System.cpp +++ b/native/cocos/platform/qnx/modules/System.cpp @@ -120,6 +120,8 @@ System::LanguageType System::getLanguageTypeByISO2(const char *code) const { ret = LanguageType::ROMANIAN; } else if (strncmp(code, "bg", 2) == 0) { ret = LanguageType::BULGARIAN; + } else if (strncmp(code, "hi", 2) == 0) { + ret = LanguageType::HINDI; } return ret; } diff --git a/native/cocos/platform/win32/modules/System.cpp b/native/cocos/platform/win32/modules/System.cpp index 8c7d3365cba..75855c15f15 100644 --- a/native/cocos/platform/win32/modules/System.cpp +++ b/native/cocos/platform/win32/modules/System.cpp @@ -102,6 +102,9 @@ System::LanguageType System::getCurrentLanguage() const { case LANG_BULGARIAN: ret = LanguageType::BULGARIAN; break; + case LANG_HINDI: + ret = LanguageType::HINDI; + break; } return ret; diff --git a/pal/system-info/enum-type/language.ts b/pal/system-info/enum-type/language.ts index d0cf122af00..545a4916b66 100644 --- a/pal/system-info/enum-type/language.ts +++ b/pal/system-info/enum-type/language.ts @@ -118,4 +118,10 @@ export enum Language { * @zh 语言代码 - 保加利亚语 */ BULGARIAN = 'bg', + + /** + * @en Hindi language code + * @zh 语言代码 - 印度语 + */ + HINDI = 'hi', } From a3fa4f6feb4db807531e947e3056b181e52adb9a Mon Sep 17 00:00:00 2001 From: Yiwen <15225434259xue@gmail.com> Date: Wed, 19 Oct 2022 15:00:20 +0800 Subject: [PATCH 042/829] jsb ignore gfx::DefaultResource (#13087) --- native/tools/swig-config/gfx.i | 2 ++ 1 file changed, 2 insertions(+) diff --git a/native/tools/swig-config/gfx.i b/native/tools/swig-config/gfx.i index 35c7de93413..5fd1fee9223 100644 --- a/native/tools/swig-config/gfx.i +++ b/native/tools/swig-config/gfx.i @@ -81,6 +81,8 @@ namespace cc { namespace gfx { %ignore FormatInfo; +%ignore DefaultResource; + }} // namespace cc { namespace gfx { // ----- Module Macro Section ------ From f0a8b165f23c3640eb19c7a0f7b9d568070228b7 Mon Sep 17 00:00:00 2001 From: Zeqiang Li Date: Wed, 19 Oct 2022 15:23:17 +0800 Subject: [PATCH 043/829] wgpu generate mipmap automatically WGPU_CI_ON (#13088) * adapt to develop * gen mipmap * wgpu gen mipmap --- native/cocos/renderer/gfx-wgpu/WGPUDevice.cpp | 11 +- .../renderer/gfx-wgpu/WGPUPipelineState.cpp | 7 +- native/cocos/renderer/gfx-wgpu/WGPUShader.cpp | 8 +- .../cocos/renderer/gfx-wgpu/WGPUTexture.cpp | 4 + native/cocos/renderer/gfx-wgpu/WGPUUtils.cpp | 254 ++++++++++++++++++ native/cocos/renderer/gfx-wgpu/WGPUUtils.h | 11 +- 6 files changed, 279 insertions(+), 16 deletions(-) diff --git a/native/cocos/renderer/gfx-wgpu/WGPUDevice.cpp b/native/cocos/renderer/gfx-wgpu/WGPUDevice.cpp index 016d3edaccb..15cc15fa900 100644 --- a/native/cocos/renderer/gfx-wgpu/WGPUDevice.cpp +++ b/native/cocos/renderer/gfx-wgpu/WGPUDevice.cpp @@ -301,7 +301,7 @@ void CCWGPUDevice::copyBuffersToTexture(const uint8_t *const *buffers, Texture * // it's buffer data layout WGPUTextureDataLayout texDataLayout = { - .offset = 0, // we always create a non-offset staging buffer or give interface a non-offset buffer address + .offset = 0, .bytesPerRow = bufferBytesPerRow, .rowsPerImage = bufferPixelHeight, }; @@ -352,6 +352,9 @@ void CCWGPUDevice::copyBuffersToTexture(const uint8_t *const *buffers, Texture * } } } + if (hasFlag(ccTexture->getInfo().flags, TextureFlags::GEN_MIPMAP)) { + genMipMap(ccTexture, 1, ccTexture->getInfo().levelCount - 1, l, _cmdBuff); + } } } } @@ -478,9 +481,9 @@ void CCWGPUDevice::getQueryPoolResults(QueryPool *queryPool) { } void CCWGPUDevice::debug() { - auto wgpuCommandEncoder = wgpuDeviceCreateCommandEncoder(CCWGPUDevice::getInstance()->gpuDeviceObject()->wgpuDevice, nullptr); - auto wgpuCommandBuffer = wgpuCommandEncoderFinish(wgpuCommandEncoder, nullptr); - wgpuQueueSubmit(CCWGPUDevice::getInstance()->gpuDeviceObject()->wgpuQueue, 1, &wgpuCommandBuffer); + // auto wgpuCommandEncoder = wgpuDeviceCreateCommandEncoder(CCWGPUDevice::getInstance()->gpuDeviceObject()->wgpuDevice, nullptr); + // auto wgpuCommandBuffer = wgpuCommandEncoderFinish(wgpuCommandEncoder, nullptr); + // wgpuQueueSubmit(CCWGPUDevice::getInstance()->gpuDeviceObject()->wgpuQueue, 1, &wgpuCommandBuffer); } void CCWGPUDevice::initConfigs() { diff --git a/native/cocos/renderer/gfx-wgpu/WGPUPipelineState.cpp b/native/cocos/renderer/gfx-wgpu/WGPUPipelineState.cpp index ef40d51c5d9..ebdffe099a2 100644 --- a/native/cocos/renderer/gfx-wgpu/WGPUPipelineState.cpp +++ b/native/cocos/renderer/gfx-wgpu/WGPUPipelineState.cpp @@ -88,8 +88,6 @@ ccstd::hash_t hash(const WGPURenderPipelineDescriptor &desc) { hash_combine(hash, desc.depthStencil->depthBias); hash_combine(hash, desc.depthStencil->depthBiasSlopeScale); hash_combine(hash, desc.depthStencil->depthBiasClamp); - } else { - hash_combine(hash, 0); } hash_combine(hash, desc.multisample.count); @@ -107,6 +105,7 @@ ccstd::hash_t hash(const WGPURenderPipelineDescriptor &desc) { hash_combine(hash, desc.fragment->targetCount); for (uint32_t i = 0; i < desc.fragment->targetCount; ++i) { hash_combine(hash, desc.fragment->targets[i].format); + hash_combine(hash, desc.fragment->targets[i].blend); if (desc.fragment->targets[i].blend) { hash_combine(hash, desc.fragment->targets[i].blend->color.operation); hash_combine(hash, desc.fragment->targets[i].blend->color.srcFactor); @@ -114,8 +113,6 @@ ccstd::hash_t hash(const WGPURenderPipelineDescriptor &desc) { hash_combine(hash, desc.fragment->targets[i].blend->alpha.operation); hash_combine(hash, desc.fragment->targets[i].blend->alpha.srcFactor); hash_combine(hash, desc.fragment->targets[i].blend->alpha.dstFactor); - } else { - hash_combine(hash, 0); } hash_combine(hash, desc.fragment->targets[i].writeMask); } @@ -335,7 +332,7 @@ void CCWGPUPipelineState::prepare(const ccstd::set &setInUse) { .dstFactor = toWGPUBlendFactor(alphaBO == BlendOp::MAX ? BlendFactor::ONE : _blendState.targets[targetIndex].blendDstAlpha), }; // only textureSampleType with float can be blended. - colorTargetStates[i].blend = textureSampleTypeTrait(colors[i].format) == WGPUTextureSampleType_Float ? &blendState[i] : nullptr; + colorTargetStates[i].blend = (_blendState.targets[targetIndex].blend && (textureSampleTypeTrait(colors[i].format) == WGPUTextureSampleType_Float)) ? &blendState[i] : nullptr; colorTargetStates[i].writeMask = toWGPUColorWriteMask(_blendState.targets[targetIndex].blendColorMask); if (targetIndex < _blendState.targets.size() - 1) { ++targetIndex; diff --git a/native/cocos/renderer/gfx-wgpu/WGPUShader.cpp b/native/cocos/renderer/gfx-wgpu/WGPUShader.cpp index 43d7cf09c02..596d80d45bb 100644 --- a/native/cocos/renderer/gfx-wgpu/WGPUShader.cpp +++ b/native/cocos/renderer/gfx-wgpu/WGPUShader.cpp @@ -28,8 +28,8 @@ #include "WGPUDevice.h" #include "WGPUObject.h" #include "WGPUUtils.h" -#define USE_NATRIVE_SPIRV 0 -#if USE_NATRIVE_SPIRV +#define USE_NATIVE_SPIRV 0 +#if USE_NATIVE_SPIRV #include "gfx-base/SPIRVUtils.h" #ifndef SPIRV_CROSS_EXCEPTIONS_TO_ASSERTIONS #define SPIRV_CROSS_EXCEPTIONS_TO_ASSERTIONS @@ -89,7 +89,7 @@ void CCWGPUShader::initialize(const ShaderInfo &info, const std::vectorwgpuTexture = wgpuDeviceCreateTexture(CCWGPUDevice::getInstance()->gpuDeviceObject()->wgpuDevice, &descriptor); CCWGPUDevice::getInstance()->getMemoryStatus().textureSize += _size; diff --git a/native/cocos/renderer/gfx-wgpu/WGPUUtils.cpp b/native/cocos/renderer/gfx-wgpu/WGPUUtils.cpp index 42b888b61e5..4c410183104 100644 --- a/native/cocos/renderer/gfx-wgpu/WGPUUtils.cpp +++ b/native/cocos/renderer/gfx-wgpu/WGPUUtils.cpp @@ -1,9 +1,11 @@ #include "WGPUUtils.h" +#include "WGPUCommandBuffer.h" #include "WGPUDescriptorSet.h" #include "WGPUDescriptorSetLayout.h" #include "WGPUDevice.h" #include "WGPUObject.h" #include "WGPUPipelineLayout.h" +#include "WGPUTexture.h" namespace cc::gfx { @@ -46,4 +48,256 @@ void createPipelineLayoutFallback(const ccstd::vector& descripto } ccPipelineLayout->_hash = hash; } + +namespace { +struct MipmapPassData { + WGPUShaderModule vertShader = wgpuDefaultHandle; + WGPUShaderModule fragShader = wgpuDefaultHandle; + WGPUSampler sampler = wgpuDefaultHandle; + WGPUBindGroupLayout bindGroupLayout = wgpuDefaultHandle; + WGPUPipelineLayout pipelineLayout = wgpuDefaultHandle; + WGPURenderPipeline pipeline = wgpuDefaultHandle; +}; + +// no need to release +thread_local MipmapPassData mipmapData; +} // namespace + +void genMipMap(Texture* texture, uint8_t fromLevel, uint8_t levelCount, uint32_t baseLayer, CommandBuffer* cmdBuff) { + auto wgpuDevice = CCWGPUDevice::getInstance()->gpuDeviceObject()->wgpuDevice; + auto* ccTexture = static_cast(texture); + auto format = toWGPUTextureFormat(ccTexture->getFormat()); + auto dimension = toWGPUTextureDimension(ccTexture->getTextureType()); + auto* wgpuTexture = ccTexture->gpuTextureObject()->wgpuTexture; + + if (!mipmapData.vertShader) { + // WGPUBufferDescriptor bufferDesc; + // bufferDesc.usage = WGPUBufferUsage_Vertex; + // bufferDesc.size = 120; + // bufferDesc.mappedAtCreation = true; + // mipmapData.vertexBuffer = wgpuDeviceCreateBuffer(wgpuDevice, &bufferDesc); + + // auto* mappedBuffer = wgpuBufferGetMappedRange(mipmapData.vertexBuffer, 0, 120); + // memcpy(mappedBuffer, quadVert, 120); + // wgpuBufferUnmap(mipmapData.vertexBuffer); + + // https://github.com/austinEng/webgpu-samples/blob/main/src/shaders/fullscreenTexturedQuad.wgsl + const char* textureQuadVert = R"( +struct VertexOutput { + @builtin(position) Position : vec4, + @location(0) fragUV : vec2, +} + +@vertex +fn vert_main(@builtin(vertex_index) VertexIndex : u32) -> VertexOutput { + var pos = array, 6>( + vec2( 1.0, 1.0), + vec2( 1.0, -1.0), + vec2(-1.0, -1.0), + vec2( 1.0, 1.0), + vec2(-1.0, -1.0), + vec2(-1.0, 1.0) + ); + + var uv = array, 6>( + vec2(1.0, 0.0), + vec2(1.0, 1.0), + vec2(0.0, 1.0), + vec2(1.0, 0.0), + vec2(0.0, 1.0), + vec2(0.0, 0.0) + ); + + var output : VertexOutput; + output.Position = vec4(pos[VertexIndex], 0.0, 1.0); + output.fragUV = uv[VertexIndex]; + return output; +} + )"; + + const char* textureQuadFrag = R"( +@group(0) @binding(0) var mySampler : sampler; +@group(0) @binding(1) var myTexture : texture_2d; + +@fragment +fn frag_main(@location(0) fragUV : vec2) -> @location(0) vec4 { + return textureSample(myTexture, mySampler, fragUV); +} + )"; + + WGPUSamplerDescriptor samplerDesc; + samplerDesc.label = "filterSampler"; + samplerDesc.addressModeU = WGPUAddressMode_MirrorRepeat; + samplerDesc.addressModeV = WGPUAddressMode_MirrorRepeat; + samplerDesc.addressModeW = WGPUAddressMode_MirrorRepeat; + samplerDesc.magFilter = WGPUFilterMode_Linear; + samplerDesc.minFilter = WGPUFilterMode_Linear; + samplerDesc.mipmapFilter = WGPUFilterMode_Linear; + samplerDesc.lodMinClamp = 0.0; + samplerDesc.lodMaxClamp = 32.0; + samplerDesc.compare = WGPUCompareFunction_Undefined; + samplerDesc.maxAnisotropy = 1; + mipmapData.sampler = wgpuDeviceCreateSampler(wgpuDevice, &samplerDesc); + + WGPUShaderModuleWGSLDescriptor wgslShaderDescVert; + wgslShaderDescVert.source = textureQuadVert; + wgslShaderDescVert.chain.sType = WGPUSType_ShaderModuleWGSLDescriptor; + WGPUShaderModuleDescriptor shaderDescVert; + shaderDescVert.nextInChain = reinterpret_cast(&wgslShaderDescVert); + shaderDescVert.label = "textureQuadVert"; + mipmapData.vertShader = wgpuDeviceCreateShaderModule(wgpuDevice, &shaderDescVert); + + WGPUShaderModuleWGSLDescriptor wgslShaderDescFrag; + wgslShaderDescFrag.source = textureQuadFrag; + wgslShaderDescFrag.chain.sType = WGPUSType_ShaderModuleWGSLDescriptor; + WGPUShaderModuleDescriptor shaderDescFrag; + shaderDescFrag.nextInChain = reinterpret_cast(&wgslShaderDescFrag); + shaderDescFrag.label = "textureQuadFrag"; + mipmapData.fragShader = wgpuDeviceCreateShaderModule(wgpuDevice, &shaderDescFrag); + + WGPUBindGroupLayoutEntry samplerEntry; + samplerEntry.binding = 0; + samplerEntry.visibility = WGPUShaderStage_Fragment; + samplerEntry.sampler.type = WGPUSamplerBindingType_Filtering; + samplerEntry.buffer.type = WGPUBufferBindingType_Undefined; + samplerEntry.texture.sampleType = WGPUTextureSampleType_Undefined; + samplerEntry.storageTexture.access = WGPUStorageTextureAccess_Undefined; + + WGPUBindGroupLayoutEntry textureEntry; + textureEntry.binding = 1; + textureEntry.visibility = WGPUShaderStage_Fragment; + textureEntry.texture.sampleType = textureSampleTypeTrait(ccTexture->getFormat()); + textureEntry.texture.viewDimension = WGPUTextureViewDimension_2D; + textureEntry.texture.multisampled = false; + textureEntry.buffer.type = WGPUBufferBindingType_Undefined; + textureEntry.sampler.type = WGPUSamplerBindingType_Undefined; + textureEntry.storageTexture.access = WGPUStorageTextureAccess_Undefined; + WGPUBindGroupLayoutEntry entries[2] = {samplerEntry, textureEntry}; + + WGPUBindGroupLayoutDescriptor bgLayoutDesc; + bgLayoutDesc.label = "fullscreenTexturedQuadBGLayout"; + bgLayoutDesc.entryCount = 2; + bgLayoutDesc.entries = entries; + mipmapData.bindGroupLayout = wgpuDeviceCreateBindGroupLayout(wgpuDevice, &bgLayoutDesc); + + WGPUPipelineLayoutDescriptor pipelineLayoutDesc; + pipelineLayoutDesc.label = "fullscreenTexturedQuadPipelineLayout"; + pipelineLayoutDesc.bindGroupLayoutCount = 1; + pipelineLayoutDesc.bindGroupLayouts = &mipmapData.bindGroupLayout; + mipmapData.pipelineLayout = wgpuDeviceCreatePipelineLayout(wgpuDevice, &pipelineLayoutDesc); + + WGPUVertexState vertexState; + vertexState.module = mipmapData.vertShader; + vertexState.entryPoint = "vert_main"; + + WGPUPrimitiveState primitiveState; + primitiveState.topology = WGPUPrimitiveTopology_TriangleList; + primitiveState.stripIndexFormat = WGPUIndexFormat_Undefined; + primitiveState.frontFace = WGPUFrontFace_CCW; + primitiveState.cullMode = WGPUCullMode_None; + + WGPUColorTargetState colorState; + colorState.format = format; + colorState.writeMask = WGPUColorWriteMask_All; + + WGPUFragmentState fragState; + fragState.module = mipmapData.fragShader; + fragState.entryPoint = "frag_main"; + fragState.targetCount = 1; + fragState.targets = &colorState; + + WGPUMultisampleState multisample; + multisample.count = 1; + multisample.alphaToCoverageEnabled = false; + multisample.mask = 0xFFFFFFFF; + + WGPURenderPipelineDescriptor pipelineDesc; + pipelineDesc.label = "fullscreenTexturedQuadPipeline"; + pipelineDesc.layout = mipmapData.pipelineLayout; + pipelineDesc.vertex = vertexState; + pipelineDesc.primitive = primitiveState; + pipelineDesc.fragment = &fragState; + pipelineDesc.depthStencil = nullptr; + pipelineDesc.multisample = multisample; + mipmapData.pipeline = wgpuDeviceCreateRenderPipeline(wgpuDevice, &pipelineDesc); + } + + WGPUTextureViewDescriptor desc; + desc.format = format; + desc.dimension = WGPUTextureViewDimension_2D; + desc.baseMipLevel = fromLevel; + desc.mipLevelCount = 1; + desc.baseArrayLayer = baseLayer; + desc.arrayLayerCount = 1; + desc.aspect = WGPUTextureAspect_All; + + CC_ASSERT(i > 0); + auto cmdBuffCommandEncoder = static_cast(cmdBuff)->gpuCommandBufferObject()->wgpuCommandEncoder; + auto commandEncoder = cmdBuffCommandEncoder; + if (!cmdBuffCommandEncoder) { + commandEncoder = wgpuDeviceCreateCommandEncoder(wgpuDevice, nullptr); + } + + for (uint8_t i = fromLevel; i < fromLevel + levelCount; ++i) { + desc.baseMipLevel = i - 1; + auto srcView = wgpuTextureCreateView(wgpuTexture, &desc); + desc.baseMipLevel = i; + desc.baseArrayLayer = baseLayer; + desc.arrayLayerCount = 1; + auto dstView = wgpuTextureCreateView(wgpuTexture, &desc); + + WGPUBindGroupEntry entries[2]; + entries[0].nextInChain = nullptr; + entries[0].binding = 0; + entries[0].sampler = mipmapData.sampler; + entries[0].buffer = wgpuDefaultHandle; + entries[0].textureView = wgpuDefaultHandle; + + entries[1].nextInChain = nullptr; + entries[1].binding = 1; + entries[1].textureView = srcView; + entries[1].buffer = wgpuDefaultHandle; + entries[1].sampler = wgpuDefaultHandle; + + WGPUBindGroupDescriptor bindgroupDesc; + bindgroupDesc.layout = mipmapData.bindGroupLayout; + bindgroupDesc.entryCount = 2; + bindgroupDesc.entries = entries; + auto bindGroup = wgpuDeviceCreateBindGroup(wgpuDevice, &bindgroupDesc); + + WGPURenderPassColorAttachment colorAttachment; + colorAttachment.view = dstView; + colorAttachment.resolveTarget = wgpuDefaultHandle; + colorAttachment.loadOp = WGPULoadOp_Clear; + colorAttachment.storeOp = WGPUStoreOp_Store; + colorAttachment.clearValue = {0.88, 0.88, 0.88, 1.0}; + + WGPURenderPassDescriptor rpDesc; + rpDesc.nextInChain = nullptr; + rpDesc.label = nullptr; + rpDesc.colorAttachmentCount = 1; + rpDesc.colorAttachments = &colorAttachment; + rpDesc.depthStencilAttachment = nullptr; + rpDesc.occlusionQuerySet = nullptr; + rpDesc.timestampWriteCount = 0; + rpDesc.timestampWrites = nullptr; + auto renderPassEncoder = wgpuCommandEncoderBeginRenderPass(commandEncoder, &rpDesc); + + wgpuRenderPassEncoderSetPipeline(renderPassEncoder, mipmapData.pipeline); + wgpuRenderPassEncoderSetBindGroup(renderPassEncoder, 0, bindGroup, 0, nullptr); + wgpuRenderPassEncoderDraw(renderPassEncoder, 6, 1, 0, 0); + wgpuRenderPassEncoderEnd(renderPassEncoder); + wgpuRenderPassEncoderRelease(renderPassEncoder); + wgpuBindGroupRelease(bindGroup); + wgpuTextureViewRelease(srcView); + wgpuTextureViewRelease(dstView); + } + + if (!cmdBuffCommandEncoder) { + auto commandBuffer = wgpuCommandEncoderFinish(commandEncoder, nullptr); + wgpuQueueSubmit(CCWGPUDevice::getInstance()->gpuDeviceObject()->wgpuQueue, 1, &commandBuffer); + wgpuCommandEncoderRelease(commandEncoder); + wgpuCommandBufferRelease(commandBuffer); + } +} } // namespace cc::gfx diff --git a/native/cocos/renderer/gfx-wgpu/WGPUUtils.h b/native/cocos/renderer/gfx-wgpu/WGPUUtils.h index 9a73bb79461..3a92bd572be 100644 --- a/native/cocos/renderer/gfx-wgpu/WGPUUtils.h +++ b/native/cocos/renderer/gfx-wgpu/WGPUUtils.h @@ -589,7 +589,7 @@ static WGPUFlags toWGPUColorWriteMask(ColorMask mask) { } static ccstd::string getAdapterTypeName(WGPUAdapterType type) { - switch(type) { + switch (type) { case WGPUAdapterType_DiscreteGPU: return "WGPUAdapterType_DiscreteGPU"; case WGPUAdapterType_IntegratedGPU: @@ -597,14 +597,14 @@ static ccstd::string getAdapterTypeName(WGPUAdapterType type) { case WGPUAdapterType_CPU: return "WGPUAdapterType_CPU"; case WGPUAdapterType_Unknown: - return "WGPUAdapterType_Unknown"; + return "WGPUAdapterType_Unknown"; default: return "unknown adapter by cc.gfx!"; } } static ccstd::string getBackendTypeName(WGPUBackendType type) { - switch(type) { + switch (type) { case WGPUBackendType_Null: return "WGPUBackendType_Null"; case WGPUBackendType_WebGPU: @@ -626,6 +626,11 @@ static ccstd::string getBackendTypeName(WGPUBackendType type) { } } +class Texture; +class CommandBuffer; +// fromLevel and toLevel is included. +void genMipMap(Texture* texture, uint8_t fromLevel, uint8_t levelCount, uint32_t baseLayer, CommandBuffer* cmdBuffer); + class DescriptorSet; class PipelineLayout; // descriptor set layout in descriptor set not consistent with the binding in pipeline layout. From 28eb19c4ee2394815a4b63797bee04e906941cfe Mon Sep 17 00:00:00 2001 From: Cocos Robot <48829427+cocos-robot@users.noreply.github.com> Date: Wed, 19 Oct 2022 15:37:16 +0800 Subject: [PATCH 044/829] [ci skip][AUTO]: Automated code generating update: 96374d536ca444753a597ef41f51115b3875f040 (#13088) (#13089) Co-authored-by: cocos-robot --- native/cocos/bindings/auto/jsb_gfx_auto.cpp | 93 --------------------- native/cocos/bindings/auto/jsb_gfx_auto.h | 5 -- 2 files changed, 98 deletions(-) diff --git a/native/cocos/bindings/auto/jsb_gfx_auto.cpp b/native/cocos/bindings/auto/jsb_gfx_auto.cpp index 714d7da3e92..7a04e03f684 100644 --- a/native/cocos/bindings/auto/jsb_gfx_auto.cpp +++ b/native/cocos/bindings/auto/jsb_gfx_auto.cpp @@ -29374,98 +29374,6 @@ bool js_register_cc_gfx_Device(se::Object* obj) { } -se::Class* __jsb_cc_gfx_DefaultResource_class = nullptr; -se::Object* __jsb_cc_gfx_DefaultResource_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_gfx_DefaultResource) - -// js_ctor -static bool js_new_cc_gfx_DefaultResource(se::State& s) // NOLINT(readability-identifier-naming) -{ - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - - if (argc != 1) { - SE_REPORT_ERROR("js_new_cc_gfx_DefaultResource: wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } - - cc::gfx::Device *arg1 = (cc::gfx::Device *) NULL ; - cc::gfx::DefaultResource *result; - // %typemap(in) SWIGTYPE* - ok &= sevalue_to_native(args[0], &arg1, s.thisObject()); - SE_PRECONDITION2(ok, false, "new_DefaultResource,1,SWIGTYPE_p_cc__gfx__Device"); - result = (cc::gfx::DefaultResource *)new cc::gfx::DefaultResource(arg1); - - - auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); - s.thisObject()->setPrivateObject(ptr); - return true; -} -SE_BIND_CTOR(js_new_cc_gfx_DefaultResource, __jsb_cc_gfx_DefaultResource_class, js_delete_cc_gfx_DefaultResource) - -static bool js_delete_cc_gfx_DefaultResource(se::State& s) -{ - // js_dtoroverride - return true; -} -SE_BIND_FINALIZE_FUNC(js_delete_cc_gfx_DefaultResource) - -static bool js_cc_gfx_DefaultResource_getTexture(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::gfx::DefaultResource *arg1 = (cc::gfx::DefaultResource *) NULL ; - cc::gfx::TextureType arg2 ; - int32_t temp2 ; - cc::gfx::Texture *result = 0 ; - - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) enum SWIGTYPE (int32_t temp2) - ok &= sevalue_to_native(args[0], &temp2); - SE_PRECONDITION2(ok, false, "DefaultResource_getTexture,2,SWIGTYPE_cc__gfx__TextureType"); - arg2 = (cc::gfx::TextureType)temp2; - result = (cc::gfx::Texture *)((cc::gfx::DefaultResource const *)arg1)->getTexture(arg2); - // %typemap(out) SWIGTYPE* - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "DefaultResource_getTexture, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - - - return true; -} -SE_BIND_FUNC(js_cc_gfx_DefaultResource_getTexture) - -bool js_register_cc_gfx_DefaultResource(se::Object* obj) { - auto* cls = se::Class::create("DefaultResource", obj, nullptr, _SE(js_new_cc_gfx_DefaultResource)); - - - cls->defineFunction("getTexture", _SE(js_cc_gfx_DefaultResource_getTexture)); - - - - - cls->defineFinalizeFunction(_SE(js_delete_cc_gfx_DefaultResource)); - - - cls->install(); - JSBClassType::registerClass(cls); - - __jsb_cc_gfx_DefaultResource_proto = cls->getProto(); - __jsb_cc_gfx_DefaultResource_class = cls; - se::ScriptEngine::getInstance()->clearException(); - return true; -} - - se::Class* __jsb_cc_gfx_DeviceManager_class = nullptr; se::Object* __jsb_cc_gfx_DeviceManager_proto = nullptr; SE_DECLARE_FINALIZE_FUNC(js_delete_cc_gfx_DeviceManager) @@ -29727,7 +29635,6 @@ bool register_all_gfx(se::Object* obj) { js_register_cc_gfx_TextureBarrier(ns); js_register_cc_gfx_BufferBarrier(ns); js_register_cc_gfx_Device(ns); - js_register_cc_gfx_DefaultResource(ns); js_register_cc_gfx_DeviceManager(ns); /* Register global variables & global functions */ diff --git a/native/cocos/bindings/auto/jsb_gfx_auto.h b/native/cocos/bindings/auto/jsb_gfx_auto.h index ec05b29a061..bff9f3932d5 100644 --- a/native/cocos/bindings/auto/jsb_gfx_auto.h +++ b/native/cocos/bindings/auto/jsb_gfx_auto.h @@ -694,11 +694,6 @@ extern se::Object *__jsb_cc_gfx_Device_proto; // NOLINT extern se::Class * __jsb_cc_gfx_Device_class; // NOLINT -JSB_REGISTER_OBJECT_TYPE(cc::gfx::DefaultResource); -extern se::Object *__jsb_cc_gfx_DefaultResource_proto; // NOLINT -extern se::Class * __jsb_cc_gfx_DefaultResource_class; // NOLINT - - JSB_REGISTER_OBJECT_TYPE(cc::gfx::DeviceManager); extern se::Object *__jsb_cc_gfx_DeviceManager_proto; // NOLINT extern se::Class * __jsb_cc_gfx_DeviceManager_class; // NOLINT From a9d4e13f85b23e376dd47d7a4aff224f6686d368 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=90=89=E6=9E=97?= <798080536@qq.com> Date: Wed, 19 Oct 2022 22:34:21 +0800 Subject: [PATCH 045/829] Light probe merge (#13093) * add light probe --- cc.config.json | 5 +- cocos/3d/framework/mesh-renderer.ts | 56 +- .../skinned-mesh-renderer.ts | 1 + cocos/core/data/deserialize.ts | 5 +- cocos/core/math/vec3.ts | 18 +- cocos/gi/light-probe/auto-placement.ts | 88 + cocos/gi/light-probe/delaunay.jsb.ts | 52 + cocos/gi/light-probe/delaunay.ts | 542 ++++ cocos/gi/light-probe/index.ts | 30 + cocos/gi/light-probe/light-probe-group.ts | 210 ++ cocos/gi/light-probe/light-probe.jsb.ts | 35 + cocos/gi/light-probe/light-probe.ts | 351 ++ cocos/gi/light-probe/polynomial-solver.ts | 91 + cocos/gi/light-probe/sh.ts | 327 ++ cocos/render-scene/scene/model.ts | 146 +- cocos/rendering/define.ts | 32 + cocos/rendering/pipeline-scene-data.ts | 2 + cocos/scene-graph/node-enum.ts | 25 + cocos/scene-graph/node-event.ts | 26 + cocos/scene-graph/node.jsb.ts | 3 + cocos/scene-graph/node.ts | 17 +- cocos/scene-graph/scene-globals.jsb.ts | 43 + cocos/scene-graph/scene-globals.ts | 203 ++ .../builtin/internal/sprite-texture.chunk | 2 +- .../builtin/uniforms/cc-light-map.chunk | 2 +- .../chunks/builtin/uniforms/cc-morph.chunk | 6 +- .../chunks/builtin/uniforms/cc-sh.chunk | 12 + .../chunks/builtin/uniforms/cc-sh.chunk.meta | 9 + .../chunks/builtin/uniforms/cc-skinning.chunk | 4 +- editor/assets/chunks/common/lighting/sh.chunk | 23 + .../chunks/common/lighting/sh.chunk.meta | 9 + .../chunks/legacy/shading-standard-base.chunk | 11 +- .../model-functions/standard.chunk | 11 +- .../light/Light Probe Group.prefab | 103 + .../light/Light Probe Group.prefab.meta | 13 + .../builtin-reflection-deferred.effect | 2 +- editor/assets/effects/builtin-spine.effect | 2 +- .../effects/builtin-sprite-renderer.effect | 2 +- editor/assets/effects/builtin-sprite.effect | 2 +- editor/engine-features/render-config.json | 7 + editor/i18n/en/components.js | 6 +- editor/i18n/en/localization.js | 20 + editor/i18n/zh/components.js | 5 + editor/i18n/zh/localization.js | 20 + editor/inspector/components-footer.js | 5 + editor/inspector/components/class.js | 2 +- .../components/light-probe-group-footer.js | 117 + editor/inspector/contributions/node.js | 4 + editor/inspector/contributions/utils.js | 2 + editor/inspector/utils/prop.js | 2 +- exports/light-probe.ts | 1 + native/CMakeLists.txt | 16 + native/cocos/bindings/auto/jsb_gi_auto.cpp | 2861 +++++++++++++++++ native/cocos/bindings/auto/jsb_gi_auto.h | 95 + .../cocos/bindings/auto/jsb_pipeline_auto.cpp | 154 + .../cocos/bindings/auto/jsb_pipeline_auto.h | 9 + native/cocos/bindings/auto/jsb_scene_auto.cpp | 396 +++ native/cocos/bindings/auto/jsb_scene_auto.h | 1 + .../bindings/manual/jsb_module_register.cpp | 2 + .../bindings/manual/jsb_scene_manual.cpp | 20 + native/cocos/core/builtin/DebugInfos.cpp | 1 + native/cocos/core/event/EventTypesToJS.cpp | 36 +- native/cocos/core/event/EventTypesToJS.h | 2 + native/cocos/core/scene-graph/Node.cpp | 1 + native/cocos/core/scene-graph/Node.h | 10 + native/cocos/core/scene-graph/NodeEnum.h | 24 + native/cocos/core/scene-graph/NodeEvent.cpp | 25 +- native/cocos/core/scene-graph/NodeEvent.h | 3 + .../cocos/core/scene-graph/SceneGlobals.cpp | 34 +- native/cocos/core/scene-graph/SceneGlobals.h | 7 + native/cocos/gi/light-probe/AutoPlacement.cpp | 79 + native/cocos/gi/light-probe/AutoPlacement.h | 59 + native/cocos/gi/light-probe/Delaunay.cpp | 377 +++ native/cocos/gi/light-probe/Delaunay.h | 166 + native/cocos/gi/light-probe/LightProbe.cpp | 207 ++ native/cocos/gi/light-probe/LightProbe.h | 210 ++ .../cocos/gi/light-probe/PolynomialSolver.cpp | 94 + .../cocos/gi/light-probe/PolynomialSolver.h | 48 + native/cocos/gi/light-probe/SH.cpp | 247 ++ native/cocos/gi/light-probe/SH.h | 138 + native/cocos/renderer/pipeline/Define.cpp | 24 + native/cocos/renderer/pipeline/Define.h | 17 + .../pipeline/GlobalDescriptorSetManager.cpp | 2 + .../renderer/pipeline/PipelineSceneData.cpp | 3 + .../renderer/pipeline/PipelineSceneData.h | 7 + native/cocos/scene/Model.cpp | 129 +- native/cocos/scene/Model.h | 22 + native/tools/swig-config/gi.i | 110 + native/tools/swig-config/pipeline.i | 1 + native/tools/swig-config/scene.i | 5 + native/tools/swig-config/swig-config.js | 1 + native/tools/tojs/genbindings.py | 3 +- native/tools/tojs/gi.ini | 77 + native/tools/tojs/pipeline.ini | 2 +- native/tools/tojs/scene.ini | 8 +- .../tests/stats-query/cc.config.json | 4 +- tests/general/global-variable-cc.test.ts | 2 + tests/general/sealed-global-variables.json | 15 +- 98 files changed, 8363 insertions(+), 103 deletions(-) create mode 100644 cocos/gi/light-probe/auto-placement.ts create mode 100644 cocos/gi/light-probe/delaunay.jsb.ts create mode 100644 cocos/gi/light-probe/delaunay.ts create mode 100644 cocos/gi/light-probe/index.ts create mode 100644 cocos/gi/light-probe/light-probe-group.ts create mode 100644 cocos/gi/light-probe/light-probe.jsb.ts create mode 100644 cocos/gi/light-probe/light-probe.ts create mode 100644 cocos/gi/light-probe/polynomial-solver.ts create mode 100644 cocos/gi/light-probe/sh.ts create mode 100644 editor/assets/chunks/builtin/uniforms/cc-sh.chunk create mode 100644 editor/assets/chunks/builtin/uniforms/cc-sh.chunk.meta create mode 100644 editor/assets/chunks/common/lighting/sh.chunk create mode 100644 editor/assets/chunks/common/lighting/sh.chunk.meta create mode 100644 editor/assets/default_prefab/light/Light Probe Group.prefab create mode 100644 editor/assets/default_prefab/light/Light Probe Group.prefab.meta create mode 100644 editor/inspector/components-footer.js create mode 100644 editor/inspector/components/light-probe-group-footer.js create mode 100644 exports/light-probe.ts create mode 100644 native/cocos/bindings/auto/jsb_gi_auto.cpp create mode 100644 native/cocos/bindings/auto/jsb_gi_auto.h create mode 100644 native/cocos/gi/light-probe/AutoPlacement.cpp create mode 100644 native/cocos/gi/light-probe/AutoPlacement.h create mode 100644 native/cocos/gi/light-probe/Delaunay.cpp create mode 100644 native/cocos/gi/light-probe/Delaunay.h create mode 100644 native/cocos/gi/light-probe/LightProbe.cpp create mode 100644 native/cocos/gi/light-probe/LightProbe.h create mode 100644 native/cocos/gi/light-probe/PolynomialSolver.cpp create mode 100644 native/cocos/gi/light-probe/PolynomialSolver.h create mode 100644 native/cocos/gi/light-probe/SH.cpp create mode 100644 native/cocos/gi/light-probe/SH.h create mode 100644 native/tools/swig-config/gi.i create mode 100644 native/tools/tojs/gi.ini diff --git a/cc.config.json b/cc.config.json index b6d7f250d0e..0b4acf4c0d4 100644 --- a/cc.config.json +++ b/cc.config.json @@ -131,6 +131,7 @@ "modules": ["audio"] }, "video": { + "light-probe": { "modules": [ "light-probe" ] }, "modules": ["video"] }, "terrain": { @@ -245,7 +246,9 @@ "cocos/3d/models/morph-model.ts": "cocos/3d/models/morph-model.jsb.ts", "cocos/3d/models/skinning-model.ts": "cocos/3d/models/skinning-model.jsb.ts", "cocos/3d/models/baked-skinning-model.ts": "cocos/3d/models/baked-skinning-model.jsb.ts", - "cocos/3d/misc/create-mesh.ts": "cocos/3d/misc/create-mesh.jsb.ts" + "cocos/3d/misc/create-mesh.ts": "cocos/3d/misc/create-mesh.jsb.ts", + "cocos/gi/light-probe/light-probe.ts": "cocos/gi/light-probe/light-probe.jsb.ts", + "cocos/gi/light-probe/delaunay.ts": "cocos/gi/light-probe/delaunay.jsb.ts" } }, { diff --git a/cocos/3d/framework/mesh-renderer.ts b/cocos/3d/framework/mesh-renderer.ts index 7c65415a75f..777f81892b3 100644 --- a/cocos/3d/framework/mesh-renderer.ts +++ b/cocos/3d/framework/mesh-renderer.ts @@ -33,15 +33,16 @@ import { Vec4 } from '../../core/math'; import { scene } from '../../render-scene'; import { MorphModel } from '../models/morph-model'; import { Root } from '../../root'; -import { TransformBit } from '../../scene-graph/node-enum'; +import { MobilityMode, TransformBit } from '../../scene-graph/node-enum'; import { Enum } from '../../core/value-types'; import { builtinResMgr } from '../../asset/asset-manager'; import { ModelRenderer } from '../../misc/model-renderer'; import { MorphRenderingInstance } from '../assets/morph-rendering'; import { legacyCC } from '../../core/global-exports'; import { assertIsTrue } from '../../core/data/utils/asserts'; -import { CCFloat } from '../../core/data/utils/attribute'; +import { CCBoolean, CCFloat } from '../../core/data/utils/attribute'; import { property } from '../../core/data/class-decorator'; +import { NodeEventType } from '../../scene-graph/node-event'; /** * @en Shadow projection mode. @@ -181,6 +182,8 @@ export class MeshRenderer extends ModelRenderer { @serializable @editable @disallowAnimation + // eslint-disable-next-line func-names + @visible(function (this: MeshRenderer) { return !!(this.node && this.node.mobility !== MobilityMode.Movable); }) public lightmapSettings = new ModelLightmapSettings(); @serializable @@ -198,6 +201,9 @@ export class MeshRenderer extends ModelRenderer { @serializable protected _shadowNormalBias = 0; + @serializable + protected _useLightProbe = false; + // @serializable private _subMeshShapesWeights: number[][] = []; @@ -207,7 +213,7 @@ export class MeshRenderer extends ModelRenderer { */ @type(CCFloat) @tooltip('i18n:model.shadow_bias') - @property({ group: { name: 'DynamicShadowSettings', displayOrder: 0 } }) + @property({ group: { id: 'DynamicShadow', name: 'DynamicShadowSettings', displayOrder: 0 } }) @disallowAnimation get shadowBias () { return this._shadowBias; @@ -225,7 +231,7 @@ export class MeshRenderer extends ModelRenderer { */ @type(CCFloat) @tooltip('i18n:model.shadow_normal_bias') - @property({ group: { name: 'DynamicShadowSettings', displayOrder: 1 } }) + @property({ group: { id: 'DynamicShadow', name: 'DynamicShadowSettings', displayOrder: 1 } }) @disallowAnimation get shadowNormalBias () { return this._shadowNormalBias; @@ -243,7 +249,7 @@ export class MeshRenderer extends ModelRenderer { */ @type(ModelShadowCastingMode) @tooltip('i18n:model.shadow_casting_model') - @property({ group: { name: 'DynamicShadowSettings', displayOrder: 2 } }) + @property({ group: { id: 'DynamicShadow', name: 'DynamicShadowSettings', displayOrder: 2 } }) @disallowAnimation get shadowCastingMode () { return this._shadowCastingMode; @@ -260,7 +266,7 @@ export class MeshRenderer extends ModelRenderer { */ @type(ModelShadowReceivingMode) @tooltip('i18n:model.shadow_receiving_model') - @property({ group: { name: 'DynamicShadowSettings', displayOrder: 3 } }) + @property({ group: { id: 'DynamicShadow', name: 'DynamicShadowSettings', displayOrder: 3 } }) @disallowAnimation get receiveShadow () { return this._shadowReceivingMode; @@ -271,6 +277,23 @@ export class MeshRenderer extends ModelRenderer { this._updateReceiveShadow(); } + /** + * @en Whether to use light probe which provides indirect light to dynamic objects. + * @zh 模型是否使用光照探针,光照探针为动态物体提供间接光。 + */ + @type(CCBoolean) + @property({ group: { id: 'Probe', name: 'ProbeSettings', displayOrder: 0 } }) + // eslint-disable-next-line func-names + @visible(function (this: MeshRenderer) { return !!(this.node && this.node.mobility === MobilityMode.Movable); }) + get useLightProbe () { + return this._useLightProbe; + } + + set useLightProbe (val) { + this._useLightProbe = val; + this._updateUseLightProbe(); + } + /** * @en Gets or sets the mesh of the model. * Note, when set, all morph targets' weights would be reset to zero. @@ -296,6 +319,7 @@ export class MeshRenderer extends ModelRenderer { } this._updateCastShadow(); this._updateReceiveShadow(); + this._updateUseLightProbe(); } /** @@ -352,6 +376,7 @@ export class MeshRenderer extends ModelRenderer { this._updateReceiveShadow(); this._updateShadowBias(); this._updateShadowNormalBias(); + this._updateUseLightProbe(); } // Redo, Undo, Prefab restore, etc. @@ -364,10 +389,12 @@ export class MeshRenderer extends ModelRenderer { this._updateReceiveShadow(); this._updateShadowBias(); this._updateShadowNormalBias(); + this._updateUseLightProbe(); } public onEnable () { super.onEnable(); + this.node.on(NodeEventType.MOBILITY_CHANGED, this.onMobilityChanged, this); if (!this._model) { this._updateModels(); } @@ -376,6 +403,7 @@ export class MeshRenderer extends ModelRenderer { this._updateShadowBias(); this._updateShadowNormalBias(); this._onUpdateLocalShadowBias(); + this._updateUseLightProbe(); this._attachToScene(); } @@ -383,6 +411,7 @@ export class MeshRenderer extends ModelRenderer { if (this._model) { this._detachFromScene(); } + this.node.off(NodeEventType.MOBILITY_CHANGED, this.onMobilityChanged, this); } public onDestroy () { @@ -525,6 +554,7 @@ export class MeshRenderer extends ModelRenderer { // Initialize lighting map before model initializing // because the lighting map will influence the model's shader this._model.initLightingmap(this.lightmapSettings.texture, this.lightmapSettings.uvParam); + this._updateUseLightProbe(); this._updateModelParams(); this._onUpdateLightingmap(); this._onUpdateLocalShadowBias(); @@ -680,6 +710,20 @@ export class MeshRenderer extends ModelRenderer { } } + protected onMobilityChanged () { + this._updateUseLightProbe(); + } + + protected _updateUseLightProbe () { + if (!this._model) { return; } + const node = this.node; + if (this._mesh && node && node.mobility === MobilityMode.Movable && this.useLightProbe) { + this._model.useLightProbe = true; + } else { + this._model.useLightProbe = false; + } + } + protected _isBatchingEnabled () { for (let i = 0; i < this._materials.length; ++i) { const mat = this._materials[i]; diff --git a/cocos/3d/skinned-mesh-renderer/skinned-mesh-renderer.ts b/cocos/3d/skinned-mesh-renderer/skinned-mesh-renderer.ts index 2a62d25cd6e..c194aaec80b 100644 --- a/cocos/3d/skinned-mesh-renderer/skinned-mesh-renderer.ts +++ b/cocos/3d/skinned-mesh-renderer/skinned-mesh-renderer.ts @@ -138,6 +138,7 @@ export class SkinnedMeshRenderer extends MeshRenderer { this._updateModels(); this._updateCastShadow(); this._updateReceiveShadow(); + this._updateUseLightProbe(); if (this.enabledInHierarchy) { this._attachToScene(); } diff --git a/cocos/core/data/deserialize.ts b/cocos/core/data/deserialize.ts index 8139c99b91a..bc96380fa27 100644 --- a/cocos/core/data/deserialize.ts +++ b/cocos/core/data/deserialize.ts @@ -747,10 +747,10 @@ function assignInstanceRef (data: IFileData, owner: any, key: string, value: Ins function genArrayParser (parser: ParseFunction): ParseFunction { return (data: IFileData, owner: any, key: string, value: T[]) => { - owner[key] = value; for (let i = 0; i < value.length; ++i) { parser(data, value, i as unknown as string, value[i]); } + owner[key] = value; }; } @@ -807,7 +807,6 @@ function parseDict (data: IFileData, owner: any, key: string, value: IDictData) function parseArray (data: IFileData, owner: any, key: string, value: IArrayData) { const array = value[ARRAY_ITEM_VALUES]; - owner[key] = array; for (let i = 0; i < array.length; ++i) { const subValue = array[i]; const type = value[i + 1] as DataTypeID; @@ -816,6 +815,8 @@ function parseArray (data: IFileData, owner: any, key: string, value: IArrayData op(data, array, i, subValue); } } + + owner[key] = array; } // function parseTypedArray (data: IFileData, owner: any, key: string, value: ITypedArrayData) { diff --git a/cocos/core/math/vec3.ts b/cocos/core/math/vec3.ts index e02b052f99f..6fafd8a672f 100644 --- a/cocos/core/math/vec3.ts +++ b/cocos/core/math/vec3.ts @@ -748,12 +748,9 @@ export class Vec3 extends ValueType { */ public equals (other: Vec3, epsilon = EPSILON) { return ( - Math.abs(this.x - other.x) - <= epsilon * Math.max(1.0, Math.abs(this.x), Math.abs(other.x)) - && Math.abs(this.y - other.y) - <= epsilon * Math.max(1.0, Math.abs(this.y), Math.abs(other.y)) - && Math.abs(this.z - other.z) - <= epsilon * Math.max(1.0, Math.abs(this.z), Math.abs(other.z)) + Math.abs(this.x - other.x) <= epsilon + && Math.abs(this.y - other.y) <= epsilon + && Math.abs(this.z - other.z) <= epsilon ); } @@ -768,12 +765,9 @@ export class Vec3 extends ValueType { */ public equals3f (x: number, y: number, z: number, epsilon = EPSILON) { return ( - Math.abs(this.x - x) - <= epsilon * Math.max(1.0, Math.abs(this.x), Math.abs(x)) - && Math.abs(this.y - y) - <= epsilon * Math.max(1.0, Math.abs(this.y), Math.abs(y)) - && Math.abs(this.z - z) - <= epsilon * Math.max(1.0, Math.abs(this.z), Math.abs(z)) + Math.abs(this.x - x) <= epsilon + && Math.abs(this.y - y) <= epsilon + && Math.abs(this.z - z) <= epsilon ); } diff --git a/cocos/gi/light-probe/auto-placement.ts b/cocos/gi/light-probe/auto-placement.ts new file mode 100644 index 00000000000..45c797b5086 --- /dev/null +++ b/cocos/gi/light-probe/auto-placement.ts @@ -0,0 +1,88 @@ +/* + Copyright (c) 2022 Xiamen Yaji Software Co., Ltd. + + https://www.cocos.com/ + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated engine source code (the "Software"), a limited, + worldwide, royalty-free, non-assignable, revocable and non-exclusive license + to use Cocos Creator solely to develop games on your target platforms. You shall + not use Cocos Creator software for developing other software or tools that's + used for developing games. You are not granted to publish, distribute, + sublicense, and/or sell copies of Cocos Creator. + + The software or tools in this License Agreement are licensed, not sold. + Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + */ + +import { Vec3 } from '../../core/math/vec3'; +import { Enum } from '../../core/value-types'; + +export const PlaceMethod = Enum({ + UNIFORM: 0, + ADAPTIVE: 1, +}); + +export interface PlacementInfo { + method: number; + nProbesX: number; + nProbesY: number; + nProbesZ: number; + minPos: Vec3; + maxPos: Vec3; +} + +export class AutoPlacement { + public static generate (info: PlacementInfo) { + switch (info.method) { + case PlaceMethod.UNIFORM: + return this.doGenerateUniform(info); + case PlaceMethod.ADAPTIVE: + return this.doGenerateAdaptive(info); + default: + return []; + } + } + + private static doGenerateUniform (info: PlacementInfo) { + if (info.nProbesX < 2 || info.nProbesY < 2 || info.nProbesZ < 2) { + return []; + } + + const probes: Vec3[] = []; + const position = new Vec3(0.0, 0.0, 0.0); + const gridSize = new Vec3( + (info.maxPos.x - info.minPos.x) / (info.nProbesX - 1), + (info.maxPos.y - info.minPos.y) / (info.nProbesY - 1), + (info.maxPos.z - info.minPos.z) / (info.nProbesZ - 1), + ); + + for (let x = 0; x < info.nProbesX; x++) { + position.x = x * gridSize.x + info.minPos.x; + + for (let y = 0; y < info.nProbesY; y++) { + position.y = y * gridSize.y + info.minPos.y; + + for (let z = 0; z < info.nProbesZ; z++) { + position.z = z * gridSize.z + info.minPos.z; + probes.push(new Vec3(position)); + } + } + } + + return probes; + } + + private static doGenerateAdaptive (info: PlacementInfo) { + // TODO + return this.doGenerateUniform(info); + } +} diff --git a/cocos/gi/light-probe/delaunay.jsb.ts b/cocos/gi/light-probe/delaunay.jsb.ts new file mode 100644 index 00000000000..16b66099b24 --- /dev/null +++ b/cocos/gi/light-probe/delaunay.jsb.ts @@ -0,0 +1,52 @@ +/* + Copyright (c) 2021 Xiamen Yaji Software Co., Ltd. + + https://www.cocos.com/ + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated engine source code (the "Software"), a limited, + worldwide, royalty-free, non-assignable, revocable and non-exclusive license + to use Cocos Creator solely to develop games on your target platforms. You shall + not use Cocos Creator software for developing other software or tools that's + used for developing games. You are not granted to publish, distribute, + sublicense, and/or sell copies of Cocos Creator. + + The software or tools in this License Agreement are licensed, not sold. + Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ +import { serializable } from 'cc.decorator'; +import { ccclass } from "../../core/data/class-decorator"; + +export const Vertex = jsb.Vertex; +const VertexProto = Vertex.prototype; +serializable(VertexProto, 'position'); +serializable(VertexProto, 'normal'); +serializable(VertexProto, 'coefficients'); +ccclass('cc.Vertex')(Vertex); + +export const CircumSphere = jsb.CircumSphere; +const CircumSphereProto = CircumSphere.prototype; +serializable(CircumSphereProto, 'center'); +serializable(CircumSphereProto, 'radiusSquared'); +ccclass('cc.CircumSphere')(CircumSphere); + +export const Tetrahedron = jsb.Tetrahedron; +const TetrahedronProto = Tetrahedron.prototype; +serializable(TetrahedronProto, 'invalid'); +serializable(TetrahedronProto, 'vertex0'); +serializable(TetrahedronProto, 'vertex1'); +serializable(TetrahedronProto, 'vertex2'); +serializable(TetrahedronProto, 'vertex3'); +serializable(TetrahedronProto, 'neighbours'); +serializable(TetrahedronProto, 'matrix'); +serializable(TetrahedronProto, 'offset'); +serializable(TetrahedronProto, 'sphere'); +ccclass('cc.Tetrahedron')(Tetrahedron); diff --git a/cocos/gi/light-probe/delaunay.ts b/cocos/gi/light-probe/delaunay.ts new file mode 100644 index 00000000000..d6fd5ef9bb1 --- /dev/null +++ b/cocos/gi/light-probe/delaunay.ts @@ -0,0 +1,542 @@ +/* + Copyright (c) 2022 Xiamen Yaji Software Co., Ltd. + + https://www.cocos.com/ + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated engine source code (the "Software"), a limited, + worldwide, royalty-free, non-assignable, revocable and non-exclusive license + to use Cocos Creator solely to develop games on your target platforms. You shall + not use Cocos Creator software for developing other software or tools that's + used for developing games. You are not granted to publish, distribute, + sublicense, and/or sell copies of Cocos Creator. + + The software or tools in this License Agreement are licensed, not sold. + Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + */ + +import { ccclass, serializable } from 'cc.decorator'; +import { Mat3 } from '../../core/math/mat3'; +import { EPSILON } from '../../core/math/utils'; +import { Vec3 } from '../../core/math/vec3'; +import { warnID } from '../../core/platform/debug'; + +@ccclass('cc.Vertex') +export class Vertex { + @serializable + public position = new Vec3(0, 0, 0); + @serializable + public normal = new Vec3(0, 0, 0); + @serializable + public coefficients: Vec3[] = []; + + public constructor (pos: Vec3) { + this.position.set(pos); + } +} + +class Edge { + @serializable + public tetrahedron = -1; // tetrahedron index this edge belongs to + @serializable + public index = -1; // index in triangle's three edges of an outer cell + @serializable + public vertex0 = -1; + @serializable + public vertex1 = -1; + + public constructor (tet: number, i: number, v0: number, v1: number) { + this.tetrahedron = tet; + this.index = i; + this.vertex0 = v0; + this.vertex1 = v1; + } + + public isSame (other: Edge) { + return ((this.vertex0 === other.vertex0 && this.vertex1 === other.vertex1) + || (this.vertex0 === other.vertex1 && this.vertex1 === other.vertex0)); + } +} + +class Triangle { + @serializable + public invalid = false; + @serializable + public isOuterFace = true; + @serializable + public tetrahedron = -1; // tetrahedron index this triangle belongs to + @serializable + public index = -1; // index in tetrahedron's four triangles + @serializable + public vertex0 = -1; + @serializable + public vertex1 = -1; + @serializable + public vertex2 = -1; + @serializable + public vertex3 = -1; // tetrahedron's last vertex index used to compute normal direction + + public constructor (tet: number, i: number, v0: number, v1: number, v2: number, v3: number) { + this.tetrahedron = tet; + this.index = i; + this.vertex0 = v0; + this.vertex1 = v1; + this.vertex2 = v2; + this.vertex3 = v3; + } + + public isSame (other: Triangle) { + return ((this.vertex0 === other.vertex0 && this.vertex1 === other.vertex1 && this.vertex2 === other.vertex2) + || (this.vertex0 === other.vertex0 && this.vertex1 === other.vertex2 && this.vertex2 === other.vertex1) + || (this.vertex0 === other.vertex1 && this.vertex1 === other.vertex0 && this.vertex2 === other.vertex2) + || (this.vertex0 === other.vertex1 && this.vertex1 === other.vertex2 && this.vertex2 === other.vertex0) + || (this.vertex0 === other.vertex2 && this.vertex1 === other.vertex0 && this.vertex2 === other.vertex1) + || (this.vertex0 === other.vertex2 && this.vertex1 === other.vertex1 && this.vertex2 === other.vertex0)); + } +} + +@ccclass('cc.CircumSphere') +export class CircumSphere { + @serializable + public center = new Vec3(0, 0, 0); + @serializable + public radiusSquared = 0.0; + + public init (p0: Vec3, p1: Vec3, p2: Vec3, p3: Vec3) { + // calculate circumsphere of 4 points in R^3 space. + const mat = new Mat3( + p1.x - p0.x, p1.y - p0.y, p1.z - p0.z, + p2.x - p0.x, p2.y - p0.y, p2.z - p0.z, + p3.x - p0.x, p3.y - p0.y, p3.z - p0.z, + ); + mat.invert(); + mat.transpose(); + + const n = new Vec3( + ((p1.x + p0.x) * (p1.x - p0.x) + (p1.y + p0.y) * (p1.y - p0.y) + (p1.z + p0.z) * (p1.z - p0.z)) * 0.5, + ((p2.x + p0.x) * (p2.x - p0.x) + (p2.y + p0.y) * (p2.y - p0.y) + (p2.z + p0.z) * (p2.z - p0.z)) * 0.5, + ((p3.x + p0.x) * (p3.x - p0.x) + (p3.y + p0.y) * (p3.y - p0.y) + (p3.z + p0.z) * (p3.z - p0.z)) * 0.5, + ); + + Vec3.transformMat3(this.center, n, mat); + this.radiusSquared = Vec3.squaredDistance(p0, this.center); + } +} + +/** + * inner tetrahedron or outer cell structure + */ + +@ccclass('cc.Tetrahedron') +export class Tetrahedron { + @serializable + public invalid = false; + @serializable + public vertex0 = -1; + @serializable + public vertex1 = -1; + @serializable + public vertex2 = -1; + @serializable + public vertex3 = -1; // -1 means outer cell, otherwise inner tetrahedron + @serializable + public neighbours: number[] = [-1, -1, -1, -1]; + + @serializable + public matrix = new Mat3(); + @serializable + public offset = new Vec3(0.0, 0.0, 0.0); // only valid in outer cell + @serializable + public sphere = new CircumSphere(); // only valid in inner tetrahedron + + // inner tetrahedron or outer cell constructor + public constructor (delaunay: Delaunay, v0: number, v1: number, v2: number, v3 = -1) { + this.vertex0 = v0; + this.vertex1 = v1; + this.vertex2 = v2; + this.vertex3 = v3; + + // inner tetrahedron + if (v3 >= 0) { + const probes = delaunay.getProbes(); + const p0 = probes[this.vertex0].position; + const p1 = probes[this.vertex1].position; + const p2 = probes[this.vertex2].position; + const p3 = probes[this.vertex3].position; + this.sphere.init(p0, p1, p2, p3); + } + } + + public isInCircumSphere (point: Vec3) { + return Vec3.squaredDistance(point, this.sphere.center) < this.sphere.radiusSquared - EPSILON; + } + + public contain (vertexIndex: number) { + return (this.vertex0 === vertexIndex || this.vertex1 === vertexIndex + || this.vertex2 === vertexIndex || this.vertex3 === vertexIndex); + } + + public isInnerTetrahedron () { + return this.vertex3 >= 0; + } + + public isOuterCell () { + return this.vertex3 < 0; // -1 or -2 + } +} + +export class Delaunay { + private _probes: Vertex[] = []; + private _tetrahedrons: Tetrahedron[] = []; + + public getProbes () { return this._probes; } + public getTetrahedrons () { return this._tetrahedrons; } + + public build (points: Vec3[]) { + this.reset(); + + const pointCount = points.length; + if (pointCount < 4) { + warnID(17000); + return; + } + + for (let i = 0; i < points.length; i++) { + this._probes.push(new Vertex(points[i])); + } + + this.tetrahedralize(); + this.computeAdjacency(); + this.computeMatrices(); + } + + private reset () { + this._probes.length = 0; + this._tetrahedrons.length = 0; + } + + /** + * Bowyer-Watson algorithm + */ + private tetrahedralize () { + // get probe count first + const probeCount = this._probes.length; + + // init a super tetrahedron containing all probes + const center = this.initTetrahedron(); + + for (let i = 0; i < probeCount; i++) { + this.addProbe(i); + } + + // remove all tetrahedrons which contain the super tetrahedron's vertices + this._tetrahedrons = this._tetrahedrons.filter((tetrahedron) => { + const vertexIndex = probeCount; + const isSuperTetrahedron = ( + tetrahedron.contain(vertexIndex) + || tetrahedron.contain(vertexIndex + 1) + || tetrahedron.contain(vertexIndex + 2) + || tetrahedron.contain(vertexIndex + 3)); + + return !isSuperTetrahedron; + }); + + // remove all additional points in the super tetrahedron + this._probes.length = probeCount; + + this.reorder(center); + } + + private initTetrahedron () { + const minPos = new Vec3(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE); + const maxPos = new Vec3(Number.MIN_VALUE, Number.MIN_VALUE, Number.MIN_VALUE); + + for (let i = 0; i < this._probes.length; i++) { + const position = this._probes[i].position; + minPos.x = Math.min(minPos.x, position.x); + maxPos.x = Math.max(maxPos.x, position.x); + + minPos.y = Math.min(minPos.y, position.y); + maxPos.y = Math.max(maxPos.y, position.y); + + minPos.z = Math.min(minPos.z, position.z); + maxPos.z = Math.max(maxPos.z, position.z); + } + + const center = new Vec3(0.0, 0.0, 0.0); + Vec3.add(center, minPos, maxPos); + Vec3.multiplyScalar(center, center, 0.5); + + const extent = new Vec3(0.0, 0.0, 0.0); + Vec3.subtract(extent, maxPos, minPos); + const offset = Math.max(extent.x, extent.y, extent.z) * 10.0; + + const p0 = new Vec3(center.x, center.y + offset, center.z); + const p1 = new Vec3(center.x - offset, center.y - offset, center.z - offset); + const p2 = new Vec3(center.x - offset, center.y - offset, center.z + offset); + const p3 = new Vec3(center.x + offset, center.y - offset, center.z); + + const index = this._probes.length; + this._probes.push(new Vertex(p0)); + this._probes.push(new Vertex(p1)); + this._probes.push(new Vertex(p2)); + this._probes.push(new Vertex(p3)); + + this._tetrahedrons.push(new Tetrahedron(this, index, index + 1, index + 2, index + 3)); + + return center; + } + + private addProbe (vertexIndex: number) { + let triangles: Triangle[] = []; + const probe = this._probes[vertexIndex]; + + for (let i = 0; i < this._tetrahedrons.length; i++) { + const tetrahedron = this._tetrahedrons[i]; + if (tetrahedron.isInCircumSphere(probe.position)) { + tetrahedron.invalid = true; + + triangles.push(new Triangle(i, 0, tetrahedron.vertex1, tetrahedron.vertex3, tetrahedron.vertex2, tetrahedron.vertex0)); + triangles.push(new Triangle(i, 1, tetrahedron.vertex0, tetrahedron.vertex2, tetrahedron.vertex3, tetrahedron.vertex1)); + triangles.push(new Triangle(i, 2, tetrahedron.vertex0, tetrahedron.vertex3, tetrahedron.vertex1, tetrahedron.vertex2)); + triangles.push(new Triangle(i, 3, tetrahedron.vertex0, tetrahedron.vertex1, tetrahedron.vertex2, tetrahedron.vertex3)); + } + } + + for (let i = 0; i < triangles.length; i++) { + for (let k = i + 1; k < triangles.length; k++) { + if (triangles[i].isSame(triangles[k])) { + triangles[i].invalid = true; + triangles[k].invalid = true; + } + } + } + + // remove all duplicated triangles. + triangles = triangles.filter((triangle) => !triangle.invalid); + + // remove containing tetrahedron + this._tetrahedrons = this._tetrahedrons.filter((tetrahedron) => !tetrahedron.invalid); + + for (let i = 0; i < triangles.length; i++) { + const triangle = triangles[i]; + this._tetrahedrons.push(new Tetrahedron(this, triangle.vertex0, triangle.vertex1, triangle.vertex2, vertexIndex)); + } + } + + private reorder (center: Vec3) { + // The tetrahedron in the middle is placed at the front of the vector + this._tetrahedrons.sort((a, b) => Vec3.squaredDistance(a.sphere.center, center) - Vec3.squaredDistance(b.sphere.center, center)); + } + + private computeAdjacency () { + const triangles: Triangle[] = []; + const edges: Edge[] = []; + const normal = new Vec3(0.0, 0.0, 0.0); + const edge1 = new Vec3(0.0, 0.0, 0.0); + const edge2 = new Vec3(0.0, 0.0, 0.0); + const edge3 = new Vec3(0.0, 0.0, 0.0); + + const tetrahedronCount = this._tetrahedrons.length; + + for (let i = 0; i < this._tetrahedrons.length; i++) { + const tetrahedron = this._tetrahedrons[i]; + + triangles.push(new Triangle(i, 0, tetrahedron.vertex1, tetrahedron.vertex3, tetrahedron.vertex2, tetrahedron.vertex0)); + triangles.push(new Triangle(i, 1, tetrahedron.vertex0, tetrahedron.vertex2, tetrahedron.vertex3, tetrahedron.vertex1)); + triangles.push(new Triangle(i, 2, tetrahedron.vertex0, tetrahedron.vertex3, tetrahedron.vertex1, tetrahedron.vertex2)); + triangles.push(new Triangle(i, 3, tetrahedron.vertex0, tetrahedron.vertex1, tetrahedron.vertex2, tetrahedron.vertex3)); + } + + for (let i = 0; i < triangles.length; i++) { + for (let k = i + 1; k < triangles.length; k++) { + if (triangles[i].isSame(triangles[k])) { + // update adjacency between tetrahedrons + this._tetrahedrons[triangles[i].tetrahedron].neighbours[triangles[i].index] = triangles[k].tetrahedron; + this._tetrahedrons[triangles[k].tetrahedron].neighbours[triangles[k].index] = triangles[i].tetrahedron; + triangles[i].isOuterFace = false; + triangles[k].isOuterFace = false; + break; + } + } + + if (triangles[i].isOuterFace) { + const probe0 = this._probes[triangles[i].vertex0]; + const probe1 = this._probes[triangles[i].vertex1]; + const probe2 = this._probes[triangles[i].vertex2]; + const probe3 = this._probes[triangles[i].vertex3]; + + Vec3.subtract(edge1, probe1.position, probe0.position); + Vec3.subtract(edge2, probe2.position, probe0.position); + Vec3.cross(normal, edge1, edge2); + + Vec3.subtract(edge3, probe3.position, probe0.position); + const negative = Vec3.dot(normal, edge3); + if (negative > 0.0) { + Vec3.negate(normal, normal); + } + + // accumulate weighted normal + Vec3.add(probe0.normal, probe0.normal, normal); + Vec3.add(probe1.normal, probe1.normal, normal); + Vec3.add(probe2.normal, probe2.normal, normal); + + // create an outer cell with normal facing out + const v0 = triangles[i].vertex0; + const v1 = negative > 0.0 ? triangles[i].vertex2 : triangles[i].vertex1; + const v2 = negative > 0.0 ? triangles[i].vertex1 : triangles[i].vertex2; + const tetrahedron = new Tetrahedron(this, v0, v1, v2); + + // update adjacency between tetrahedron and outer cell + tetrahedron.neighbours[3] = triangles[i].tetrahedron; + this._tetrahedrons[triangles[i].tetrahedron].neighbours[triangles[i].index] = this._tetrahedrons.length; + this._tetrahedrons.push(tetrahedron); + } + } + + // start from outer cell index + for (let i = tetrahedronCount; i < this._tetrahedrons.length; i++) { + const tetrahedron = this._tetrahedrons[i]; + + edges.push(new Edge(i, 0, tetrahedron.vertex1, tetrahedron.vertex2)); + edges.push(new Edge(i, 1, tetrahedron.vertex2, tetrahedron.vertex0)); + edges.push(new Edge(i, 2, tetrahedron.vertex0, tetrahedron.vertex1)); + } + + for (let i = 0; i < edges.length; i++) { + for (let k = i + 1; k < edges.length; k++) { + if (edges[i].isSame(edges[k])) { + // update adjacency between outer cells + this._tetrahedrons[edges[i].tetrahedron].neighbours[edges[i].index] = edges[k].tetrahedron; + this._tetrahedrons[edges[k].tetrahedron].neighbours[edges[k].index] = edges[i].tetrahedron; + } + } + } + + // normalize all convex hull probes' normal + for (let i = 0; i < this._probes.length; i++) { + this._probes[i].normal.normalize(); + } + } + + private computeMatrices () { + for (let i = 0; i < this._tetrahedrons.length; i++) { + const tetrahedron = this._tetrahedrons[i]; + + if (tetrahedron.vertex3 >= 0) { + this.computeTetrahedronMatrix(tetrahedron); + } else { + this.computeOuterCellMatrix(tetrahedron); + } + } + } + + private computeTetrahedronMatrix (tetrahedron: Tetrahedron) { + const p0 = this._probes[tetrahedron.vertex0].position; + const p1 = this._probes[tetrahedron.vertex1].position; + const p2 = this._probes[tetrahedron.vertex2].position; + const p3 = this._probes[tetrahedron.vertex3].position; + + tetrahedron.matrix.set( + p0.x - p3.x, p1.x - p3.x, p2.x - p3.x, + p0.y - p3.y, p1.y - p3.y, p2.y - p3.y, + p0.z - p3.z, p1.z - p3.z, p2.z - p3.z, + ); + tetrahedron.matrix.invert(); + tetrahedron.matrix.transpose(); + } + + private computeOuterCellMatrix (tetrahedron: Tetrahedron) { + const v: Vec3[] = []; + const p: Vec3[] = []; + + v[0] = this._probes[tetrahedron.vertex0].normal; + v[1] = this._probes[tetrahedron.vertex1].normal; + v[2] = this._probes[tetrahedron.vertex2].normal; + + p[0] = this._probes[tetrahedron.vertex0].position; + p[1] = this._probes[tetrahedron.vertex1].position; + p[2] = this._probes[tetrahedron.vertex2].position; + + const a = new Vec3(0.0, 0.0, 0.0); + Vec3.subtract(a, p[0], p[2]); + const ap = new Vec3(0.0, 0.0, 0.0); + Vec3.subtract(ap, v[0], v[2]); + const b = new Vec3(0.0, 0.0, 0.0); + Vec3.subtract(b, p[1], p[2]); + const bp = new Vec3(0.0, 0.0, 0.0); + Vec3.subtract(bp, v[1], v[2]); + const p2 = new Vec3(p[2]); + const cp = new Vec3(0.0, 0.0, 0.0); + Vec3.negate(cp, v[2]); + + const m: number[] = []; + + m[0] = ap.y * bp.z - ap.z * bp.y; + m[3] = -ap.x * bp.z + ap.z * bp.x; + m[6] = ap.x * bp.y - ap.y * bp.x; + m[9] = a.x * bp.y * cp.z + - a.y * bp.x * cp.z + + ap.x * b.y * cp.z + - ap.y * b.x * cp.z + + a.z * bp.x * cp.y + - a.z * bp.y * cp.x + + ap.z * b.x * cp.y + - ap.z * b.y * cp.x + - a.x * bp.z * cp.y + + a.y * bp.z * cp.x + - ap.x * b.z * cp.y + + ap.y * b.z * cp.x; + m[9] -= p2.x * m[0] + p2.y * m[3] + p2.z * m[6]; + + m[1] = ap.y * b.z + a.y * bp.z - ap.z * b.y - a.z * bp.y; + m[4] = -a.x * bp.z - ap.x * b.z + a.z * bp.x + ap.z * b.x; + m[7] = a.x * bp.y - a.y * bp.x + ap.x * b.y - ap.y * b.x; + m[10] = a.x * b.y * cp.z + - a.y * b.x * cp.z + - a.x * b.z * cp.y + + a.y * b.z * cp.x + + a.z * b.x * cp.y + - a.z * b.y * cp.x; + m[10] -= p2.x * m[1] + p2.y * m[4] + p2.z * m[7]; + + m[2] = -a.z * b.y + a.y * b.z; + m[5] = -a.x * b.z + a.z * b.x; + m[8] = a.x * b.y - a.y * b.x; + m[11] = 0.0; + m[11] -= p2.x * m[2] + p2.y * m[5] + p2.z * m[8]; + + // coefficient of t^3 + const c = ap.x * bp.y * cp.z + - ap.y * bp.x * cp.z + + ap.z * bp.x * cp.y + - ap.z * bp.y * cp.x + + ap.y * bp.z * cp.x + - ap.x * bp.z * cp.y; + + if (Math.abs(c) > EPSILON) { + // t^3 + p * t^2 + q * t + r = 0 + for (let k = 0; k < 12; k++) { + m[k] /= c; + } + } else { + // set last vertex index of outer cell to -2 + // p * t^2 + q * t + r = 0 + tetrahedron.vertex3 = -2; + } + + // transpose the matrix + tetrahedron.matrix.set(m[0], m[1], m[2], m[3], m[4], m[5], m[6], m[7], m[8]); + + // last column of mat3x4 + tetrahedron.offset.set(m[9], m[10], m[11]); + } +} diff --git a/cocos/gi/light-probe/index.ts b/cocos/gi/light-probe/index.ts new file mode 100644 index 00000000000..465a7c39325 --- /dev/null +++ b/cocos/gi/light-probe/index.ts @@ -0,0 +1,30 @@ +/* + Copyright (c) 2022 Xiamen Yaji Software Co., Ltd. + + https://www.cocos.com/ + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated engine source code (the "Software"), a limited, + worldwide, royalty-free, non-assignable, revocable and non-exclusive license + to use Cocos Creator solely to develop games on your target platforms. You shall + not use Cocos Creator software for developing other software or tools that's + used for developing games. You are not granted to publish, distribute, + sublicense, and/or sell copies of Cocos Creator. + + The software or tools in this License Agreement are licensed, not sold. + Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + */ + +export * from './auto-placement'; +export * from './delaunay'; +export * from './sh'; +export * from './light-probe'; +export * from './light-probe-group'; diff --git a/cocos/gi/light-probe/light-probe-group.ts b/cocos/gi/light-probe/light-probe-group.ts new file mode 100644 index 00000000000..4e15f93695d --- /dev/null +++ b/cocos/gi/light-probe/light-probe-group.ts @@ -0,0 +1,210 @@ +/* + Copyright (c) 2022 Xiamen Yaji Software Co., Ltd. + + https://www.cocos.com/ + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated engine source code (the "Software"), a limited, + worldwide, royalty-free, non-assignable, revocable and non-exclusive license + to use Cocos Creator solely to develop games on your target platforms. You shall + not use Cocos Creator software for developing other software or tools that's + used for developing games. You are not granted to publish, distribute, + sublicense, and/or sell copies of Cocos Creator. + + The software or tools in this License Agreement are licensed, not sold. + Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + */ + +import { ccclass, disallowMultiple, displayName, editable, executeInEditMode, menu, range, serializable, tooltip, type } from 'cc.decorator'; +import { EDITOR } from 'internal:constants'; +import { NodeEventType } from '../../scene-graph/node-event'; +import { Component } from '../../scene-graph/component'; +import { CCInteger } from '../../core/data/utils/attribute'; +import { Vec3 } from '../../core/math'; +import { AutoPlacement, PlaceMethod } from './auto-placement'; + +/** + * @en The light probe group component. + * @zh 光照探针组组件。 + */ +@ccclass('cc.LightProbeGroup') +@menu('GI/LightProbeGroup') +@disallowMultiple +@executeInEditMode +export class LightProbeGroup extends Component { + @serializable + protected _probes: Vec3[] = []; + + @serializable + protected _method = PlaceMethod.UNIFORM; + + @serializable + protected _minPos = new Vec3(-10, -10, -10); + + @serializable + protected _maxPos = new Vec3(10, 10, 10); + + @serializable + protected _nProbesX = 3; + + @serializable + protected _nProbesY = 3; + + @serializable + protected _nProbesZ = 3; + + get probes (): Vec3[] { + return this._probes; + } + set probes (val: Vec3[]) { + this._probes = val; + } + + @editable + @type(PlaceMethod) + @tooltip('i18n:light_probe_group.method') + @displayName('Generating Method') + get method () { + return this._method; + } + set method (val) { + this._method = val; + } + + /** + * @en Minimum position of the light probe group + * @zh 光照探针组包围盒最小值 + */ + @editable + @tooltip('i18n:light_probe_group.minPos') + @displayName('Generating Min Pos') + get minPos (): Vec3 { + return this._minPos; + } + set minPos (val: Vec3) { + this._minPos = val; + } + + /** + * @en Maximum position of the light probe group + * @zh 光照探针组包围盒最大值 + */ + @editable + @tooltip('i18n:light_probe_group.maxPos') + @displayName('Generating Max Pos') + get maxPos (): Vec3 { + return this._maxPos; + } + set maxPos (val: Vec3) { + this._maxPos = val; + } + + @editable + @range([2, 65535, 1]) + @type(CCInteger) + @tooltip('i18n:light_probe_group.nProbesX') + @displayName('Number Of Probes X') + get nProbesX (): number { + return this._nProbesX; + } + set nProbesX (val: number) { + this._nProbesX = val; + } + + @editable + @range([2, 65535, 1]) + @type(CCInteger) + @tooltip('i18n:light_probe_group.nProbesY') + @displayName('Number Of Probes Y') + get nProbesY (): number { + return this._nProbesY; + } + set nProbesY (val: number) { + this._nProbesY = val; + } + + @editable + @range([2, 65535, 1]) + @type(CCInteger) + @tooltip('i18n:light_probe_group.nProbesZ') + @displayName('Number Of Probes Z') + get nProbesZ (): number { + return this._nProbesZ; + } + set nProbesZ (val: number) { + this._nProbesZ = val; + } + + public onEnable () { + if (!EDITOR) { + return; + } + + if (!this.node) { + return; + } + + this.node.on(NodeEventType.ANCESTOR_TRANSFORM_CHANGED, this.onAncestorTransformChanged, this); + const changed = this.node.scene.globals.lightProbeInfo.addGroup(this); + if (changed) { + this.onProbeChanged(); + } + } + + public onDisable () { + if (!EDITOR) { + return; + } + + if (!this.node) { + return; + } + + const changed = this.node.scene.globals.lightProbeInfo.removeGroup(this); + if (changed) { + this.onProbeChanged(); + } + this.node.off(NodeEventType.ANCESTOR_TRANSFORM_CHANGED, this.onAncestorTransformChanged, this); + } + + public generateLightProbes () { + if (!this.node) { + return; + } + + this._probes = AutoPlacement.generate({ + method: this._method, + nProbesX: this._nProbesX, + nProbesY: this._nProbesY, + nProbesZ: this._nProbesZ, + minPos: this._minPos, + maxPos: this._maxPos, + }); + + this.onProbeChanged(); + } + + public onProbeChanged () { + if (this._probes.length > 0) { + this.node.scene.globals.lightProbeInfo.update(); + this.node.emit(NodeEventType.LIGHT_PROBE_CHANGED); + } + } + + private onAncestorTransformChanged () { + if (!this.node) { + return; + } + + this.node.updateWorldTransform(); + this.onProbeChanged(); + } +} diff --git a/cocos/gi/light-probe/light-probe.jsb.ts b/cocos/gi/light-probe/light-probe.jsb.ts new file mode 100644 index 00000000000..7e94b2e1cc9 --- /dev/null +++ b/cocos/gi/light-probe/light-probe.jsb.ts @@ -0,0 +1,35 @@ +/* + Copyright (c) 2021 Xiamen Yaji Software Co., Ltd. + + https://www.cocos.com/ + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated engine source code (the "Software"), a limited, + worldwide, royalty-free, non-assignable, revocable and non-exclusive license + to use Cocos Creator solely to develop games on your target platforms. You shall + not use Cocos Creator software for developing other software or tools that's + used for developing games. You are not granted to publish, distribute, + sublicense, and/or sell copies of Cocos Creator. + + The software or tools in this License Agreement are licensed, not sold. + Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ +import { serializable } from 'cc.decorator'; +import { ccclass } from "../../core/data/class-decorator"; + +export const LightProbes = jsb.LightProbes; +ccclass('cc.LightProbes')(LightProbes); + +export const LightProbesData = jsb.LightProbesData; +const LightProbesDataProto = LightProbesData.prototype; +serializable(LightProbesDataProto, '_probes'); +serializable(LightProbesDataProto, '_tetrahedrons'); +ccclass('cc.LightProbesData')(LightProbesData); diff --git a/cocos/gi/light-probe/light-probe.ts b/cocos/gi/light-probe/light-probe.ts new file mode 100644 index 00000000000..b52b975b22f --- /dev/null +++ b/cocos/gi/light-probe/light-probe.ts @@ -0,0 +1,351 @@ +/* + Copyright (c) 2022 Xiamen Yaji Software Co., Ltd. + + https://www.cocos.com/ + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated engine source code (the "Software"), a limited, + worldwide, royalty-free, non-assignable, revocable and non-exclusive license + to use Cocos Creator solely to develop games on your target platforms. You shall + not use Cocos Creator software for developing other software or tools that's + used for developing games. You are not granted to publish, distribute, + sublicense, and/or sell copies of Cocos Creator. + + The software or tools in this License Agreement are licensed, not sold. + Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + */ + +import { ccclass, serializable } from 'cc.decorator'; +import { Vertex, Tetrahedron, Delaunay } from './delaunay'; +import { PolynomialSolver } from './polynomial-solver'; +import { LightProbeInfo } from '../../scene-graph/scene-globals'; +import { Vec3 } from '../../core/math/vec3'; +import { Vec4 } from '../../core/math/vec4'; +import { legacyCC } from '../../core/global-exports'; +import { SH } from './sh'; +import { math } from '../../core'; + +@ccclass('cc.LightProbesData') +export class LightProbesData { + public get probes () { + return this._probes; + } + + public get tetrahedrons () { + return this._tetrahedrons; + } + + public empty () { + return this._probes.length === 0 || this._tetrahedrons.length === 0; + } + + public available () { + return !this.empty() && this._probes[0].coefficients.length !== 0; + } + + public build (points: Vec3[]) { + const delaunay = new Delaunay(); + delaunay.build(points); + + this._probes = delaunay.getProbes(); + this._tetrahedrons = delaunay.getTetrahedrons(); + } + + public getInterpolationSHCoefficients (position: Vec3, tetIndex: number, coefficients: Vec3[]) { + const weights = new Vec4(0.0, 0.0, 0.0, 0.0); + tetIndex = this.getInterpolationWeights(position, tetIndex, weights); + const length = SH.getBasisCount(); + + const tetrahedron = this._tetrahedrons[tetIndex]; + const c0 = this._probes[tetrahedron.vertex0].coefficients; + const c1 = this._probes[tetrahedron.vertex1].coefficients; + const c2 = this._probes[tetrahedron.vertex2].coefficients; + + if (tetrahedron.vertex3 >= 0) { + const c3 = this._probes[tetrahedron.vertex3].coefficients; + + for (let i = 0; i < length; i++) { + coefficients[i] = new Vec3(0.0, 0.0, 0.0); + Vec3.scaleAndAdd(coefficients[i], coefficients[i], c0[i], weights.x); + Vec3.scaleAndAdd(coefficients[i], coefficients[i], c1[i], weights.y); + Vec3.scaleAndAdd(coefficients[i], coefficients[i], c2[i], weights.z); + Vec3.scaleAndAdd(coefficients[i], coefficients[i], c3[i], weights.w); + } + } else { + for (let i = 0; i < length; i++) { + coefficients[i] = new Vec3(0.0, 0.0, 0.0); + Vec3.scaleAndAdd(coefficients[i], coefficients[i], c0[i], weights.x); + Vec3.scaleAndAdd(coefficients[i], coefficients[i], c1[i], weights.y); + Vec3.scaleAndAdd(coefficients[i], coefficients[i], c2[i], weights.z); + } + } + + return tetIndex; + } + + private getInterpolationWeights (position: Vec3, tetIndex: number, weights: Vec4) { + const tetrahedronCount = this._tetrahedrons.length; + if (tetIndex < 0 || tetIndex >= tetrahedronCount) { + tetIndex = 0; + } + + let lastIndex = -1; + let nextIndex = -1; + + for (let i = 0; i < tetrahedronCount; i++) { + const tetrahedron = this._tetrahedrons[tetIndex]; + this.getBarycentricCoord(position, tetrahedron, weights); + if (weights.x >= 0.0 && weights.y >= 0.0 && weights.z >= 0.0 && weights.w >= 0.0) { + break; + } + + if (weights.x < weights.y && weights.x < weights.z && weights.x < weights.w) { + nextIndex = tetrahedron.neighbours[0]; + } else if (weights.y < weights.z && weights.y < weights.w) { + nextIndex = tetrahedron.neighbours[1]; + } else if (weights.z < weights.w) { + nextIndex = tetrahedron.neighbours[2]; + } else { + nextIndex = tetrahedron.neighbours[3]; + } + + // return directly due to numerical precision error + if (lastIndex === nextIndex) { + break; + } + + lastIndex = tetIndex; + tetIndex = nextIndex; + } + + return tetIndex; + } + + private static getTriangleBarycentricCoord (p0: Vec3, p1: Vec3, p2: Vec3, position: Vec3) { + const v1 = new Vec3(0.0, 0.0, 0.0); + const v2 = new Vec3(0.0, 0.0, 0.0); + const normal = new Vec3(0.0, 0.0, 0.0); + + Vec3.subtract(v1, p1, p0); + Vec3.subtract(v2, p2, p0); + Vec3.cross(normal, v1, v2); + + if (normal.lengthSqr() <= math.EPSILON) { + return new Vec3(0.0, 0.0, 0.0); + } + + const n = normal.clone(); + n.normalize(); + const area012Inv = 1.0 / n.dot(normal); + + const edgeP0 = new Vec3(0.0, 0.0, 0.0); + const edgeP1 = new Vec3(0.0, 0.0, 0.0); + const edgeP2 = new Vec3(0.0, 0.0, 0.0); + + Vec3.subtract(edgeP0, p0, position); + Vec3.subtract(edgeP1, p1, position); + Vec3.subtract(edgeP2, p2, position); + + const crossP12 = new Vec3(0.0, 0.0, 0.0); + Vec3.cross(crossP12, edgeP1, edgeP2); + const areaP12 = n.dot(crossP12); + const alpha = areaP12 * area012Inv; + + const crossP20 = new Vec3(0.0, 0.0, 0.0); + Vec3.cross(crossP20, edgeP2, edgeP0); + const areaP20 = n.dot(crossP20); + const beta = areaP20 * area012Inv; + + return new Vec3(alpha, beta, 1.0 - alpha - beta); + } + + private getBarycentricCoord (position: Vec3, tetrahedron: Tetrahedron, weights: Vec4) { + if (tetrahedron.vertex3 >= 0) { + this.getTetrahedronBarycentricCoord(position, tetrahedron, weights); + } else { + this.getOuterCellBarycentricCoord(position, tetrahedron, weights); + } + } + + private getTetrahedronBarycentricCoord (position: Vec3, tetrahedron: Tetrahedron, weights: Vec4) { + const result = new Vec3(0.0, 0.0, 0.0); + Vec3.subtract(result, position, this._probes[tetrahedron.vertex3].position); + Vec3.transformMat3(result, result, tetrahedron.matrix); + + weights.set(result.x, result.y, result.z, 1.0 - result.x - result.y - result.z); + } + + private getOuterCellBarycentricCoord (position: Vec3, tetrahedron: Tetrahedron, weights: Vec4) { + const p0 = this._probes[tetrahedron.vertex0].position; + const p1 = this._probes[tetrahedron.vertex1].position; + const p2 = this._probes[tetrahedron.vertex2].position; + + const normal = new Vec3(0.0, 0.0, 0.0); + const edge1 = new Vec3(0.0, 0.0, 0.0); + const edge2 = new Vec3(0.0, 0.0, 0.0); + const v = new Vec3(0.0, 0.0, 0.0); + + Vec3.subtract(edge1, p1, p0); + Vec3.subtract(edge2, p2, p0); + Vec3.cross(normal, edge1, edge2); + Vec3.subtract(v, position, p0); + + let t = Vec3.dot(v, normal); + if (t < 0.0) { + // test tetrahedron in next iterator + weights.set(0.0, 0.0, 0.0, -1.0); + return; + } + + const coefficients = new Vec3(0.0, 0.0, 0.0); + Vec3.transformMat3(coefficients, position, tetrahedron.matrix); + Vec3.add(coefficients, coefficients, tetrahedron.offset); + + if (tetrahedron.vertex3 === -1) { + t = PolynomialSolver.getCubicUniqueRoot(coefficients.x, coefficients.y, coefficients.z); + } else { + t = PolynomialSolver.getQuadraticUniqueRoot(coefficients.x, coefficients.y, coefficients.z); + } + + const v0 = new Vec3(0.0, 0.0, 0.0); + const v1 = new Vec3(0.0, 0.0, 0.0); + const v2 = new Vec3(0.0, 0.0, 0.0); + + Vec3.scaleAndAdd(v0, p0, this._probes[tetrahedron.vertex0].normal, t); + Vec3.scaleAndAdd(v1, p1, this._probes[tetrahedron.vertex1].normal, t); + Vec3.scaleAndAdd(v2, p2, this._probes[tetrahedron.vertex2].normal, t); + const result = LightProbesData.getTriangleBarycentricCoord(v0, v1, v2, position); + + weights.set(result.x, result.y, result.z, 0.0); + } + + @serializable + private _probes: Vertex[] = []; + @serializable + private _tetrahedrons: Tetrahedron[] = []; +} + +/** + * @en light probe data + * @zh 光照探针数据 + */ +export class LightProbes { + /** + * @en Whether activate light probe + * @zh 是否启用光照探针 + */ + set enabled (val: boolean) { + if (this._enabled === val) { + return; + } + + this._enabled = val; + this._updatePipeline(); + } + get enabled () { + return this._enabled; + } + + /** + * @en Reduce ringing of light probe + * @zh 减少光照探针的振铃效果 + */ + set reduceRinging (val: number) { + this._reduceRinging = val; + } + get reduceRinging () { + return this._reduceRinging; + } + + /** + * @en Whether to show light probe + * @zh 是否显示光照探针 + */ + set showProbe (val: boolean) { + this._showProbe = val; + } + get showProbe () { + return this._showProbe; + } + + /** + * @en Whether to show light probe's connection + * @zh 是否显示光照探针连线 + */ + set showWireframe (val: boolean) { + this._showWireframe = val; + } + get showWireframe () { + return this._showWireframe; + } + + /** + * @en Whether to show light probe's convex + * @zh 是否显示光照探针凸包 + */ + set showConvex (val: boolean) { + this._showConvex = val; + } + get showConvex () { + return this._showConvex; + } + + /** + * @en light probe's vertex and tetrahedron data + * @zh 光照探针顶点及四面体数据 + */ + set data (val: LightProbesData | null) { + this._data = val; + } + get data (): LightProbesData | null { + return this._data; + } + + protected _enabled = false; + protected _reduceRinging = 0.0; + protected _showProbe = true; + protected _showWireframe = true; + protected _showConvex = false; + protected _data: LightProbesData | null = null; + + public initialize (info: LightProbeInfo) { + this._enabled = info.enabled; + this._reduceRinging = info.reduceRinging; + this._showProbe = info.showProbe; + this._showWireframe = info.showWireframe; + this._showConvex = info.showConvex; + this._data = info.data; + + this._updatePipeline(); + } + + public available () { + if (!this._enabled) { + return false; + } + + if (!this._data) { + return false; + } + + return this._data.available(); + } + + protected _updatePipeline () { + const root = legacyCC.director.root; + const pipeline = root.pipeline; + + if (pipeline.macros.CC_LIGHT_PROBE_ENABLED !== this.enabled) { + pipeline.macros.CC_LIGHT_PROBE_ENABLED = this.enabled; + root.onGlobalPipelineStateChanged(); + } + } +} diff --git a/cocos/gi/light-probe/polynomial-solver.ts b/cocos/gi/light-probe/polynomial-solver.ts new file mode 100644 index 00000000000..a1e25db6ab5 --- /dev/null +++ b/cocos/gi/light-probe/polynomial-solver.ts @@ -0,0 +1,91 @@ +/* + Copyright (c) 2022 Xiamen Yaji Software Co., Ltd. + + https://www.cocos.com/ + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated engine source code (the "Software"), a limited, + worldwide, royalty-free, non-assignable, revocable and non-exclusive license + to use Cocos Creator solely to develop games on your target platforms. You shall + not use Cocos Creator software for developing other software or tools that's + used for developing games. You are not granted to publish, distribute, + sublicense, and/or sell copies of Cocos Creator. + + The software or tools in this License Agreement are licensed, not sold. + Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + */ + +export class PolynomialSolver { + /** + * solve quadratic equation: b * t^2 + c * t + d = 0 + * return the unique real positive root + */ + public static getQuadraticUniqueRoot (b: number, c: number, d: number) { + // quadratic case + if (b !== 0.0) { + // the discriminant should be 0 + return -c / (2.0 * b); + } + + // linear case + if (c !== 0.0) { + return -d / c; + } + + // never reach here + return 0.0; + } + + /** + * solve cubic equation: t^3 + b * t^2 + c * t + d = 0 + * return the unique real positive root + */ + public static getCubicUniqueRoot (b: number, c: number, d: number) { + const roots: number[] = []; + + // let x = y - b / 3, convert equation to: y^3 + 3 * p * y + 2 * q = 0 + // where p = c / 3 - b^2 / 9, q = d / 2 + b^3 / 27 - b * c / 6 + const offset = -b / 3.0; + const p = c / 3.0 - (b * b) / 9.0; + const q = d / 2.0 + (b * b * b) / 27.0 - (b * c) / 6.0; + const delta = p * p * p + q * q; // discriminant + + if (delta > 0.0) { + // only one real root + const sqrtDelta = Math.sqrt(delta); + roots.push(Math.cbrt(-q + sqrtDelta) + Math.cbrt(-q - sqrtDelta)); + } else if (delta < 0.0) { + // three different real roots + const angle = Math.acos(-q * Math.sqrt(-p) / (p * p)) / 3.0; + roots.push(2.0 * Math.sqrt(-p) * Math.cos(angle)); + roots.push(2.0 * Math.sqrt(-p) * Math.cos(angle + 2.0 * Math.PI / 3.0)); + roots.push(2.0 * Math.sqrt(-p) * Math.cos(angle + 4.0 * Math.PI / 3.0)); + } else if (q === 0.0) { + // three real roots, at least two equal roots + roots.push(0.0); + } else { + // three real roots, at least two equal roots + const root = Math.cbrt(q); + roots.push(root); + roots.push(-2.0 * root); + } + + // return the unique positive root + for (let i = 0; i < roots.length; i++) { + if (roots[i] + offset >= 0.0) { + return roots[i] + offset; + } + } + + // never reach here + return 0.0; + } +} diff --git a/cocos/gi/light-probe/sh.ts b/cocos/gi/light-probe/sh.ts new file mode 100644 index 00000000000..ee6f653b0f1 --- /dev/null +++ b/cocos/gi/light-probe/sh.ts @@ -0,0 +1,327 @@ +/* + Copyright (c) 2022 Xiamen Yaji Software Co., Ltd. + + https://www.cocos.com/ + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated engine source code (the "Software"), a limited, + worldwide, royalty-free, non-assignable, revocable and non-exclusive license + to use Cocos Creator solely to develop games on your target platforms. You shall + not use Cocos Creator software for developing other software or tools that's + used for developing games. You are not granted to publish, distribute, + sublicense, and/or sell copies of Cocos Creator. + + The software or tools in this License Agreement are licensed, not sold. + Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + */ + +import { Vec4 } from '../../core'; +import { assertIsTrue } from '../../core/data/utils/asserts'; +import { Vec3 } from '../../core/math/vec3'; + +const SH_BASIS_COUNT = 9; + +export class LightProbeSampler { + /** + * generate one sample from sphere uniformly + */ + public static uniformSampleSphere (u1: number, u2: number) { + const z = 1.0 - 2.0 * u1; + const r = Math.sqrt(Math.max(0.0, 1.0 - z * z)); + const phi = 2.0 * Math.PI * u2; + + const x = r * Math.cos(phi); + const y = r * Math.sin(phi); + + return new Vec3(x, y, z); + } + + /** + * generate ucount1 * ucount2 samples from sphere uniformly + */ + public static uniformSamplesSphereAll (uCount1: number, uCount2: number) { + assertIsTrue(uCount1 > 0 && uCount2 > 0); + + const samples: Vec3[] = []; + const uDelta1 = 1.0 / uCount1; + const uDelta2 = 1.0 / uCount2; + + for (let i = 0; i < uCount1; i++) { + const u1 = (i + 0.5) * uDelta1; + + for (let j = 0; j < uCount2; j++) { + const u2 = (j + 0.5) * uDelta2; + const sample = this.uniformSampleSphere(u1, u2); + samples.push(sample); + } + } + + return samples; + } + + /** + * probability density function of uniform distribution on spherical surface + */ + public static uniformSpherePdf () { return 1.0 / (4.0 * Math.PI); } +} + +/** + * Spherical Harmonics utility class + */ +export class SH { + private static LMAX = 2; + + private static basisFunctions: { (v: Vec3): number }[] = + [ + (v: Vec3): number => 0.282095, // 0.5 * Math.sqrt(1.0 / Math.PI) + (v: Vec3): number => 0.488603 * v.y, // 0.5 * Math.sqrt(3.0 / Math.PI) * v.y + (v: Vec3): number => 0.488603 * v.z, // 0.5 * Math.sqrt(3.0 / Math.PI) * v.z + (v: Vec3): number => 0.488603 * v.x, // 0.5 * Math.sqrt(3.0 / Math.PI) * v.x + (v: Vec3): number => 1.09255 * v.y * v.x, // 0.5 * Math.sqrt(15.0 / Math.PI) * v.y * v.x + (v: Vec3): number => 1.09255 * v.y * v.z, // 0.5 * Math.sqrt(15.0 / Math.PI) * v.y * v.z + (v: Vec3): number => 0.946175 * (v.z * v.z - 1.0 / 3.0), // 0.75 * Math.sqrt(5.0 / Math.PI) * (v.z * v.z - 1.0 / 3.0) + (v: Vec3): number => 1.09255 * v.z * v.x, // 0.5 * Math.sqrt(15.0 / Math.PI) * v.z * v.x + (v: Vec3): number => 0.546274 * (v.x * v.x - v.y * v.y), // 0.25 * Math.sqrt(15.0 / Math.PI) * (v.x * v.x - v.y * v.y) + ]; + + private static basisOverPI: number[] = + [ + 0.0897936, // 0.282095 / Math.PI + 0.155527, // 0.488603 / Math.PI + 0.155527, // 0.488603 / Math.PI + 0.155527, // 0.488603 / Math.PI + 0.347769, // 1.09255 / Math.PI + 0.347769, // 1.09255 / Math.PI + 0.301177, // 0.946175 / Math.PI + 0.347769, // 1.09255 / Math.PI + 0.173884, // 0.546274 / Math.PI + ]; + + /** + * update ubo data by coefficients + */ + public static updateUBOData (data: Float32Array, offset: number, coefficients: Vec3[]) { + // cc_sh_linear_const_r + data[offset++] = coefficients[3].x * this.basisOverPI[3]; + data[offset++] = coefficients[1].x * this.basisOverPI[1]; + data[offset++] = coefficients[2].x * this.basisOverPI[2]; + data[offset++] = coefficients[0].x * this.basisOverPI[0] - coefficients[6].x * this.basisOverPI[6] / 3.0; + + // cc_sh_linear_const_g + data[offset++] = coefficients[3].y * this.basisOverPI[3]; + data[offset++] = coefficients[1].y * this.basisOverPI[1]; + data[offset++] = coefficients[2].y * this.basisOverPI[2]; + data[offset++] = coefficients[0].y * this.basisOverPI[0] - coefficients[6].y * this.basisOverPI[6] / 3.0; + + // cc_sh_linear_const_b + data[offset++] = coefficients[3].z * this.basisOverPI[3]; + data[offset++] = coefficients[1].z * this.basisOverPI[1]; + data[offset++] = coefficients[2].z * this.basisOverPI[2]; + data[offset++] = coefficients[0].z * this.basisOverPI[0] - coefficients[6].z * this.basisOverPI[6] / 3.0; + + // cc_sh_quadratic_r + data[offset++] = coefficients[4].x * this.basisOverPI[4]; + data[offset++] = coefficients[5].x * this.basisOverPI[5]; + data[offset++] = coefficients[6].x * this.basisOverPI[6]; + data[offset++] = coefficients[7].x * this.basisOverPI[7]; + + // cc_sh_quadratic_g + data[offset++] = coefficients[4].y * this.basisOverPI[4]; + data[offset++] = coefficients[5].y * this.basisOverPI[5]; + data[offset++] = coefficients[6].y * this.basisOverPI[6]; + data[offset++] = coefficients[7].y * this.basisOverPI[7]; + + // cc_sh_quadratic_b + data[offset++] = coefficients[4].z * this.basisOverPI[4]; + data[offset++] = coefficients[5].z * this.basisOverPI[5]; + data[offset++] = coefficients[6].z * this.basisOverPI[6]; + data[offset++] = coefficients[7].z * this.basisOverPI[7]; + + // cc_sh_quadratic_a + data[offset++] = coefficients[8].x * this.basisOverPI[8]; + data[offset++] = coefficients[8].y * this.basisOverPI[8]; + data[offset++] = coefficients[8].z * this.basisOverPI[8]; + data[offset++] = 0.0; + } + + /** + * recreate a function from sh coefficients, which is same as SHEvaluate in shader + */ + public static shaderEvaluate (normal: Vec3, coefficients: Vec3[]) { + const linearConstR = new Vec4( + coefficients[3].x * this.basisOverPI[3], + coefficients[1].x * this.basisOverPI[1], + coefficients[2].x * this.basisOverPI[2], + coefficients[0].x * this.basisOverPI[0] - coefficients[6].x * this.basisOverPI[6] / 3.0, + ); + + const linearConstG = new Vec4( + coefficients[3].y * this.basisOverPI[3], + coefficients[1].y * this.basisOverPI[1], + coefficients[2].y * this.basisOverPI[2], + coefficients[0].y * this.basisOverPI[0] - coefficients[6].y * this.basisOverPI[6] / 3.0, + ); + + const linearConstB = new Vec4( + coefficients[3].z * this.basisOverPI[3], + coefficients[1].z * this.basisOverPI[1], + coefficients[2].z * this.basisOverPI[2], + coefficients[0].z * this.basisOverPI[0] - coefficients[6].z * this.basisOverPI[6] / 3.0, + ); + + const quadraticR = new Vec4( + coefficients[4].x * this.basisOverPI[4], + coefficients[5].x * this.basisOverPI[5], + coefficients[6].x * this.basisOverPI[6], + coefficients[7].x * this.basisOverPI[7], + ); + + const quadraticG = new Vec4( + coefficients[4].y * this.basisOverPI[4], + coefficients[5].y * this.basisOverPI[5], + coefficients[6].y * this.basisOverPI[6], + coefficients[7].y * this.basisOverPI[7], + ); + + const quadraticB = new Vec4( + coefficients[4].z * this.basisOverPI[4], + coefficients[5].z * this.basisOverPI[5], + coefficients[6].z * this.basisOverPI[6], + coefficients[7].z * this.basisOverPI[7], + ); + + const quadraticA = new Vec3( + coefficients[8].x * this.basisOverPI[8], + coefficients[8].y * this.basisOverPI[8], + coefficients[8].z * this.basisOverPI[8], + ); + + const result = new Vec3(0.0, 0.0, 0.0); + const normal4 = new Vec4(normal.x, normal.y, normal.z, 1.0); + + // calculate linear and const terms + result.x = Vec4.dot(linearConstR, normal4); + result.y = Vec4.dot(linearConstG, normal4); + result.z = Vec4.dot(linearConstB, normal4); + + // calculate quadratic terms + const n14 = new Vec4(normal.x * normal.y, normal.y * normal.z, normal.z * normal.z, normal.z * normal.x); + const n5 = normal.x * normal.x - normal.y * normal.y; + + result.x += Vec4.dot(quadraticR, n14); + result.y += Vec4.dot(quadraticG, n14); + result.z += Vec4.dot(quadraticB, n14); + Vec3.scaleAndAdd(result, result, quadraticA, n5); + + return result; + } + + /** + * recreate a function from sh coefficients + */ + public static evaluate (sample: Vec3, coefficients: Vec3[]) { + const result = new Vec3(0.0, 0.0, 0.0); + + const size = coefficients.length; + for (let i = 0; i < size; i++) { + const c = coefficients[i]; + Vec3.scaleAndAdd(result, result, c, this.evaluateBasis(i, sample)); + } + + return result; + } + + /** + * project a function to sh coefficients + */ + public static project (samples: Vec3[], values: Vec3[]) { + assertIsTrue(samples.length > 0 && samples.length === values.length); + + // integral using Monte Carlo method + const basisCount = this.getBasisCount(); + const sampleCount = samples.length; + const scale = 1.0 / (LightProbeSampler.uniformSpherePdf() * sampleCount); + + const coefficients: Vec3[] = []; + + for (let i = 0; i < basisCount; i++) { + const coefficient = new Vec3(0.0, 0.0, 0.0); + + for (let k = 0; k < sampleCount; k++) { + Vec3.scaleAndAdd(coefficient, coefficient, values[k], this.evaluateBasis(i, samples[k])); + } + + Vec3.multiplyScalar(coefficient, coefficient, scale); + coefficients.push(coefficient); + } + + return coefficients; + } + + /** + * calculate irradiance's sh coefficients from radiance's sh coefficients directly + */ + public static convolveCosine (radianceCoefficients: Vec3[]) { + const cosTheta: number[] = [0.8862268925, 1.0233267546, 0.4954159260]; + const irradianceCoefficients: Vec3[] = []; + + for (let l = 0; l <= this.LMAX; l++) { + for (let m = -l; m <= l; m++) { + const i = this.toIndex(l, m); + + const coefficient = new Vec3(0.0, 0.0, 0.0); + Vec3.multiplyScalar(coefficient, radianceCoefficients[i], this.lambda(l) * cosTheta[l]); + irradianceCoefficients.push(coefficient); + } + } + + return irradianceCoefficients; + } + + /** + * return basis function count + */ + public static getBasisCount () { + return SH_BASIS_COUNT; + } + + /** + * evaluate from a basis function + */ + public static evaluateBasis (index: number, sample: Vec3) { + assertIsTrue(index < this.getBasisCount()); + const func = this.basisFunctions[index]; + + return func(sample); + } + + public static reduceRinging (coefficients: Vec3[], lambda: number) { + if (lambda === 0.0) { + return; + } + + for (let l = 0; l <= this.LMAX; ++l) { + const scale = 1.0 / (1.0 + lambda * l * l * (l + 1) * (l + 1)); + for (let m = -l; m <= l; ++m) { + const i = this.toIndex(l, m); + Vec3.multiplyScalar(coefficients[i], coefficients[i], scale); + } + } + } + + private static lambda (l: number) { + return Math.sqrt((4.0 * Math.PI) / (2.0 * l + 1.0)); + } + + private static toIndex (l: number, m: number) { + return l * l + l + m; + } +} diff --git a/cocos/render-scene/scene/model.ts b/cocos/render-scene/scene/model.ts index 5717e6afa40..2d9ead44694 100644 --- a/cocos/render-scene/scene/model.ts +++ b/cocos/render-scene/scene/model.ts @@ -24,6 +24,7 @@ */ // Copyright (c) 2017-2020 Xiamen Yaji Software Co., Ltd. +import { EDITOR } from 'internal:constants'; import { builtinResMgr } from '../../asset/asset-manager/builtin-res-mgr'; import { Material } from '../../asset/assets/material'; import { RenderingSubMesh } from '../../asset/assets/rendering-sub-mesh'; @@ -37,7 +38,10 @@ import { IMacroPatch, BatchingSchemes } from '../core/pass'; import { Mat4, Vec3, Vec4 } from '../../core/math'; import { Attribute, DescriptorSet, Device, Buffer, BufferInfo, getTypedArrayConstructor, BufferUsageBit, FormatInfos, MemoryUsageBit, Filter, Address, Feature, SamplerInfo, deviceManager } from '../../gfx'; -import { INST_MAT_WORLD, UBOLocal, UBOWorldBound, UNIFORM_LIGHTMAP_TEXTURE_BINDING } from '../../rendering/define'; +import { INST_MAT_WORLD, UBOLocal, UBOSH, UBOWorldBound, UNIFORM_LIGHTMAP_TEXTURE_BINDING } from '../../rendering/define'; +import { Root } from '../../root'; +import { SH } from '../../gi/light-probe/sh'; +import { legacyCC } from '../../core/global-exports'; const m4_1 = new Mat4(); @@ -49,6 +53,10 @@ const lightMapPatches: IMacroPatch[] = [ { name: 'CC_USE_LIGHTMAP', value: true }, ]; +const lightProbePatches: IMacroPatch[] = [ + { name: 'CC_USE_LIGHT_PROBE', value: true }, +]; + export enum ModelType { DEFAULT, SKINNING, @@ -129,6 +137,14 @@ export class Model { return this._localBuffer; } + /** + * @en The SH ubo buffer of the model + * @zh 获取模型的球谐 ubo 缓冲 + */ + get localSHBuffer () { + return this._localSHBuffer; + } + /** * @en The world bound ubo buffer * @zh 获取世界包围盒 ubo 缓冲 @@ -145,6 +161,31 @@ export class Model { return this._updateStamp; } + /** + * @en Use LightProbe or not + * @zh 光照探针开关 + */ + get useLightProbe () { + return this._useLightProbe; + } + + set useLightProbe (val) { + this._useLightProbe = val; + this.onMacroPatchesStateChanged(); + } + + /** + * @en located tetrahedron index + * @zh 模型所处的四面体索引 + */ + get tetrahedronIndex () { + return this._tetrahedronIndex; + } + + set tetrahedronIndex (index: number) { + this._tetrahedronIndex = index; + } + /** * @en Model level shadow bias * @zh 阴影偏移值 @@ -347,9 +388,29 @@ export class Model { */ protected _localBuffer: Buffer | null = null; + /** + * @en Local SH ubo data + * @zh 本地球谐 ubo 数据 + */ + protected _localSHData: Float32Array | null = null; + + /** + * @en Local SH ubo buffer + * @zh 本地球谐 ubo 缓冲 + */ + protected _localSHBuffer: Buffer | null = null; + private _lightmap: Texture2D | null = null; private _lightmapUVParam: Vec4 = new Vec4(); + /** + * @en located tetrahedron index + * @zh 所处的四面体索引 + */ + private _tetrahedronIndex = 0; + private _lastWorldBoundCenter = new Vec3(Infinity, Infinity, Infinity); + private _useLightProbe = false; + /** * @en World AABB buffer * @zh 世界空间包围盒缓冲 @@ -441,6 +502,10 @@ export class Model { this._localBuffer.destroy(); this._localBuffer = null; } + if (this._localSHBuffer) { + this._localSHBuffer.destroy(); + this._localSHBuffer = null; + } if (this._worldBoundBuffer) { this._worldBoundBuffer.destroy(); this._worldBoundBuffer = null; @@ -521,6 +586,8 @@ export class Model { } this._updateStamp = stamp; + this.updateSHUBOs(); + if (!this._localDataUpdated) { return; } this._localDataUpdated = false; @@ -545,6 +612,53 @@ export class Model { } } + private isLightProbeAvailable () { + if (!this._useLightProbe) { + return false; + } + + const lightProbes = (legacyCC.director.root as Root).pipeline.pipelineSceneData.lightProbes; + if (!lightProbes.available()) { + return false; + } + + if (!this._worldBounds) { + return false; + } + + return true; + } + + public showTetrahedron () { + return this.isLightProbeAvailable(); + } + + /** + * @en Update the model's SH ubo + * @zh 更新模型的球谐 ubo + */ + public updateSHUBOs () { + if (!this.isLightProbeAvailable()) { + return; + } + + const center = this._worldBounds!.center; + if (!EDITOR && center.equals(this._lastWorldBoundCenter)) { + return; + } + + const coefficients: Vec3[] = []; + const lightProbes = (legacyCC.director.root as Root).pipeline.pipelineSceneData.lightProbes; + this._tetrahedronIndex = lightProbes.data!.getInterpolationSHCoefficients(center, this._tetrahedronIndex, coefficients); + SH.reduceRinging(coefficients, lightProbes.reduceRinging); + this._lastWorldBoundCenter.set(center); + + if (this._localSHData && this._localSHBuffer) { + SH.updateUBOData(this._localSHData, UBOSH.SH_LINEAR_CONST_R_OFFSET, coefficients); + this._localSHBuffer.update(this._localSHData); + } + } + /** * @en Create the model's AABB * @zh 创建模型的包围盒 @@ -703,6 +817,10 @@ export class Model { if (this._lightmap != null) { patches = patches ? patches.concat(lightMapPatches) : lightMapPatches; } + if (this._useLightProbe) { + patches = patches ? patches.concat(lightProbePatches) : lightProbePatches; + } + return patches; } @@ -713,6 +831,9 @@ export class Model { this._initLocalDescriptors(subModelIndex); this._updateLocalDescriptors(subModelIndex, subModel.descriptorSet); + this._initLocalSHDescriptors(subModelIndex); + this._updateLocalSHDescriptors(subModelIndex, subModel.descriptorSet); + this._initWorldBoundDescriptors(subModelIndex); if (subModel.worldBoundDescriptorSet) { @@ -742,6 +863,25 @@ export class Model { } } + protected _initLocalSHDescriptors (subModelIndex: number) { + if (!EDITOR && !this._useLightProbe) { + return; + } + + if (!this._localSHData) { + this._localSHData = new Float32Array(UBOSH.COUNT); + } + + if (!this._localSHBuffer) { + this._localSHBuffer = this._device.createBuffer(new BufferInfo( + BufferUsageBit.UNIFORM | BufferUsageBit.TRANSFER_DST, + MemoryUsageBit.DEVICE, + UBOSH.SIZE, + UBOSH.SIZE, + )); + } + } + protected _initWorldBoundDescriptors (subModelIndex: number) { if (!this._worldBoundBuffer) { this._worldBoundBuffer = this._device.createBuffer(new BufferInfo( @@ -757,6 +897,10 @@ export class Model { if (this._localBuffer) descriptorSet.bindBuffer(UBOLocal.BINDING, this._localBuffer); } + protected _updateLocalSHDescriptors (subModelIndex: number, descriptorSet: DescriptorSet) { + if (this._localSHBuffer) descriptorSet.bindBuffer(UBOSH.BINDING, this._localSHBuffer); + } + protected _updateWorldBoundDescriptors (subModelIndex: number, descriptorSet: DescriptorSet) { if (this._worldBoundBuffer) descriptorSet.bindBuffer(UBOWorldBound.BINDING, this._worldBoundBuffer); } diff --git a/cocos/rendering/define.ts b/cocos/rendering/define.ts index 3e776ff41e7..165b316d527 100644 --- a/cocos/rendering/define.ts +++ b/cocos/rendering/define.ts @@ -133,6 +133,7 @@ export enum ModelLocalBindings { UBO_SKINNING_TEXTURE, UBO_MORPH, UBO_UI_LOCAL, + UBO_SH, SAMPLER_JOINTS, SAMPLER_MORPH_POSITION, @@ -567,6 +568,37 @@ export class UBOUILocal { // pre one vec4 localDescriptorSetLayout.layouts[UBOUILocal.NAME] = UBOUILocal.LAYOUT; localDescriptorSetLayout.bindings[UBOUILocal.BINDING] = UBOUILocal.DESCRIPTOR; +/** + * @en The SH uniform buffer object + * @zh 球谐 UBO。 + */ +export class UBOSH { + public static readonly SH_LINEAR_CONST_R_OFFSET = 0; + public static readonly SH_LINEAR_CONST_G_OFFSET = UBOSH.SH_LINEAR_CONST_R_OFFSET + 4; + public static readonly SH_LINEAR_CONST_B_OFFSET = UBOSH.SH_LINEAR_CONST_G_OFFSET + 4; + public static readonly SH_QUADRATIC_R_OFFSET = UBOSH.SH_LINEAR_CONST_B_OFFSET + 4; + public static readonly SH_QUADRATIC_G_OFFSET = UBOSH.SH_QUADRATIC_R_OFFSET + 4; + public static readonly SH_QUADRATIC_B_OFFSET = UBOSH.SH_QUADRATIC_G_OFFSET + 4; + public static readonly SH_QUADRATIC_A_OFFSET = UBOSH.SH_QUADRATIC_B_OFFSET + 4; + public static readonly COUNT = UBOSH.SH_QUADRATIC_A_OFFSET + 4; + public static readonly SIZE = UBOSH.COUNT * 4; + + public static readonly NAME = 'CCSH'; + public static readonly BINDING = ModelLocalBindings.UBO_SH; + public static readonly DESCRIPTOR = new DescriptorSetLayoutBinding(UBOSH.BINDING, DescriptorType.UNIFORM_BUFFER, 1, ShaderStageFlagBit.FRAGMENT); + public static readonly LAYOUT = new UniformBlock(SetIndex.LOCAL, UBOSH.BINDING, UBOSH.NAME, [ + new Uniform('cc_sh_linear_const_r', Type.FLOAT4, 1), + new Uniform('cc_sh_linear_const_g', Type.FLOAT4, 1), + new Uniform('cc_sh_linear_const_b', Type.FLOAT4, 1), + new Uniform('cc_sh_quadratic_r', Type.FLOAT4, 1), + new Uniform('cc_sh_quadratic_g', Type.FLOAT4, 1), + new Uniform('cc_sh_quadratic_b', Type.FLOAT4, 1), + new Uniform('cc_sh_quadratic_a', Type.FLOAT4, 1), + ], 1); +} +localDescriptorSetLayout.layouts[UBOSH.NAME] = UBOSH.LAYOUT; +localDescriptorSetLayout.bindings[UBOSH.BINDING] = UBOSH.DESCRIPTOR; + /** * @en The sampler for joint texture * @zh 骨骼纹理采样器。 diff --git a/cocos/rendering/pipeline-scene-data.ts b/cocos/rendering/pipeline-scene-data.ts index de0e592b50a..9897253ae50 100644 --- a/cocos/rendering/pipeline-scene-data.ts +++ b/cocos/rendering/pipeline-scene-data.ts @@ -31,6 +31,7 @@ import { Light } from '../render-scene/scene/light'; import { Material } from '../asset/assets'; import { Pass } from '../render-scene/core/pass'; import { CSMLayers } from './shadow/csm-layers'; +import { LightProbes } from '../gi/light-probe'; const GEOMETRY_RENDERER_TECHNIQUE_COUNT = 6; @@ -68,6 +69,7 @@ export class PipelineSceneData { public shadows: Shadows = new Shadows(); public csmLayers: CSMLayers = new CSMLayers(); public octree: Octree = new Octree(); + public lightProbes: LightProbes = new LightProbes(); /** * @en The list for valid punctual Lights, only available after the scene culling of the current frame. diff --git a/cocos/scene-graph/node-enum.ts b/cocos/scene-graph/node-enum.ts index ed7d57a3f9e..258faa6767b 100644 --- a/cocos/scene-graph/node-enum.ts +++ b/cocos/scene-graph/node-enum.ts @@ -24,6 +24,7 @@ */ import { legacyCC } from '../core/global-exports'; +import { Enum } from '../core/value-types'; /** * @en Node's coordinate space @@ -77,3 +78,27 @@ export enum TransformBit { } legacyCC.internal.TransformBit = TransformBit; + +/** + * @en Node's mobility + * @zh 节点的移动性 + */ +export const MobilityMode = Enum({ + /** + * @en Static node + * @zh 静态节点 + */ + Static: 0, + + /** + * @en Stationary node + * @zh 固定节点 + */ + Stationary: 1, + + /** + * @en Movable node + * @zh 可移动节点 + */ + Movable: 2, +}); diff --git a/cocos/scene-graph/node-event.ts b/cocos/scene-graph/node-event.ts index 2123b5a0213..d1bd3201ee8 100644 --- a/cocos/scene-graph/node-event.ts +++ b/cocos/scene-graph/node-event.ts @@ -159,6 +159,24 @@ export enum NodeEventType { */ TRANSFORM_CHANGED = 'transform-changed', + /** + * @en + * The event type for position, rotation, scale changed of ancestor nodes including current node. + * Use the type parameter as `Node.TransformBit` to check which part is changed + * + * @zh + * 祖先或当前节点改变位置、旋转或缩放事件。如果具体需要判断是哪一个事件,可通过判断回调的第一个参数类型是 `Node.TransformBit` 中的哪一个来获取 + */ + ANCESTOR_TRANSFORM_CHANGED = 'ancestor-transform-changed', + + /** + * @en + * The event occur when mobility changed. + * @zh + * 当可移动性改变时触发的事件 + */ + MOBILITY_CHANGED = 'mobility-changed', + /** * @en The event type for notifying the host scene has been changed for a persist node. * @zh 当场景常驻节点的场景发生改变时触发的事件,一般在切换场景过程中触发。 @@ -267,4 +285,12 @@ export enum NodeEventType { * 当节点上移除组件时触发的事件 */ COMPONENT_REMOVED = 'component-removed', + + /** + * @en + * The event occur when light probe changed in light probe group. + * @zh + * 当光照探针组组件的探针改变时触发的事件 + */ + LIGHT_PROBE_CHANGED = 'light-probe-changed', } diff --git a/cocos/scene-graph/node.jsb.ts b/cocos/scene-graph/node.jsb.ts index 91a928161fa..f386e7ead8c 100644 --- a/cocos/scene-graph/node.jsb.ts +++ b/cocos/scene-graph/node.jsb.ts @@ -1359,12 +1359,15 @@ serializable(NodeProto, '_prefab'); serializable(NodeProto, '_lpos'); serializable(NodeProto, '_lrot'); serializable(NodeProto, '_lscale'); +serializable(NodeProto, '_mobility'); serializable(NodeProto, '_layer'); serializable(NodeProto, '_euler'); const eulerAnglesDescriptor = Object.getOwnPropertyDescriptor(NodeProto, 'eulerAngles'); type(Vec3)(NodeProto, 'eulerAngles', eulerAnglesDescriptor); const angleDescriptor = Object.getOwnPropertyDescriptor(NodeProto, 'angle'); editable(NodeProto, 'angle', angleDescriptor); +const mobilityDescriptor = Object.getOwnPropertyDescriptor(NodeProto, 'mobility'); +editable(NodeProto, 'mobility', mobilityDescriptor); const layerDescriptor = Object.getOwnPropertyDescriptor(NodeProto, 'layer'); editable(NodeProto, 'layer', layerDescriptor); diff --git a/cocos/scene-graph/node.ts b/cocos/scene-graph/node.ts index d05c6e9ed5a..5b746fe0e45 100644 --- a/cocos/scene-graph/node.ts +++ b/cocos/scene-graph/node.ts @@ -31,7 +31,7 @@ import { legacyCC } from '../core/global-exports'; import { nodePolyfill } from './node-dev'; import { ISchedulable } from '../core/scheduler'; import { approx, EPSILON, Mat3, Mat4, Quat, Vec3 } from '../core/math'; -import { NodeSpace, TransformBit } from './node-enum'; +import { MobilityMode, NodeSpace, TransformBit } from './node-enum'; import { CustomSerializable, editorExtrasTag, SerializationContext, SerializationOutput, serializeTag } from '../core/data'; import { errorID, warnID, error, log, getError } from '../core/platform/debug'; import { Component } from './component'; @@ -1464,6 +1464,9 @@ export class Node extends CCObject implements ISchedulable, CustomSerializable { @serializable protected _lscale = new Vec3(1, 1, 1); + @serializable + protected _mobility = MobilityMode.Static; + @serializable protected _layer = Layers.Enum.DEFAULT; // the layer this node belongs to @@ -1671,6 +1674,17 @@ export class Node extends CCObject implements ISchedulable, CustomSerializable { return Vec3.transformQuat(new Vec3(), Vec3.RIGHT, this.worldRotation); } + @editable + @type(MobilityMode) + set mobility (m) { + this._mobility = m; + this.emit(NodeEventType.MOBILITY_CHANGED); + } + + get mobility () { + return this._mobility; + } + /** * @en Layer of the current Node, it affects raycast, physics etc, refer to [[Layers]] * @zh 节点所属层,主要影响射线检测、物理碰撞等,参考 [[Layers]] @@ -1930,6 +1944,7 @@ export class Node extends CCObject implements ISchedulable, CustomSerializable { cur._dirtyFlags |= dirtyBit; cur.hasChangedFlags = hasChangedFlags | dirtyBit; + cur.emit(NodeEventType.ANCESTOR_TRANSFORM_CHANGED, dirtyBit); children = cur._children; l = children.length; diff --git a/cocos/scene-graph/scene-globals.jsb.ts b/cocos/scene-graph/scene-globals.jsb.ts index f582d06300a..3c481838f34 100644 --- a/cocos/scene-graph/scene-globals.jsb.ts +++ b/cocos/scene-graph/scene-globals.jsb.ts @@ -163,6 +163,10 @@ legacyCC.ShadowsInfo = ShadowsInfo; export const OctreeInfo = jsb.OctreeInfo; legacyCC.OctreeInfo = OctreeInfo; +// @ts-ignore +export const LightProbeInfo = jsb.LightProbeInfo; +//legacyCC.LightProbeInfo = LightProbeInfo; + // @ts-ignore export const SceneGlobals = jsb.SceneGlobals; legacyCC.SceneGlobals = SceneGlobals; @@ -176,6 +180,7 @@ legacyCC.SceneGlobals = SceneGlobals; this._skyboxRef = null; this._fogRef = null; this._octreeRef = null; + this._lightProbeRef = null; }; Object.defineProperty(sceneGlobalsProto, 'ambient', { @@ -249,6 +254,18 @@ legacyCC.SceneGlobals = SceneGlobals; this.setOctreeInfo(v); }, }); + + Object.defineProperty(sceneGlobalsProto, 'lightProbeInfo', { + enumerable: true, + configurable: true, + get () { + return this._lightProbeRef; + }, + set (v) { + this._lightProbeRef = v; + this.setLightProbeInfo(v); + }, + }); })(); // handle meta data, it is generated automatically @@ -266,6 +283,8 @@ type(SkyboxInfo)(SceneGlobalsProto, 'skybox', skyboxDescriptor); editable(SceneGlobalsProto, 'skybox', skyboxDescriptor); serializable(SceneGlobalsProto, 'octree'); editable(SceneGlobalsProto, 'octree'); +serializable(SceneGlobalsProto, 'lightProbeInfo'); +editable(SceneGlobalsProto, 'lightProbeInfo'); ccclass('cc.SceneGlobals')(SceneGlobals); const OctreeInfoProto = OctreeInfo.prototype; @@ -456,3 +475,27 @@ tooltip('i18n:ambient.groundLightingColor')(AmbientInfoProto, 'groundLightingCol editable(AmbientInfoProto, 'groundLightingColor', groundLightingColorDescriptor); visible(() => { /* Need to copy source code */ })(AmbientInfoProto, 'groundLightingColor', groundLightingColorDescriptor); ccclass('cc.AmbientInfo')(AmbientInfo); + +const LightProbeInfoProto = LightProbeInfo.prototype; +serializable(LightProbeInfoProto, '_enabled'); +serializable(LightProbeInfoProto, '_reduceRinging'); +serializable(LightProbeInfoProto, '_showProbe'); +serializable(LightProbeInfoProto, '_showWireframe'); +serializable(LightProbeInfoProto, '_showConvex'); +serializable(LightProbeInfoProto, '_data'); +const lightProbeEnabledDescriptor = Object.getOwnPropertyDescriptor(LightProbeInfo, 'enabled'); +tooltip('i18n:light_probe.enabled')(LightProbeInfo, 'enabled', lightProbeEnabledDescriptor); +editable(LightProbeInfo, 'enabled', lightProbeEnabledDescriptor); +const lightProbeReduceRingingDescriptor = Object.getOwnPropertyDescriptor(LightProbeInfo, 'reduceRinging'); +tooltip('i18n:light_probe.reduceRinging')(LightProbeInfo, 'reduceRinging', lightProbeReduceRingingDescriptor); +editable(LightProbeInfo, 'reduceRinging', lightProbeReduceRingingDescriptor); +const lightProbeShowProbeDescriptor = Object.getOwnPropertyDescriptor(LightProbeInfo, 'showProbe'); +tooltip('i18n:light_probe.showProbe')(LightProbeInfo, 'showProbe', lightProbeShowProbeDescriptor); +editable(LightProbeInfo, 'showProbe', lightProbeShowProbeDescriptor); +const lightProbeShowWireframeDescriptor = Object.getOwnPropertyDescriptor(LightProbeInfo, 'showWireframe'); +tooltip('i18n:light_probe.showWireframe')(LightProbeInfo, 'showWireframe', lightProbeShowWireframeDescriptor); +editable(LightProbeInfo, 'showWireframe', lightProbeShowWireframeDescriptor); +const lightProbeShowConvexDescriptor = Object.getOwnPropertyDescriptor(LightProbeInfo, 'showConvex'); +tooltip('i18n:light_probe.showConvex')(LightProbeInfo, 'showConvex', lightProbeShowConvexDescriptor); +editable(LightProbeInfo, 'showConvex', lightProbeShowConvexDescriptor); +ccclass('cc.LightProbeInfo')(LightProbeInfo); \ No newline at end of file diff --git a/cocos/scene-graph/scene-globals.ts b/cocos/scene-graph/scene-globals.ts index 081edd0e5fe..aae549484bc 100644 --- a/cocos/scene-graph/scene-globals.ts +++ b/cocos/scene-graph/scene-globals.ts @@ -31,11 +31,14 @@ import { Shadows, ShadowType, ShadowSize } from '../render-scene/scene/shadows'; import { Skybox, EnvironmentLightingType } from '../render-scene/scene/skybox'; import { Octree } from '../render-scene/scene/octree'; import { Fog, FogType } from '../render-scene/scene/fog'; +import { LightProbesData, LightProbes } from '../gi/light-probe/light-probe'; import { Node } from './node'; import { legacyCC } from '../core/global-exports'; import { Root } from '../root'; import { warnID } from '../core/platform/debug'; import { Material } from '../asset/assets/material'; +import { Tetrahedron, Vertex } from '../gi/light-probe/delaunay'; +import { LightProbeGroup } from '../gi/light-probe/light-probe-group'; const _up = new Vec3(0, 1, 0); const _v3 = new Vec3(); @@ -1051,6 +1054,197 @@ export class OctreeInfo { this._resource.initialize(this); } } +legacyCC.OctreeInfo = OctreeInfo; + +/** + * @en light probe configuration + * @zh 光照探针配置 + */ +@ccclass('cc.LightProbeInfo') +export class LightProbeInfo { + /** + * @en Whether activate light probe + * @zh 是否启用光照探针 + */ + @editable + @tooltip('i18n:light_probe.enabled') + set enabled (val: boolean) { + if (this._enabled === val) return; + this._enabled = val; + if (this._resource) { + this._resource.enabled = val; + } + } + get enabled (): boolean { + return this._enabled; + } + + /** + * @en Reduce ringing of light probe + * @zh 减少光照探针的振铃效果 + */ + @editable + @range([0.0, 0.05, 0.001]) + @slide + @type(CCFloat) + @tooltip('i18n:light_probe.reduceRinging') + set reduceRinging (val: number) { + if (this._reduceRinging === val) return; + this._reduceRinging = val; + if (this._resource) { + this._resource.reduceRinging = val; + } + } + get reduceRinging (): number { + return this._reduceRinging; + } + + /** + * @en Whether to show light probe + * @zh 是否显示光照探针 + */ + @editable + @tooltip('i18n:light_probe.showProbe') + set showProbe (val: boolean) { + if (this._showProbe === val) return; + this._showProbe = val; + if (this._resource) { + this._resource.showProbe = val; + } + } + get showProbe (): boolean { + return this._showProbe; + } + + /** + * @en Whether to show light probe's connection + * @zh 是否显示光照探针连线 + */ + @editable + @tooltip('i18n:light_probe.showWireframe') + set showWireframe (val: boolean) { + if (this._showWireframe === val) return; + this._showWireframe = val; + if (this._resource) { + this._resource.showWireframe = val; + } + } + get showWireframe (): boolean { + return this._showWireframe; + } + + /** + * @en Whether to show light probe's convex + * @zh 是否显示光照探针凸包 + */ + @editable + @tooltip('i18n:light_probe.showConvex') + set showConvex (val: boolean) { + if (this._showConvex === val) return; + this._showConvex = val; + if (this._resource) { + this._resource.showConvex = val; + } + } + get showConvex (): boolean { + return this._showConvex; + } + + /** + * @en light probe's vertex and tetrahedron data + * @zh 光照探针顶点及四面体数据 + */ + set data (val: LightProbesData | null) { + if (this._data === val) return; + this._data = val; + if (this._resource) { + this._resource.data = val; + } + } + get data (): LightProbesData | null { + return this._data; + } + + @serializable + protected _enabled = false; + @serializable + protected _reduceRinging = 0.0; + @serializable + protected _showProbe = true; + @serializable + protected _showWireframe = true; + @serializable + protected _showConvex = false; + @serializable + protected _data: LightProbesData | null = null; + @serializable + protected _lightProbeGroups: LightProbeGroup[] = []; + + protected _resource: LightProbes | null = null; + + public activate (resource: LightProbes) { + this._resource = resource; + this._resource.initialize(this); + } + + public addGroup (group: LightProbeGroup): boolean { + if (!group) { + return false; + } + + if (this._lightProbeGroups.includes(group)) { + return false; + } + + this._lightProbeGroups.push(group); + + return true; + } + + public removeGroup (group: LightProbeGroup): boolean { + if (!group) { + return false; + } + + const index = this._lightProbeGroups.findIndex((element) => element === group); + if (index === -1) { + return false; + } + + this._lightProbeGroups.splice(index, 1); + + return true; + } + + public update () { + if (!this._data) { + this._data = new LightProbesData(); + if (this._resource) { + this._resource.data = this._data; + } + } + + const probes: Vec3[] = []; + for (let i = 0; i < this._lightProbeGroups.length; i++) { + const group = this._lightProbeGroups[i]; + if (!group.node) { + continue; + } + + const worldPosition = group.node.worldPosition; + const count = group.probes.length; + + for (let j = 0; j < count; j++) { + const position = new Vec3(0, 0, 0); + Vec3.add(position, group.probes[j], worldPosition); + probes.push(position); + } + } + + this._data.build(probes); + } +} +//legacyCC.LightProbeInfo = LightProbeInfo; /** * @en All scene related global parameters, it affects all content in the corresponding scene @@ -1106,6 +1300,14 @@ export class SceneGlobals { @serializable public octree = new OctreeInfo(); + /** + * @en Light probe related configuration + * @zh 光照探针相关配置 + */ + @editable + @serializable + public lightProbeInfo = new LightProbeInfo(); + /** * @en Activate and initialize the global configurations of the scene, no need to invoke manually. * @zh 启用和初始化场景全局配置,不需要手动调用 @@ -1118,6 +1320,7 @@ export class SceneGlobals { this.shadows.activate(sceneData.shadows); this.fog.activate(sceneData.fog); this.octree.activate(sceneData.octree); + this.lightProbeInfo.activate(sceneData.lightProbes); const root = legacyCC.director.root as Root; root.onGlobalPipelineStateChanged(); diff --git a/editor/assets/chunks/builtin/internal/sprite-texture.chunk b/editor/assets/chunks/builtin/internal/sprite-texture.chunk index d51b56d0694..7e53ac974b2 100644 --- a/editor/assets/chunks/builtin/internal/sprite-texture.chunk +++ b/editor/assets/chunks/builtin/internal/sprite-texture.chunk @@ -1,4 +1,4 @@ // Copyright (c) 2017-2020 Xiamen Yaji Software Co., Ltd. #pragma builtin(local) -layout(set = 2, binding = 11) uniform sampler2D cc_spriteTexture; +layout(set = 2, binding = 12) uniform sampler2D cc_spriteTexture; diff --git a/editor/assets/chunks/builtin/uniforms/cc-light-map.chunk b/editor/assets/chunks/builtin/uniforms/cc-light-map.chunk index c4fc91ed3c2..4df72e67441 100644 --- a/editor/assets/chunks/builtin/uniforms/cc-light-map.chunk +++ b/editor/assets/chunks/builtin/uniforms/cc-light-map.chunk @@ -1,2 +1,2 @@ #pragma builtin(local) -layout(set = 2, binding = 10) uniform sampler2D cc_lightingMap; +layout(set = 2, binding = 11) uniform sampler2D cc_lightingMap; diff --git a/editor/assets/chunks/builtin/uniforms/cc-morph.chunk b/editor/assets/chunks/builtin/uniforms/cc-morph.chunk index 6f0e7691587..11dbfa2d9b3 100644 --- a/editor/assets/chunks/builtin/uniforms/cc-morph.chunk +++ b/editor/assets/chunks/builtin/uniforms/cc-morph.chunk @@ -10,15 +10,15 @@ layout(set = 2, binding = 4) uniform CCMorph { #if CC_MORPH_TARGET_HAS_POSITION #pragma builtin(local) - layout(set = 2, binding = 7) uniform sampler2D cc_PositionDisplacements; + layout(set = 2, binding = 8) uniform sampler2D cc_PositionDisplacements; #endif #if CC_MORPH_TARGET_HAS_NORMAL #pragma builtin(local) - layout(set = 2, binding = 8) uniform sampler2D cc_NormalDisplacements; + layout(set = 2, binding = 9) uniform sampler2D cc_NormalDisplacements; #endif #if CC_MORPH_TARGET_HAS_TANGENT #pragma builtin(local) - layout(set = 2, binding = 9) uniform sampler2D cc_TangentDisplacements; + layout(set = 2, binding = 10) uniform sampler2D cc_TangentDisplacements; #endif diff --git a/editor/assets/chunks/builtin/uniforms/cc-sh.chunk b/editor/assets/chunks/builtin/uniforms/cc-sh.chunk new file mode 100644 index 00000000000..6f1e80e27fd --- /dev/null +++ b/editor/assets/chunks/builtin/uniforms/cc-sh.chunk @@ -0,0 +1,12 @@ +// Copyright (c) 2017-2020 Xiamen Yaji Software Co., Ltd. + +#pragma builtin(local) +layout(set = 2, binding = 6) uniform CCSH { + vec4 cc_sh_linear_const_r; + vec4 cc_sh_linear_const_g; + vec4 cc_sh_linear_const_b; + vec4 cc_sh_quadratic_r; + vec4 cc_sh_quadratic_g; + vec4 cc_sh_quadratic_b; + vec4 cc_sh_quadratic_a; +}; diff --git a/editor/assets/chunks/builtin/uniforms/cc-sh.chunk.meta b/editor/assets/chunks/builtin/uniforms/cc-sh.chunk.meta new file mode 100644 index 00000000000..fe5029e8a8e --- /dev/null +++ b/editor/assets/chunks/builtin/uniforms/cc-sh.chunk.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.0.7", + "importer": "effect-header", + "imported": true, + "uuid": "2c62fe23-f1f4-49f1-a08f-e5e6c650682f", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/editor/assets/chunks/builtin/uniforms/cc-skinning.chunk b/editor/assets/chunks/builtin/uniforms/cc-skinning.chunk index 5a4d4806eeb..c013c898ec9 100644 --- a/editor/assets/chunks/builtin/uniforms/cc-skinning.chunk +++ b/editor/assets/chunks/builtin/uniforms/cc-skinning.chunk @@ -12,7 +12,7 @@ highp vec4 cc_jointAnimInfo; // frameID }; #pragma builtin(local) - layout(set = 2, binding = 6) uniform highp sampler2D cc_jointTexture; + layout(set = 2, binding = 7) uniform highp sampler2D cc_jointTexture; /** * Although tempting, don't opt the offset arithmetics out to CPU (could * be reduced to a single MAD). The enlarged numerical range could require @@ -33,7 +33,7 @@ #else #if CC_USE_REAL_TIME_JOINT_TEXTURE #pragma builtin(local) - layout(set = 2, binding = 6) uniform highp sampler2D cc_realtimeJoint; + layout(set = 2, binding = 7) uniform highp sampler2D cc_realtimeJoint; #else #pragma builtin(local) layout(set = 2, binding = 3) uniform CCSkinning { diff --git a/editor/assets/chunks/common/lighting/sh.chunk b/editor/assets/chunks/common/lighting/sh.chunk new file mode 100644 index 00000000000..d5502b4ce95 --- /dev/null +++ b/editor/assets/chunks/common/lighting/sh.chunk @@ -0,0 +1,23 @@ +#include + +vec3 SHEvaluate(vec3 normal) +{ + vec3 result; + + // calculate linear and const terms + vec4 normal4 = vec4(normal, 1.0); + result.r = dot(cc_sh_linear_const_r, normal4); + result.g = dot(cc_sh_linear_const_g, normal4); + result.b = dot(cc_sh_linear_const_b, normal4); + + // calculate quadratic terms + vec4 n14 = normal.xyzz * normal.yzzx; + float n5 = normal.x * normal.x - normal.y * normal.y; + + result.r += dot(cc_sh_quadratic_r, n14); + result.g += dot(cc_sh_quadratic_g, n14); + result.b += dot(cc_sh_quadratic_b, n14); + result += (cc_sh_quadratic_a.rgb * n5); + + return result; +} diff --git a/editor/assets/chunks/common/lighting/sh.chunk.meta b/editor/assets/chunks/common/lighting/sh.chunk.meta new file mode 100644 index 00000000000..36708fc9672 --- /dev/null +++ b/editor/assets/chunks/common/lighting/sh.chunk.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.0.7", + "importer": "effect-header", + "imported": true, + "uuid": "c8728e39-6dca-4d22-a4ee-cc1aefb0198a", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/editor/assets/chunks/legacy/shading-standard-base.chunk b/editor/assets/chunks/legacy/shading-standard-base.chunk index 9808cddb1da..2de3871eb14 100644 --- a/editor/assets/chunks/legacy/shading-standard-base.chunk +++ b/editor/assets/chunks/legacy/shading-standard-base.chunk @@ -16,6 +16,10 @@ #endif #endif +#if CC_LIGHT_PROBE_ENABLED && CC_USE_LIGHT_PROBE +#include +#endif + float GGXMobile (float roughness, float NoH, vec3 H, vec3 N) { vec3 NxH = cross(N, H); float OneMinusNoHSqr = dot(NxH, NxH); @@ -147,7 +151,7 @@ vec4 CCStandardShadingBase (StandardSurface s, vec4 shadowPos) { #if CC_USE_IBL - #if CC_USE_DIFFUSEMAP + #if CC_USE_DIFFUSEMAP && (!CC_LIGHT_PROBE_ENABLED || !CC_USE_LIGHT_PROBE) // Diffuse reflection irradiance vec4 diffuseMap = texture(cc_diffuseMap, N); #if CC_USE_DIFFUSEMAP == IBL_RGBE @@ -175,7 +179,12 @@ vec4 CCStandardShadingBase (StandardSurface s, vec4 shadowPos) { finalColor += env * cc_ambientSky.w * specular * s.occlusion; #endif +#if CC_LIGHT_PROBE_ENABLED && CC_USE_LIGHT_PROBE + ambDiff = SHEvaluate(N); + finalColor += ambDiff.rgb * diffuse * s.occlusion; +#else finalColor += ambDiff.rgb * cc_ambientSky.w * diffuse * s.occlusion; +#endif finalColor += s.emissive; diff --git a/editor/assets/chunks/lighting-models/model-functions/standard.chunk b/editor/assets/chunks/lighting-models/model-functions/standard.chunk index 9ee80346a55..ee705dcd3d1 100644 --- a/editor/assets/chunks/lighting-models/model-functions/standard.chunk +++ b/editor/assets/chunks/lighting-models/model-functions/standard.chunk @@ -1,5 +1,8 @@ #include #include +#if CC_LIGHT_PROBE_ENABLED && CC_USE_LIGHT_PROBE +#include +#endif bool CCSurfacesLightingEnableShadow(in float NoL) { @@ -82,7 +85,7 @@ void CCSurfacesLightingCalculateEnvironment(inout LightingResult lightingResult, vec3 envSpec = vec3(0.0); #if CC_USE_IBL - #if CC_USE_DIFFUSEMAP + #if CC_USE_DIFFUSEMAP && (!CC_LIGHT_PROBE_ENABLED || !CC_USE_LIGHT_PROBE) // Diffuse irradiance vec4 diffuseMap = texture(cc_diffuseMap, lightingData.N); #if CC_USE_DIFFUSEMAP == IBL_RGBE @@ -109,7 +112,13 @@ void CCSurfacesLightingCalculateEnvironment(inout LightingResult lightingResult, #endif #endif +#if CC_LIGHT_PROBE_ENABLED && CC_USE_LIGHT_PROBE + ambDiff = SHEvaluate(lightingData.N); + lightingResult.environmentDiffuse = ambDiff; +#else lightingResult.environmentDiffuse = ambDiff.rgb * cc_ambientSky.w; +#endif + lightingResult.environmentSpecular = envSpec * cc_ambientSky.w; } diff --git a/editor/assets/default_prefab/light/Light Probe Group.prefab b/editor/assets/default_prefab/light/Light Probe Group.prefab new file mode 100644 index 00000000000..e0115524e4a --- /dev/null +++ b/editor/assets/default_prefab/light/Light Probe Group.prefab @@ -0,0 +1,103 @@ +[ + { + "__type__": "cc.Prefab", + "_name": "Light Probe Group", + "_objFlags": 0, + "_native": "", + "data": { + "__id__": 1 + }, + "optimizationPolicy": 0, + "persistent": false, + "asyncLoadAssets": false + }, + { + "__type__": "cc.Node", + "_name": "Light Probe Group", + "_objFlags": 0, + "__editorExtras__": {}, + "_parent": null, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 2 + } + ], + "_prefab": { + "__id__": 4 + }, + "_lpos": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_mobility": 0, + "_layer": 1073741824, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "" + }, + { + "__type__": "cc.LightProbeGroup", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 1 + }, + "_enabled": true, + "__prefab": { + "__id__": 3 + }, + "_probes": [], + "_method": 0, + "_minPos": { + "__type__": "cc.Vec3", + "x": -10, + "y": -10, + "z": -10 + }, + "_maxPos": { + "__type__": "cc.Vec3", + "x": 10, + "y": 10, + "z": 10 + }, + "_nProbesX": 3, + "_nProbesY": 3, + "_nProbesZ": 3, + "_id": "" + }, + { + "__type__": "cc.CompPrefabInfo", + "fileId": "17bqOQpnFHppFmHaK/y+jI" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "71lH762IZI7qrxgIM9ikao" + } +] \ No newline at end of file diff --git a/editor/assets/default_prefab/light/Light Probe Group.prefab.meta b/editor/assets/default_prefab/light/Light Probe Group.prefab.meta new file mode 100644 index 00000000000..17f3a66836c --- /dev/null +++ b/editor/assets/default_prefab/light/Light Probe Group.prefab.meta @@ -0,0 +1,13 @@ +{ + "ver": "1.1.40", + "importer": "prefab", + "imported": true, + "uuid": "50dfda40-7c45-4868-a876-2fe2a4c782f4", + "files": [ + ".json" + ], + "subMetas": {}, + "userData": { + "syncNodeName": "Light Probe Group" + } +} diff --git a/editor/assets/effects/builtin-reflection-deferred.effect b/editor/assets/effects/builtin-reflection-deferred.effect index 79bb8e86957..9fef010214b 100644 --- a/editor/assets/effects/builtin-reflection-deferred.effect +++ b/editor/assets/effects/builtin-reflection-deferred.effect @@ -227,7 +227,7 @@ CCProgram standard-fs %{ } #pragma builtin(local) - layout(set = 2, binding = 12) uniform sampler2D cc_reflectionTexture; + layout(set = 2, binding = 13) uniform sampler2D cc_reflectionTexture; layout(location = 0) out vec4 fragColorX; diff --git a/editor/assets/effects/builtin-spine.effect b/editor/assets/effects/builtin-spine.effect index c355817e2c2..eeddef1f187 100644 --- a/editor/assets/effects/builtin-spine.effect +++ b/editor/assets/effects/builtin-spine.effect @@ -68,7 +68,7 @@ CCProgram sprite-fs %{ #endif in vec2 uv0; #pragma builtin(local) - layout(set = 2, binding = 11) uniform sampler2D cc_spriteTexture; + layout(set = 2, binding = 12) uniform sampler2D cc_spriteTexture; vec4 frag () { diff --git a/editor/assets/effects/builtin-sprite-renderer.effect b/editor/assets/effects/builtin-sprite-renderer.effect index 376c6b5c928..3f962912e64 100644 --- a/editor/assets/effects/builtin-sprite-renderer.effect +++ b/editor/assets/effects/builtin-sprite-renderer.effect @@ -44,7 +44,7 @@ CCProgram spriteRender-fs %{ in vec2 uv0; #pragma builtin(local) - layout(set = 2, binding = 11) uniform sampler2D cc_spriteTexture; + layout(set = 2, binding = 12) uniform sampler2D cc_spriteTexture; vec4 frag () { vec4 o = vec4(1, 1, 1, 1); diff --git a/editor/assets/effects/builtin-sprite.effect b/editor/assets/effects/builtin-sprite.effect index 86e1d95d05e..c3ce0e2d6e1 100644 --- a/editor/assets/effects/builtin-sprite.effect +++ b/editor/assets/effects/builtin-sprite.effect @@ -70,7 +70,7 @@ CCProgram sprite-fs %{ #if USE_TEXTURE in vec2 uv0; #pragma builtin(local) - layout(set = 2, binding = 11) uniform sampler2D cc_spriteTexture; + layout(set = 2, binding = 12) uniform sampler2D cc_spriteTexture; #endif vec4 frag () { diff --git a/editor/engine-features/render-config.json b/editor/engine-features/render-config.json index 994a57ce0d4..e56ec29509f 100644 --- a/editor/engine-features/render-config.json +++ b/editor/engine-features/render-config.json @@ -209,6 +209,13 @@ "wechatPlugin": true, "category": "3d" }, + "light-probe": { + "default": ["light-probe"], + "label": "i18n:ENGINE.features.light_probe.label", + "description": "i18n:ENGINE.features.light_probe.description", + "wechatPlugin": true, + "category": "3d" + }, "tiled-map": { "default": ["tiled-map"], "label": "i18n:ENGINE.features.tiled_map.label", diff --git a/editor/i18n/en/components.js b/editor/i18n/en/components.js index 7b68a87dfc9..875bb060027 100644 --- a/editor/i18n/en/components.js +++ b/editor/i18n/en/components.js @@ -14,7 +14,6 @@ module.exports = { export_error: 'This resource does not support exports outside of the project.', export_tips: 'Export custom particle data to plist file.', }, - prefab_link: { brief_help: 'Since the new Prefab system is not yet complete, the prefab that has a large difference with prefab asset cannot be automatically migrated. ' + @@ -29,6 +28,11 @@ module.exports = { change_children: 'Yes, change children', change_self: 'No, this object only', }, + lightProbeGroup:{ + generateTip: 'Regenerate probes in the scene', + generateWarnTip: 'Continuing to automatically generate a new probe will overwrite the existing probe, and all the data of the existing probe on this node will be lost. Do you want to continue?', + editTip: 'Toggle the probe editing mode in the scene', + }, missScriptTip: 'Script compilation fails, please check the error message and correct it, the component will be automatically restored after correction.', }, diff --git a/editor/i18n/en/localization.js b/editor/i18n/en/localization.js index 95036c73ffa..c6f6deaefc9 100755 --- a/editor/i18n/en/localization.js +++ b/editor/i18n/en/localization.js @@ -66,6 +66,7 @@ module.exports = { TiledMap: ``, Spine: ``, OctreeCulling: `${url}/${version}/manual/en/advanced-topics/native-scene-culling.html`, + LightProbe: ``, }, assets: { javascript: `${url}/${version}/manual/en/concepts/scene/node-component.html`, @@ -879,6 +880,10 @@ module.exports = { label: "Terrain", description: "Terrain support.", }, + light_probe: { + label: "Light Probe", + description: "Light Probe support.", + }, audio: { label: "Audio", description: "Audio playing support.", @@ -1026,4 +1031,19 @@ module.exports = { maxPos: 'The maximum position of the world bounding box.', depth: 'The depth of octree.', }, + light_probe: { + enabled: 'The switch of light probe.', + reduceRinging: 'The value to reduce ringing of light probe.', + showProbe: 'The switch of showing light probe.', + showWireframe: 'The switch of showing connection of light probe.', + showConvex: 'The switch of showing convex of light probe.', + }, + light_probe_group: { + method: 'The automatic generation algorithm of light probe.', + nProbesX: 'The number of probes generated in X axis.', + nProbesY: 'The number of probes generated in Y axis.', + nProbesZ: 'The number of probes generated in Z axis.', + minPos: 'The minimum point of the bounding box of the generated probes.', + maxPos: 'The maximum point of the bounding box of the generated probes.', + }, }; diff --git a/editor/i18n/zh/components.js b/editor/i18n/zh/components.js index 85671c20986..c1326431ff6 100644 --- a/editor/i18n/zh/components.js +++ b/editor/i18n/zh/components.js @@ -24,6 +24,11 @@ module.exports = { change_children: '连同修改子节点', change_self: '只修改节点自身', }, + lightProbeGroup:{ + generateTip: '重新生成场景里的探针数据', + generateWarnTip: '继续自动生成新探针会覆盖已有探针,该节点的已有探针数据会全部丢失,请问是否仍要继续?', + editTip: '切换场景中的探针编辑模式', + }, missScriptTip: "脚本编译失败,请检查报错信息并进行修正,该组件将在修正后自动还原。", }, diff --git a/editor/i18n/zh/localization.js b/editor/i18n/zh/localization.js index 7b285a707fe..34e687aeb59 100755 --- a/editor/i18n/zh/localization.js +++ b/editor/i18n/zh/localization.js @@ -66,6 +66,7 @@ module.exports = { TiledMap: ``, Spine: ``, OctreeCulling: `${url}/${version}/manual/zh/advanced-topics/native-scene-culling.html`, + LightProbe: ``, }, assets: { javascript: `${url}/${version}/manual/zh/concepts/scene/node-component.html`, @@ -860,6 +861,10 @@ module.exports = { label: "地形", description: "地形功能支持。", }, + light_probe: { + label: "光照探针", + description: "光照探针功能支持。", + }, audio: { label: "音频", description: "音频播放支持。", @@ -1007,4 +1012,19 @@ module.exports = { maxPos: '世界包围盒最大顶点的坐标', depth: '八叉树深度', }, + light_probe: { + enabled: '光照探针开关', + reduceRinging: '减少光照探针的振铃效果', + showProbe: '是否显示光照探针', + showWireframe: '是否显示光照探针连线', + showConvex: '是否显示光照探针凸包', + }, + light_probe_group: { + method: '光照探针的自动生成算法', + nProbesX: 'X轴生成的光照探针数量', + nProbesY: 'Y轴生成的光照探针数量', + nProbesZ: 'Z轴生成的光照探针数量', + minPos: '生成光照探针的包围盒最小点', + maxPos: '生成光照探针的包围盒最大点', + }, }; diff --git a/editor/inspector/components-footer.js b/editor/inspector/components-footer.js new file mode 100644 index 00000000000..88322929e72 --- /dev/null +++ b/editor/inspector/components-footer.js @@ -0,0 +1,5 @@ +const { join } = require('path'); + +module.exports = { + 'cc.LightProbeGroup': join(__dirname, './components/light-probe-group-footer.js'), +}; diff --git a/editor/inspector/components/class.js b/editor/inspector/components/class.js index 27dbf736d64..1aacc02b9ba 100644 --- a/editor/inspector/components/class.js +++ b/editor/inspector/components/class.js @@ -117,7 +117,7 @@ async function update(dump) { $prop.setAttribute('type', 'dump'); $panel.$propList[id] = $prop; - const _displayOrder = info.group?.displayOrder || info.displayOrder; + const _displayOrder = info.group?.displayOrder ?? info.displayOrder; $prop.displayOrder = _displayOrder === undefined ? index : Number(_displayOrder); if (info.group && dump.groups) { diff --git a/editor/inspector/components/light-probe-group-footer.js b/editor/inspector/components/light-probe-group-footer.js new file mode 100644 index 00000000000..ef564d47b9a --- /dev/null +++ b/editor/inspector/components/light-probe-group-footer.js @@ -0,0 +1,117 @@ +exports.template = ` +
+ Edit Area Box + Generate Probes + Enter Probe Edit Mode +
+`; + +exports.style = ` +.light-probe-group { + display: flex; + flex-wrap: wrap; + margin-top: 6px; +} +.box { + width: 48%; + margin-right: 2%; +} +.generate { + width: 48%; + margin-left: 2%; +} +.edit { + flex: 1; + margin-top: 8px; +} +`; + +exports.$ = { + box: '.box', + generate: '.generate', + edit: '.edit', +}; + +exports.update = async function(dump) { + const panel = this; + + if (dump) { + panel.dump = dump; + } + + const mode = await Editor.Message.request('scene', 'query-light-probe-edit-mode'); + panel.changeProbeMode(mode); + + const boxMode = await Editor.Message.request('scene', 'query-light-probe-bounding-box-edit-mode'); + panel.changeProbeBoxMode(boxMode); +}; + +exports.ready = function() { + const panel = this; + + panel.$.generate.addEventListener('confirm', async () => { + const result = await Editor.Dialog.warn(Editor.I18n.t('ENGINE.components.lightProbeGroup.generateWarnTip'), { + buttons: [Editor.I18n.t('ENGINE.dialog.confirm'), Editor.I18n.t('ENGINE.dialog.cancel')], + default: 0, + cancel: 1, + }); + + if (result.response === 0) { + const uuidObject = panel.dump.value.uuid; + const uuids = uuidObject.values ? uuidObject.values : [uuidObject.value]; + for (const uuid of uuids) { + Editor.Message.send('scene', 'execute-component-method', { + uuid: uuid, + name: 'generateLightProbes', + args: [], + }); + } + } + }); + + panel.$.edit.addEventListener('confirm', async () => { + await Editor.Message.request('scene', 'toggle-light-probe-edit-mode', !panel.sceneProbeMode); + }); + + panel.changeProbeModeBind = panel.changeProbeMode.bind(panel); + Editor.Message.addBroadcastListener('scene:light-probe-edit-mode-changed', panel.changeProbeModeBind); + + panel.$.box.addEventListener('confirm', async () => { + await Editor.Message.request('scene', 'toggle-light-probe-bounding-box-edit-mode', !panel.sceneProbeBoxMode); + }); + + panel.changeProbeBoxModeBind = panel.changeProbeBoxMode.bind(panel); + Editor.Message.addBroadcastListener('scene:light-probe-bounding-box-edit-mode-changed', panel.changeProbeBoxModeBind); +}; + +exports.close = function() { + const panel = this; + + Editor.Message.removeBroadcastListener('scene:light-probe-edit-mode-changed', panel.changeProbeModeBind); + Editor.Message.removeBroadcastListener('scene:light-probe-bounding-box-edit-mode-changed', panel.changeProbeBoxModeBind); +}; + +exports.methods = { + changeProbeMode(mode) { + const panel = this; + + panel.sceneProbeMode = mode; + + if (mode) { + panel.$.edit.innerText = 'Exit Probe Edit Mode'; + } else { + panel.$.edit.innerText = 'Enter Probe Edit Mode'; + } + }, + changeProbeBoxMode(mode) { + const panel = this; + + panel.sceneProbeBoxMode = mode; + + if (mode) { + panel.$.box.innerText = 'Done Edit'; + } else { + panel.$.box.innerText = 'Edit Area Box'; + } + }, +}; diff --git a/editor/inspector/contributions/node.js b/editor/inspector/contributions/node.js index d67a3c8576a..625b134ccfe 100644 --- a/editor/inspector/contributions/node.js +++ b/editor/inspector/contributions/node.js @@ -305,6 +305,7 @@ exports.template = /* html*/` +
@@ -367,6 +368,7 @@ exports.$ = { nodePosition: '.node > .position', nodeRotation: '.node > .rotation', nodeScale: '.node > .scale', + nodeMobility: '.node > .mobility', nodeLayer: '.node > .layer', nodeLayerSelect: '.node > .layer .layer-select', nodeLayerButton: '.node > .layer .layer-edit', @@ -908,6 +910,7 @@ const Elements = { panel.$.nodePosition.render(panel.dump.position); panel.$.nodeRotation.render(panel.dump.rotation); panel.$.nodeScale.render(panel.dump.scale); + panel.$.nodeMobility.render(panel.dump.mobility); panel.$.nodeLayer.render(panel.dump.layer); // 查找需要渲染的 component 列表 @@ -1885,4 +1888,5 @@ exports.beforeClose = async function beforeClose() { exports.config = { section: require('../components.js'), + footer: require('../components-footer.js'), }; diff --git a/editor/inspector/contributions/utils.js b/editor/inspector/contributions/utils.js index 13d414f5249..97ab77479b1 100644 --- a/editor/inspector/contributions/utils.js +++ b/editor/inspector/contributions/utils.js @@ -137,6 +137,7 @@ function translationDump(dump, dumps, assets) { dump.position.path = 'position'; dump.rotation.path = 'rotation'; dump.scale.path = 'scale'; + dump.mobility.path = 'mobility'; dump.layer.path = 'layer'; if (dumps) { dump.active.values = dumps.map((dump) => dump.active.value); @@ -144,6 +145,7 @@ function translationDump(dump, dumps, assets) { dump.position.values = dumps.map((dump) => dump.position.value); dump.rotation.values = dumps.map((dump) => dump.rotation.value); dump.scale.values = dumps.map((dump) => dump.scale.value); + dump.mobility.values = dumps.map((dump) => dump.mobility.value); dump.layer.values = dumps.map((dump) => dump.layer.value); } for (let i = 0; i < dump.__comps__.length; i++) { diff --git a/editor/inspector/utils/prop.js b/editor/inspector/utils/prop.js index 636d4ad2ece..a1259f00217 100644 --- a/editor/inspector/utils/prop.js +++ b/editor/inspector/utils/prop.js @@ -221,7 +221,7 @@ exports.updatePropByDump = function(panel, dump) { $prop.setAttribute('type', 'dump'); } - const _displayOrder = info.group?.displayOrder || info.displayOrder; + const _displayOrder = info.group?.displayOrder ?? info.displayOrder; $prop.displayOrder = _displayOrder === undefined ? index : Number(_displayOrder); if (element && element.displayOrder !== undefined) { diff --git a/exports/light-probe.ts b/exports/light-probe.ts new file mode 100644 index 00000000000..624e3e27da4 --- /dev/null +++ b/exports/light-probe.ts @@ -0,0 +1 @@ +import * as gi from '../cocos/gi/light-probe'; diff --git a/native/CMakeLists.txt b/native/CMakeLists.txt index ac75b166032..43f38139096 100644 --- a/native/CMakeLists.txt +++ b/native/CMakeLists.txt @@ -460,6 +460,20 @@ cocos_source_files( cocos/engine/Engine.h ) +############ gi +cocos_source_files( + cocos/gi/light-probe/AutoPlacement.cpp + cocos/gi/light-probe/AutoPlacement.h + cocos/gi/light-probe/Delaunay.cpp + cocos/gi/light-probe/Delaunay.h + cocos/gi/light-probe/LightProbe.cpp + cocos/gi/light-probe/LightProbe.h + cocos/gi/light-probe/PolynomialSolver.cpp + cocos/gi/light-probe/PolynomialSolver.h + cocos/gi/light-probe/SH.cpp + cocos/gi/light-probe/SH.h +) + ############ main if(NOT USE_SERVER_MODE AND (WINDOWS OR LINUX)) cocos_source_files( @@ -2100,6 +2114,8 @@ cocos_source_files( cocos/bindings/auto/jsb_pipeline_auto.h NO_WERROR NO_UBUILD cocos/bindings/auto/jsb_scene_auto.cpp cocos/bindings/auto/jsb_scene_auto.h + NO_WERROR NO_UBUILD cocos/bindings/auto/jsb_gi_auto.cpp + cocos/bindings/auto/jsb_gi_auto.h NO_WERROR NO_UBUILD cocos/bindings/auto/jsb_assets_auto.cpp cocos/bindings/auto/jsb_assets_auto.h NO_WERROR NO_UBUILD cocos/bindings/auto/jsb_geometry_auto.cpp diff --git a/native/cocos/bindings/auto/jsb_gi_auto.cpp b/native/cocos/bindings/auto/jsb_gi_auto.cpp new file mode 100644 index 00000000000..39c33f388fd --- /dev/null +++ b/native/cocos/bindings/auto/jsb_gi_auto.cpp @@ -0,0 +1,2861 @@ +// clang-format off + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 4.1.0 + * + * This file is not intended to be easily readable and contains a number of + * coding conventions designed to improve portability and efficiency. Do not make + * changes to this file unless you know what you are doing--modify the SWIG + * interface file instead. + * ----------------------------------------------------------------------------- */ + +/**************************************************************************** + Copyright (c) 2022 Xiamen Yaji Software Co., Ltd. + + http://www.cocos.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated engine source code (the "Software"), a limited, + worldwide, royalty-free, non-assignable, revocable and non-exclusive license + to use Cocos Creator solely to develop games on your target platforms. You shall + not use Cocos Creator software for developing other software or tools that's + used for developing games. You are not granted to publish, distribute, + sublicense, and/or sell copies of Cocos Creator. + + The software or tools in this License Agreement are licensed, not sold. + Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +****************************************************************************/ + +#if defined(__clang__) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunused-variable" +#elif defined(__GNUC__) || defined(__GNUG__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-variable" +#elif defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable : 4101) +#endif + +/* internal SWIG method */ +#ifndef SWIGINTERN +# define SWIGINTERN static +#endif + + + +#include + + +#include "bindings/jswrapper/SeApi.h" +#include "bindings/manual/jsb_conversions.h" +#include "bindings/manual/jsb_global.h" + + +#include "bindings/auto/jsb_gi_auto.h" + +using namespace cc; +using namespace cc::gi; + + +#define cc_gi_LightProbesData_probes_get(self_) self_->getProbes() +#define cc_gi_LightProbesData_probes_set(self_, val_) self_->setProbes(val_) + + +#define cc_gi_LightProbesData_tetrahedrons_get(self_) self_->getTetrahedrons() +#define cc_gi_LightProbesData_tetrahedrons_set(self_, val_) self_->setTetrahedrons(val_) + + +#define cc_gi_LightProbes_enabled_get(self_) self_->isEnabled() +#define cc_gi_LightProbes_enabled_set(self_, val_) self_->setEnabled(val_) + + +#define cc_gi_LightProbes_reduceRinging_get(self_) self_->getReduceRinging() +#define cc_gi_LightProbes_reduceRinging_set(self_, val_) self_->setReduceRinging(val_) + + +#define cc_gi_LightProbes_showProbe_get(self_) self_->isShowProbe() +#define cc_gi_LightProbes_showProbe_set(self_, val_) self_->setShowProbe(val_) + + +#define cc_gi_LightProbes_showWireframe_get(self_) self_->isShowWireframe() +#define cc_gi_LightProbes_showWireframe_set(self_, val_) self_->setShowWireframe(val_) + + +#define cc_gi_LightProbes_showConvex_get(self_) self_->isShowConvex() +#define cc_gi_LightProbes_showConvex_set(self_, val_) self_->setShowConvex(val_) + + +#define cc_gi_LightProbes_data_get(self_) self_->getData() +#define cc_gi_LightProbes_data_set(self_, val_) self_->setData(val_) + + +#define cc_gi_LightProbeInfo_enabled_get(self_) self_->isEnabled() +#define cc_gi_LightProbeInfo_enabled_set(self_, val_) self_->setEnabled(val_) + + +#define cc_gi_LightProbeInfo_reduceRinging_get(self_) self_->getReduceRinging() +#define cc_gi_LightProbeInfo_reduceRinging_set(self_, val_) self_->setReduceRinging(val_) + + +#define cc_gi_LightProbeInfo_showProbe_get(self_) self_->isShowProbe() +#define cc_gi_LightProbeInfo_showProbe_set(self_, val_) self_->setShowProbe(val_) + + +#define cc_gi_LightProbeInfo_showWireframe_get(self_) self_->isShowWireframe() +#define cc_gi_LightProbeInfo_showWireframe_set(self_, val_) self_->setShowWireframe(val_) + + +#define cc_gi_LightProbeInfo_showConvex_get(self_) self_->isShowConvex() +#define cc_gi_LightProbeInfo_showConvex_set(self_, val_) self_->setShowConvex(val_) + + +#define cc_gi_LightProbeInfo_data_get(self_) self_->getData() +#define cc_gi_LightProbeInfo_data_set(self_, val_) self_->setData(val_) + + + +se::Class* __jsb_cc_gi_Vertex_class = nullptr; +se::Object* __jsb_cc_gi_Vertex_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_gi_Vertex) + +static bool js_cc_gi_Vertex_position_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::Vertex *arg1 = (cc::gi::Vertex *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg1->position, s.thisObject()); + SE_PRECONDITION2(ok, false, "Vertex_position_set,2,SWIGTYPE_Vec3"); + + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_Vertex_position_set) + +static bool js_cc_gi_Vertex_position_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::Vertex *arg1 = (cc::gi::Vertex *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(arg1->position, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "Vertex_position_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(arg1->position, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_Vertex_position_get) + +static bool js_cc_gi_Vertex_normal_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::Vertex *arg1 = (cc::gi::Vertex *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg1->normal, s.thisObject()); + SE_PRECONDITION2(ok, false, "Vertex_normal_set,2,SWIGTYPE_Vec3"); + + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_Vertex_normal_set) + +static bool js_cc_gi_Vertex_normal_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::Vertex *arg1 = (cc::gi::Vertex *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(arg1->normal, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "Vertex_normal_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(arg1->normal, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_Vertex_normal_get) + +static bool js_cc_gi_Vertex_coefficients_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::Vertex *arg1 = (cc::gi::Vertex *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg1->coefficients, s.thisObject()); + SE_PRECONDITION2(ok, false, "Vertex_coefficients_set,2,SWIGTYPE_ccstd__vectorT_Vec3_t"); + + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_Vertex_coefficients_set) + +static bool js_cc_gi_Vertex_coefficients_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::Vertex *arg1 = (cc::gi::Vertex *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(arg1->coefficients, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "Vertex_coefficients_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(arg1->coefficients, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_Vertex_coefficients_get) + +static bool js_new_cc_gi_Vertex__SWIG_0(se::State& s) // NOLINT(readability-identifier-naming) +{ + // js_overloaded_ctor + const auto& args = s.args(); + CC_UNUSED bool ok = true; + cc::gi::Vertex *result; + result = (cc::gi::Vertex *)new cc::gi::Vertex(); + + + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); + return true; +} + + +static bool js_new_cc_gi_Vertex__SWIG_1(se::State& s) // NOLINT(readability-identifier-naming) +{ + // js_overloaded_ctor + const auto& args = s.args(); + CC_UNUSED bool ok = true; + Vec3 *arg1 = 0 ; + Vec3 temp1 ; + cc::gi::Vertex *result; + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp1, s.thisObject()); + SE_PRECONDITION2(ok, false, "new_Vertex,1,SWIGTYPE_p_Vec3"); + arg1 = &temp1; + + result = (cc::gi::Vertex *)new cc::gi::Vertex((Vec3 const &)*arg1); + + + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); + return true; +} + + +static bool js_new_Vertex(se::State& s) // NOLINT(readability-identifier-naming) +{ + // js_ctor_dispatcher + size_t argc = s.args().size(); + bool ret = false; + + // switch all cases by means of series of if-returns. + + // js_ctor_dispatch_case + if(argc == 0) { + ret = js_new_cc_gi_Vertex__SWIG_0(s); + if (ret) { + return ret; + } /* reset exception and return */ + } + + // js_ctor_dispatch_case + if(argc == 1) { + ret = js_new_cc_gi_Vertex__SWIG_1(s); + if (ret) { + return ret; + } /* reset exception and return */ + } + + + // default: + SE_REPORT_ERROR("Illegal arguments for construction of Vertex"); + return false; +} +SE_BIND_CTOR(js_new_Vertex, __jsb_cc_gi_Vertex_class, js_delete_cc_gi_Vertex) + +static bool js_delete_cc_gi_Vertex(se::State& s) +{ + // js_dtoroverride + return true; +} +SE_BIND_FINALIZE_FUNC(js_delete_cc_gi_Vertex) + +template<> +bool sevalue_to_native(const se::Value &from, cc::gi::Vertex * to, se::Object *ctx) +{ + assert(from.isObject()); + se::Object *json = from.toObject(); + auto* data = reinterpret_cast(json->getPrivateData()); + if (data) { + *to = *data; + return true; + } + se::Value field; + bool ok = true; + + json->getProperty("position", &field, true); + if (!field.isNullOrUndefined()) { + ok &= sevalue_to_native(field, &(to->position), ctx); + } + + + json->getProperty("normal", &field, true); + if (!field.isNullOrUndefined()) { + ok &= sevalue_to_native(field, &(to->normal), ctx); + } + + + json->getProperty("coefficients", &field, true); + if (!field.isNullOrUndefined()) { + ok &= sevalue_to_native(field, &(to->coefficients), ctx); + } + + + return ok; +} + + +bool js_register_cc_gi_Vertex(se::Object* obj) { + auto* cls = se::Class::create("Vertex", obj, nullptr, _SE(js_new_Vertex)); + + cls->defineProperty("position", _SE(js_cc_gi_Vertex_position_get), _SE(js_cc_gi_Vertex_position_set)); + cls->defineProperty("normal", _SE(js_cc_gi_Vertex_normal_get), _SE(js_cc_gi_Vertex_normal_set)); + cls->defineProperty("coefficients", _SE(js_cc_gi_Vertex_coefficients_get), _SE(js_cc_gi_Vertex_coefficients_set)); + + + + + + cls->defineFinalizeFunction(_SE(js_delete_cc_gi_Vertex)); + + + cls->install(); + JSBClassType::registerClass(cls); + + __jsb_cc_gi_Vertex_proto = cls->getProto(); + __jsb_cc_gi_Vertex_class = cls; + se::ScriptEngine::getInstance()->clearException(); + return true; +} + + +se::Class* __jsb_cc_gi_CircumSphere_class = nullptr; +se::Object* __jsb_cc_gi_CircumSphere_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_gi_CircumSphere) + +static bool js_cc_gi_CircumSphere_center_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::CircumSphere *arg1 = (cc::gi::CircumSphere *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg1->center, s.thisObject()); + SE_PRECONDITION2(ok, false, "CircumSphere_center_set,2,SWIGTYPE_Vec3"); + + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_CircumSphere_center_set) + +static bool js_cc_gi_CircumSphere_center_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::CircumSphere *arg1 = (cc::gi::CircumSphere *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(arg1->center, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "CircumSphere_center_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(arg1->center, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_CircumSphere_center_get) + +static bool js_cc_gi_CircumSphere_radiusSquared_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::CircumSphere *arg1 = (cc::gi::CircumSphere *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg1->radiusSquared, nullptr); + SE_PRECONDITION2(ok, false, "CircumSphere_radiusSquared_set,2,SWIGTYPE_float"); + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_CircumSphere_radiusSquared_set) + +static bool js_cc_gi_CircumSphere_radiusSquared_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::CircumSphere *arg1 = (cc::gi::CircumSphere *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // out 1 + ok &= nativevalue_to_se(arg1->radiusSquared, s.rval(), s.thisObject() /*ctx*/); + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_CircumSphere_radiusSquared_get) + +// js_ctor +static bool js_new_cc_gi_CircumSphere(se::State& s) // NOLINT(readability-identifier-naming) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + + cc::gi::CircumSphere *result; + result = (cc::gi::CircumSphere *)new cc::gi::CircumSphere(); + + + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); + return true; +} +SE_BIND_CTOR(js_new_cc_gi_CircumSphere, __jsb_cc_gi_CircumSphere_class, js_delete_cc_gi_CircumSphere) + +static bool js_cc_gi_CircumSphere_init(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::CircumSphere *arg1 = (cc::gi::CircumSphere *) NULL ; + Vec3 *arg2 = 0 ; + Vec3 *arg3 = 0 ; + Vec3 *arg4 = 0 ; + Vec3 *arg5 = 0 ; + Vec3 temp2 ; + Vec3 temp3 ; + Vec3 temp4 ; + Vec3 temp5 ; + + if(argc != 4) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 4); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "CircumSphere_init,2,SWIGTYPE_p_Vec3"); + arg2 = &temp2; + + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[1], &temp3, s.thisObject()); + SE_PRECONDITION2(ok, false, "CircumSphere_init,3,SWIGTYPE_p_Vec3"); + arg3 = &temp3; + + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[2], &temp4, s.thisObject()); + SE_PRECONDITION2(ok, false, "CircumSphere_init,4,SWIGTYPE_p_Vec3"); + arg4 = &temp4; + + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[3], &temp5, s.thisObject()); + SE_PRECONDITION2(ok, false, "CircumSphere_init,5,SWIGTYPE_p_Vec3"); + arg5 = &temp5; + + (arg1)->init((Vec3 const &)*arg2,(Vec3 const &)*arg3,(Vec3 const &)*arg4,(Vec3 const &)*arg5); + + + return true; +} +SE_BIND_FUNC(js_cc_gi_CircumSphere_init) + +static bool js_delete_cc_gi_CircumSphere(se::State& s) +{ + // js_dtoroverride + return true; +} +SE_BIND_FINALIZE_FUNC(js_delete_cc_gi_CircumSphere) + +template<> +bool sevalue_to_native(const se::Value &from, cc::gi::CircumSphere * to, se::Object *ctx) +{ + assert(from.isObject()); + se::Object *json = from.toObject(); + auto* data = reinterpret_cast(json->getPrivateData()); + if (data) { + *to = *data; + return true; + } + se::Value field; + bool ok = true; + + json->getProperty("center", &field, true); + if (!field.isNullOrUndefined()) { + ok &= sevalue_to_native(field, &(to->center), ctx); + } + + + json->getProperty("radiusSquared", &field, true); + if (!field.isNullOrUndefined()) { + ok &= sevalue_to_native(field, &(to->radiusSquared), ctx); + } + + + return ok; +} + + +bool js_register_cc_gi_CircumSphere(se::Object* obj) { + auto* cls = se::Class::create("CircumSphere", obj, nullptr, _SE(js_new_cc_gi_CircumSphere)); + + cls->defineProperty("center", _SE(js_cc_gi_CircumSphere_center_get), _SE(js_cc_gi_CircumSphere_center_set)); + cls->defineProperty("radiusSquared", _SE(js_cc_gi_CircumSphere_radiusSquared_get), _SE(js_cc_gi_CircumSphere_radiusSquared_set)); + + cls->defineFunction("init", _SE(js_cc_gi_CircumSphere_init)); + + + + + cls->defineFinalizeFunction(_SE(js_delete_cc_gi_CircumSphere)); + + + cls->install(); + JSBClassType::registerClass(cls); + + __jsb_cc_gi_CircumSphere_proto = cls->getProto(); + __jsb_cc_gi_CircumSphere_class = cls; + se::ScriptEngine::getInstance()->clearException(); + return true; +} + + +se::Class* __jsb_cc_gi_Tetrahedron_class = nullptr; +se::Object* __jsb_cc_gi_Tetrahedron_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_gi_Tetrahedron) + +static bool js_cc_gi_Tetrahedron_invalid_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::Tetrahedron *arg1 = (cc::gi::Tetrahedron *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) bool + ok &= sevalue_to_native(args[0], &arg1->invalid); + SE_PRECONDITION2(ok, false, "Tetrahedron_invalid_set,2,SWIGTYPE_bool"); + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_Tetrahedron_invalid_set) + +static bool js_cc_gi_Tetrahedron_invalid_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::Tetrahedron *arg1 = (cc::gi::Tetrahedron *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // out 5 + ok &= nativevalue_to_se(arg1->invalid, s.rval(), s.thisObject() /*ctx*/); + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_Tetrahedron_invalid_get) + +static bool js_cc_gi_Tetrahedron_vertex0_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::Tetrahedron *arg1 = (cc::gi::Tetrahedron *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg1->vertex0, s.thisObject()); + SE_PRECONDITION2(ok, false, "Tetrahedron_vertex0_set,2,SWIGTYPE_int32_t"); + + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_Tetrahedron_vertex0_set) + +static bool js_cc_gi_Tetrahedron_vertex0_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::Tetrahedron *arg1 = (cc::gi::Tetrahedron *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(arg1->vertex0, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "Tetrahedron_vertex0_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(arg1->vertex0, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_Tetrahedron_vertex0_get) + +static bool js_cc_gi_Tetrahedron_vertex1_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::Tetrahedron *arg1 = (cc::gi::Tetrahedron *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg1->vertex1, s.thisObject()); + SE_PRECONDITION2(ok, false, "Tetrahedron_vertex1_set,2,SWIGTYPE_int32_t"); + + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_Tetrahedron_vertex1_set) + +static bool js_cc_gi_Tetrahedron_vertex1_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::Tetrahedron *arg1 = (cc::gi::Tetrahedron *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(arg1->vertex1, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "Tetrahedron_vertex1_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(arg1->vertex1, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_Tetrahedron_vertex1_get) + +static bool js_cc_gi_Tetrahedron_vertex2_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::Tetrahedron *arg1 = (cc::gi::Tetrahedron *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg1->vertex2, s.thisObject()); + SE_PRECONDITION2(ok, false, "Tetrahedron_vertex2_set,2,SWIGTYPE_int32_t"); + + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_Tetrahedron_vertex2_set) + +static bool js_cc_gi_Tetrahedron_vertex2_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::Tetrahedron *arg1 = (cc::gi::Tetrahedron *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(arg1->vertex2, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "Tetrahedron_vertex2_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(arg1->vertex2, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_Tetrahedron_vertex2_get) + +static bool js_cc_gi_Tetrahedron_vertex3_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::Tetrahedron *arg1 = (cc::gi::Tetrahedron *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg1->vertex3, s.thisObject()); + SE_PRECONDITION2(ok, false, "Tetrahedron_vertex3_set,2,SWIGTYPE_int32_t"); + + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_Tetrahedron_vertex3_set) + +static bool js_cc_gi_Tetrahedron_vertex3_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::Tetrahedron *arg1 = (cc::gi::Tetrahedron *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(arg1->vertex3, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "Tetrahedron_vertex3_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(arg1->vertex3, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_Tetrahedron_vertex3_get) + +static bool js_cc_gi_Tetrahedron_neighbours_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::Tetrahedron *arg1 = (cc::gi::Tetrahedron *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg1->neighbours, s.thisObject()); + SE_PRECONDITION2(ok, false, "Tetrahedron_neighbours_set,2,SWIGTYPE_ccstd__arrayT_int32_t_4_t"); + + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_Tetrahedron_neighbours_set) + +static bool js_cc_gi_Tetrahedron_neighbours_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::Tetrahedron *arg1 = (cc::gi::Tetrahedron *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(arg1->neighbours, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "Tetrahedron_neighbours_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(arg1->neighbours, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_Tetrahedron_neighbours_get) + +static bool js_cc_gi_Tetrahedron_matrix_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::Tetrahedron *arg1 = (cc::gi::Tetrahedron *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg1->matrix, s.thisObject()); + SE_PRECONDITION2(ok, false, "Tetrahedron_matrix_set,2,SWIGTYPE_Mat3"); + + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_Tetrahedron_matrix_set) + +static bool js_cc_gi_Tetrahedron_matrix_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::Tetrahedron *arg1 = (cc::gi::Tetrahedron *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(arg1->matrix, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "Tetrahedron_matrix_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(arg1->matrix, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_Tetrahedron_matrix_get) + +static bool js_cc_gi_Tetrahedron_offset_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::Tetrahedron *arg1 = (cc::gi::Tetrahedron *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg1->offset, s.thisObject()); + SE_PRECONDITION2(ok, false, "Tetrahedron_offset_set,2,SWIGTYPE_Vec3"); + + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_Tetrahedron_offset_set) + +static bool js_cc_gi_Tetrahedron_offset_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::Tetrahedron *arg1 = (cc::gi::Tetrahedron *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(arg1->offset, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "Tetrahedron_offset_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(arg1->offset, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_Tetrahedron_offset_get) + +static bool js_cc_gi_Tetrahedron_sphere_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::Tetrahedron *arg1 = (cc::gi::Tetrahedron *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg1->sphere, s.thisObject()); + SE_PRECONDITION2(ok, false, "Tetrahedron_sphere_set,2,SWIGTYPE_cc__gi__CircumSphere"); + + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_Tetrahedron_sphere_set) + +static bool js_cc_gi_Tetrahedron_sphere_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::Tetrahedron *arg1 = (cc::gi::Tetrahedron *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(arg1->sphere, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "Tetrahedron_sphere_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(arg1->sphere, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_Tetrahedron_sphere_get) + +static bool js_new_cc_gi_Tetrahedron__SWIG_0(se::State& s) // NOLINT(readability-identifier-naming) +{ + // js_overloaded_ctor + const auto& args = s.args(); + CC_UNUSED bool ok = true; + cc::gi::Delaunay *arg1 = (cc::gi::Delaunay *) NULL ; + int32_t arg2 ; + int32_t arg3 ; + int32_t arg4 ; + int32_t arg5 ; + cc::gi::Tetrahedron *result; + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg1, s.thisObject()); + SE_PRECONDITION2(ok, false, "new_Tetrahedron,1,SWIGTYPE_p_cc__gi__Delaunay"); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[1], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "new_Tetrahedron,2,SWIGTYPE_int32_t"); + + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[2], &arg3, s.thisObject()); + SE_PRECONDITION2(ok, false, "new_Tetrahedron,3,SWIGTYPE_int32_t"); + + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[3], &arg4, s.thisObject()); + SE_PRECONDITION2(ok, false, "new_Tetrahedron,4,SWIGTYPE_int32_t"); + + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[4], &arg5, s.thisObject()); + SE_PRECONDITION2(ok, false, "new_Tetrahedron,5,SWIGTYPE_int32_t"); + + result = (cc::gi::Tetrahedron *)new cc::gi::Tetrahedron((cc::gi::Delaunay const *)arg1,arg2,arg3,arg4,arg5); + + + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); + return true; +} + + +static bool js_new_cc_gi_Tetrahedron__SWIG_1(se::State& s) // NOLINT(readability-identifier-naming) +{ + // js_overloaded_ctor + const auto& args = s.args(); + CC_UNUSED bool ok = true; + cc::gi::Delaunay *arg1 = (cc::gi::Delaunay *) NULL ; + int32_t arg2 ; + int32_t arg3 ; + int32_t arg4 ; + cc::gi::Tetrahedron *result; + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg1, s.thisObject()); + SE_PRECONDITION2(ok, false, "new_Tetrahedron,1,SWIGTYPE_p_cc__gi__Delaunay"); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[1], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "new_Tetrahedron,2,SWIGTYPE_int32_t"); + + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[2], &arg3, s.thisObject()); + SE_PRECONDITION2(ok, false, "new_Tetrahedron,3,SWIGTYPE_int32_t"); + + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[3], &arg4, s.thisObject()); + SE_PRECONDITION2(ok, false, "new_Tetrahedron,4,SWIGTYPE_int32_t"); + + result = (cc::gi::Tetrahedron *)new cc::gi::Tetrahedron((cc::gi::Delaunay const *)arg1,arg2,arg3,arg4); + + + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); + return true; +} + + +static bool js_new_cc_gi_Tetrahedron__SWIG_2(se::State& s) // NOLINT(readability-identifier-naming) +{ + // js_overloaded_ctor + const auto& args = s.args(); + CC_UNUSED bool ok = true; + cc::gi::Tetrahedron *result; + result = (cc::gi::Tetrahedron *)new cc::gi::Tetrahedron(); + + + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); + return true; +} + + +static bool js_new_Tetrahedron(se::State& s) // NOLINT(readability-identifier-naming) +{ + // js_ctor_dispatcher + size_t argc = s.args().size(); + bool ret = false; + + // switch all cases by means of series of if-returns. + + // js_ctor_dispatch_case + if(argc == 5) { + ret = js_new_cc_gi_Tetrahedron__SWIG_0(s); + if (ret) { + return ret; + } /* reset exception and return */ + } + + // js_ctor_dispatch_case + if(argc == 4) { + ret = js_new_cc_gi_Tetrahedron__SWIG_1(s); + if (ret) { + return ret; + } /* reset exception and return */ + } + + // js_ctor_dispatch_case + if(argc == 0) { + ret = js_new_cc_gi_Tetrahedron__SWIG_2(s); + if (ret) { + return ret; + } /* reset exception and return */ + } + + + // default: + SE_REPORT_ERROR("Illegal arguments for construction of Tetrahedron"); + return false; +} +SE_BIND_CTOR(js_new_Tetrahedron, __jsb_cc_gi_Tetrahedron_class, js_delete_cc_gi_Tetrahedron) + +static bool js_cc_gi_Tetrahedron_isInCircumSphere(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::Tetrahedron *arg1 = (cc::gi::Tetrahedron *) NULL ; + Vec3 *arg2 = 0 ; + Vec3 temp2 ; + bool result; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "Tetrahedron_isInCircumSphere,2,SWIGTYPE_p_Vec3"); + arg2 = &temp2; + + result = (bool)((cc::gi::Tetrahedron const *)arg1)->isInCircumSphere((Vec3 const &)*arg2); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + + + return true; +} +SE_BIND_FUNC(js_cc_gi_Tetrahedron_isInCircumSphere) + +static bool js_cc_gi_Tetrahedron_contain(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::Tetrahedron *arg1 = (cc::gi::Tetrahedron *) NULL ; + int32_t arg2 ; + bool result; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "Tetrahedron_contain,2,SWIGTYPE_int32_t"); + + result = (bool)((cc::gi::Tetrahedron const *)arg1)->contain(arg2); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + + + return true; +} +SE_BIND_FUNC(js_cc_gi_Tetrahedron_contain) + +static bool js_cc_gi_Tetrahedron_isInnerTetrahedron(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::Tetrahedron *arg1 = (cc::gi::Tetrahedron *) NULL ; + bool result; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (bool)((cc::gi::Tetrahedron const *)arg1)->isInnerTetrahedron(); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + + + return true; +} +SE_BIND_FUNC(js_cc_gi_Tetrahedron_isInnerTetrahedron) + +static bool js_cc_gi_Tetrahedron_isOuterCell(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::Tetrahedron *arg1 = (cc::gi::Tetrahedron *) NULL ; + bool result; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (bool)((cc::gi::Tetrahedron const *)arg1)->isOuterCell(); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + + + return true; +} +SE_BIND_FUNC(js_cc_gi_Tetrahedron_isOuterCell) + +static bool js_delete_cc_gi_Tetrahedron(se::State& s) +{ + // js_dtoroverride + return true; +} +SE_BIND_FINALIZE_FUNC(js_delete_cc_gi_Tetrahedron) + +template<> +bool sevalue_to_native(const se::Value &from, cc::gi::Tetrahedron * to, se::Object *ctx) +{ + assert(from.isObject()); + se::Object *json = from.toObject(); + auto* data = reinterpret_cast(json->getPrivateData()); + if (data) { + *to = *data; + return true; + } + se::Value field; + bool ok = true; + + json->getProperty("invalid", &field, true); + if (!field.isNullOrUndefined()) { + ok &= sevalue_to_native(field, &(to->invalid), ctx); + } + + + json->getProperty("vertex0", &field, true); + if (!field.isNullOrUndefined()) { + ok &= sevalue_to_native(field, &(to->vertex0), ctx); + } + + + json->getProperty("vertex1", &field, true); + if (!field.isNullOrUndefined()) { + ok &= sevalue_to_native(field, &(to->vertex1), ctx); + } + + + json->getProperty("vertex2", &field, true); + if (!field.isNullOrUndefined()) { + ok &= sevalue_to_native(field, &(to->vertex2), ctx); + } + + + json->getProperty("vertex3", &field, true); + if (!field.isNullOrUndefined()) { + ok &= sevalue_to_native(field, &(to->vertex3), ctx); + } + + + json->getProperty("neighbours", &field, true); + if (!field.isNullOrUndefined()) { + ok &= sevalue_to_native(field, &(to->neighbours), ctx); + } + + + json->getProperty("matrix", &field, true); + if (!field.isNullOrUndefined()) { + ok &= sevalue_to_native(field, &(to->matrix), ctx); + } + + + json->getProperty("offset", &field, true); + if (!field.isNullOrUndefined()) { + ok &= sevalue_to_native(field, &(to->offset), ctx); + } + + + json->getProperty("sphere", &field, true); + if (!field.isNullOrUndefined()) { + ok &= sevalue_to_native(field, &(to->sphere), ctx); + } + + + return ok; +} + + +bool js_register_cc_gi_Tetrahedron(se::Object* obj) { + auto* cls = se::Class::create("Tetrahedron", obj, nullptr, _SE(js_new_Tetrahedron)); + + cls->defineProperty("invalid", _SE(js_cc_gi_Tetrahedron_invalid_get), _SE(js_cc_gi_Tetrahedron_invalid_set)); + cls->defineProperty("vertex0", _SE(js_cc_gi_Tetrahedron_vertex0_get), _SE(js_cc_gi_Tetrahedron_vertex0_set)); + cls->defineProperty("vertex1", _SE(js_cc_gi_Tetrahedron_vertex1_get), _SE(js_cc_gi_Tetrahedron_vertex1_set)); + cls->defineProperty("vertex2", _SE(js_cc_gi_Tetrahedron_vertex2_get), _SE(js_cc_gi_Tetrahedron_vertex2_set)); + cls->defineProperty("vertex3", _SE(js_cc_gi_Tetrahedron_vertex3_get), _SE(js_cc_gi_Tetrahedron_vertex3_set)); + cls->defineProperty("neighbours", _SE(js_cc_gi_Tetrahedron_neighbours_get), _SE(js_cc_gi_Tetrahedron_neighbours_set)); + cls->defineProperty("matrix", _SE(js_cc_gi_Tetrahedron_matrix_get), _SE(js_cc_gi_Tetrahedron_matrix_set)); + cls->defineProperty("offset", _SE(js_cc_gi_Tetrahedron_offset_get), _SE(js_cc_gi_Tetrahedron_offset_set)); + cls->defineProperty("sphere", _SE(js_cc_gi_Tetrahedron_sphere_get), _SE(js_cc_gi_Tetrahedron_sphere_set)); + + cls->defineFunction("isInCircumSphere", _SE(js_cc_gi_Tetrahedron_isInCircumSphere)); + cls->defineFunction("contain", _SE(js_cc_gi_Tetrahedron_contain)); + cls->defineFunction("isInnerTetrahedron", _SE(js_cc_gi_Tetrahedron_isInnerTetrahedron)); + cls->defineFunction("isOuterCell", _SE(js_cc_gi_Tetrahedron_isOuterCell)); + + + + + cls->defineFinalizeFunction(_SE(js_delete_cc_gi_Tetrahedron)); + + + cls->install(); + JSBClassType::registerClass(cls); + + __jsb_cc_gi_Tetrahedron_proto = cls->getProto(); + __jsb_cc_gi_Tetrahedron_class = cls; + se::ScriptEngine::getInstance()->clearException(); + return true; +} + + +se::Class* __jsb_cc_gi_Delaunay_class = nullptr; +se::Object* __jsb_cc_gi_Delaunay_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_gi_Delaunay) + +// js_ctor +static bool js_new_cc_gi_Delaunay(se::State& s) // NOLINT(readability-identifier-naming) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + + cc::gi::Delaunay *result; + result = (cc::gi::Delaunay *)new cc::gi::Delaunay(); + + + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); + return true; +} +SE_BIND_CTOR(js_new_cc_gi_Delaunay, __jsb_cc_gi_Delaunay_class, js_delete_cc_gi_Delaunay) + +static bool js_delete_cc_gi_Delaunay(se::State& s) +{ + // js_dtoroverride + return true; +} +SE_BIND_FINALIZE_FUNC(js_delete_cc_gi_Delaunay) + +static bool js_cc_gi_Delaunay_getProbes(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::Delaunay *arg1 = (cc::gi::Delaunay *) NULL ; + ccstd::vector< cc::gi::Vertex > *result = 0 ; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (ccstd::vector< cc::gi::Vertex > *) &((cc::gi::Delaunay const *)arg1)->getProbes(); + // %typemap(out) SWIGTYPE& + ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "Delaunay_getProbes, Error processing arguments"); + SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); + + + return true; +} +SE_BIND_FUNC(js_cc_gi_Delaunay_getProbes) + +static bool js_cc_gi_Delaunay_getTetrahedrons(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::Delaunay *arg1 = (cc::gi::Delaunay *) NULL ; + ccstd::vector< cc::gi::Tetrahedron > *result = 0 ; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (ccstd::vector< cc::gi::Tetrahedron > *) &((cc::gi::Delaunay const *)arg1)->getTetrahedrons(); + // %typemap(out) SWIGTYPE& + ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "Delaunay_getTetrahedrons, Error processing arguments"); + SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); + + + return true; +} +SE_BIND_FUNC(js_cc_gi_Delaunay_getTetrahedrons) + +static bool js_cc_gi_Delaunay_build(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::Delaunay *arg1 = (cc::gi::Delaunay *) NULL ; + ccstd::vector< Vec3 > *arg2 = 0 ; + ccstd::vector< Vec3 > temp2 ; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "Delaunay_build,2,SWIGTYPE_p_ccstd__vectorT_Vec3_t"); + arg2 = &temp2; + + (arg1)->build((ccstd::vector< Vec3 > const &)*arg2); + + + return true; +} +SE_BIND_FUNC(js_cc_gi_Delaunay_build) + +bool js_register_cc_gi_Delaunay(se::Object* obj) { + auto* cls = se::Class::create("Delaunay", obj, nullptr, _SE(js_new_cc_gi_Delaunay)); + + + cls->defineFunction("getProbes", _SE(js_cc_gi_Delaunay_getProbes)); + cls->defineFunction("getTetrahedrons", _SE(js_cc_gi_Delaunay_getTetrahedrons)); + cls->defineFunction("build", _SE(js_cc_gi_Delaunay_build)); + + + + + cls->defineFinalizeFunction(_SE(js_delete_cc_gi_Delaunay)); + + + cls->install(); + JSBClassType::registerClass(cls); + + __jsb_cc_gi_Delaunay_proto = cls->getProto(); + __jsb_cc_gi_Delaunay_class = cls; + se::ScriptEngine::getInstance()->clearException(); + return true; +} + + +se::Class* __jsb_cc_gi_LightProbesData_class = nullptr; +se::Object* __jsb_cc_gi_LightProbesData_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_gi_LightProbesData) + +// js_ctor +static bool js_new_cc_gi_LightProbesData(se::State& s) // NOLINT(readability-identifier-naming) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + + cc::gi::LightProbesData *result; + result = (cc::gi::LightProbesData *)new cc::gi::LightProbesData(); + + + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); + return true; +} +SE_BIND_CTOR(js_new_cc_gi_LightProbesData, __jsb_cc_gi_LightProbesData_class, js_delete_cc_gi_LightProbesData) + +static bool js_cc_gi_LightProbesData_empty(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbesData *arg1 = (cc::gi::LightProbesData *) NULL ; + bool result; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (bool)((cc::gi::LightProbesData const *)arg1)->empty(); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + + + return true; +} +SE_BIND_FUNC(js_cc_gi_LightProbesData_empty) + +static bool js_cc_gi_LightProbesData_available(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbesData *arg1 = (cc::gi::LightProbesData *) NULL ; + bool result; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (bool)((cc::gi::LightProbesData const *)arg1)->available(); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + + + return true; +} +SE_BIND_FUNC(js_cc_gi_LightProbesData_available) + +static bool js_cc_gi_LightProbesData_build(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbesData *arg1 = (cc::gi::LightProbesData *) NULL ; + ccstd::vector< Vec3 > *arg2 = 0 ; + ccstd::vector< Vec3 > temp2 ; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "LightProbesData_build,2,SWIGTYPE_p_ccstd__vectorT_Vec3_t"); + arg2 = &temp2; + + (arg1)->build((ccstd::vector< Vec3 > const &)*arg2); + + + return true; +} +SE_BIND_FUNC(js_cc_gi_LightProbesData_build) + +static bool js_cc_gi_LightProbesData_getInterpolationSHCoefficients(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbesData *arg1 = (cc::gi::LightProbesData *) NULL ; + Vec3 *arg2 = 0 ; + int32_t arg3 ; + ccstd::vector< Vec3 > *arg4 = 0 ; + Vec3 temp2 ; + ccstd::vector< Vec3 > temp4 ; + int32_t result; + + if(argc != 3) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "LightProbesData_getInterpolationSHCoefficients,2,SWIGTYPE_p_Vec3"); + arg2 = &temp2; + + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[1], &arg3, s.thisObject()); + SE_PRECONDITION2(ok, false, "LightProbesData_getInterpolationSHCoefficients,3,SWIGTYPE_int32_t"); + + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[2], &temp4, s.thisObject()); + SE_PRECONDITION2(ok, false, "LightProbesData_getInterpolationSHCoefficients,4,SWIGTYPE_p_ccstd__vectorT_Vec3_t"); + arg4 = &temp4; + + result = ((cc::gi::LightProbesData const *)arg1)->getInterpolationSHCoefficients((Vec3 const &)*arg2,arg3,*arg4); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "LightProbesData_getInterpolationSHCoefficients, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_FUNC(js_cc_gi_LightProbesData_getInterpolationSHCoefficients) + +static bool js_cc_gi_LightProbesData__probes_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbesData *arg1 = (cc::gi::LightProbesData *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg1->_probes, s.thisObject()); + SE_PRECONDITION2(ok, false, "LightProbesData__probes_set,2,SWIGTYPE_ccstd__vectorT_cc__gi__Vertex_t"); + + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_LightProbesData__probes_set) + +static bool js_cc_gi_LightProbesData__probes_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::LightProbesData *arg1 = (cc::gi::LightProbesData *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(arg1->_probes, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "LightProbesData__probes_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(arg1->_probes, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_LightProbesData__probes_get) + +static bool js_cc_gi_LightProbesData__tetrahedrons_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbesData *arg1 = (cc::gi::LightProbesData *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg1->_tetrahedrons, s.thisObject()); + SE_PRECONDITION2(ok, false, "LightProbesData__tetrahedrons_set,2,SWIGTYPE_ccstd__vectorT_cc__gi__Tetrahedron_t"); + + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_LightProbesData__tetrahedrons_set) + +static bool js_cc_gi_LightProbesData__tetrahedrons_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::LightProbesData *arg1 = (cc::gi::LightProbesData *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(arg1->_tetrahedrons, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "LightProbesData__tetrahedrons_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(arg1->_tetrahedrons, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_LightProbesData__tetrahedrons_get) + +static bool js_cc_gi_LightProbesData_probes_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbesData *arg1 = (cc::gi::LightProbesData *) NULL ; + ccstd::vector< cc::gi::Vertex > *arg2 = 0 ; + ccstd::vector< cc::gi::Vertex > temp2 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "LightProbesData_probes_set,2,SWIGTYPE_p_ccstd__vectorT_cc__gi__Vertex_t"); + arg2 = &temp2; + + cc_gi_LightProbesData_probes_set(arg1,*arg2); + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_LightProbesData_probes_set) + +static bool js_cc_gi_LightProbesData_probes_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::LightProbesData *arg1 = (cc::gi::LightProbesData *) NULL ; + ccstd::vector< cc::gi::Vertex > *result = 0 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (ccstd::vector< cc::gi::Vertex > *) &cc_gi_LightProbesData_probes_get(arg1); + // %typemap(out) SWIGTYPE& + ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "LightProbesData_probes_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_LightProbesData_probes_get) + +static bool js_cc_gi_LightProbesData_tetrahedrons_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbesData *arg1 = (cc::gi::LightProbesData *) NULL ; + ccstd::vector< cc::gi::Tetrahedron > *arg2 = 0 ; + ccstd::vector< cc::gi::Tetrahedron > temp2 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "LightProbesData_tetrahedrons_set,2,SWIGTYPE_p_ccstd__vectorT_cc__gi__Tetrahedron_t"); + arg2 = &temp2; + + cc_gi_LightProbesData_tetrahedrons_set(arg1,*arg2); + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_LightProbesData_tetrahedrons_set) + +static bool js_cc_gi_LightProbesData_tetrahedrons_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::LightProbesData *arg1 = (cc::gi::LightProbesData *) NULL ; + ccstd::vector< cc::gi::Tetrahedron > *result = 0 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (ccstd::vector< cc::gi::Tetrahedron > *) &cc_gi_LightProbesData_tetrahedrons_get(arg1); + // %typemap(out) SWIGTYPE& + ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "LightProbesData_tetrahedrons_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_LightProbesData_tetrahedrons_get) + +static bool js_delete_cc_gi_LightProbesData(se::State& s) +{ + // js_dtoroverride + return true; +} +SE_BIND_FINALIZE_FUNC(js_delete_cc_gi_LightProbesData) + +bool js_register_cc_gi_LightProbesData(se::Object* obj) { + auto* cls = se::Class::create("LightProbesData", obj, nullptr, _SE(js_new_cc_gi_LightProbesData)); + + cls->defineProperty("_probes", _SE(js_cc_gi_LightProbesData__probes_get), _SE(js_cc_gi_LightProbesData__probes_set)); + cls->defineProperty("_tetrahedrons", _SE(js_cc_gi_LightProbesData__tetrahedrons_get), _SE(js_cc_gi_LightProbesData__tetrahedrons_set)); + cls->defineProperty("probes", _SE(js_cc_gi_LightProbesData_probes_get), _SE(js_cc_gi_LightProbesData_probes_set)); + cls->defineProperty("tetrahedrons", _SE(js_cc_gi_LightProbesData_tetrahedrons_get), _SE(js_cc_gi_LightProbesData_tetrahedrons_set)); + + cls->defineFunction("empty", _SE(js_cc_gi_LightProbesData_empty)); + cls->defineFunction("available", _SE(js_cc_gi_LightProbesData_available)); + cls->defineFunction("build", _SE(js_cc_gi_LightProbesData_build)); + cls->defineFunction("getInterpolationSHCoefficients", _SE(js_cc_gi_LightProbesData_getInterpolationSHCoefficients)); + + + + + cls->defineFinalizeFunction(_SE(js_delete_cc_gi_LightProbesData)); + + + cls->install(); + JSBClassType::registerClass(cls); + + __jsb_cc_gi_LightProbesData_proto = cls->getProto(); + __jsb_cc_gi_LightProbesData_class = cls; + se::ScriptEngine::getInstance()->clearException(); + return true; +} + + +se::Class* __jsb_cc_gi_LightProbes_class = nullptr; +se::Object* __jsb_cc_gi_LightProbes_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_gi_LightProbes) + +// js_ctor +static bool js_new_cc_gi_LightProbes(se::State& s) // NOLINT(readability-identifier-naming) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + + cc::gi::LightProbes *result; + result = (cc::gi::LightProbes *)new cc::gi::LightProbes(); + + + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); + return true; +} +SE_BIND_CTOR(js_new_cc_gi_LightProbes, __jsb_cc_gi_LightProbes_class, js_delete_cc_gi_LightProbes) + +static bool js_delete_cc_gi_LightProbes(se::State& s) +{ + // js_dtoroverride + return true; +} +SE_BIND_FINALIZE_FUNC(js_delete_cc_gi_LightProbes) + +static bool js_cc_gi_LightProbes_initialize(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbes *arg1 = (cc::gi::LightProbes *) NULL ; + cc::gi::LightProbeInfo *arg2 = (cc::gi::LightProbeInfo *) NULL ; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "LightProbes_initialize,2,SWIGTYPE_p_cc__gi__LightProbeInfo"); + (arg1)->initialize(arg2); + + + return true; +} +SE_BIND_FUNC(js_cc_gi_LightProbes_initialize) + +static bool js_cc_gi_LightProbes_available(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbes *arg1 = (cc::gi::LightProbes *) NULL ; + bool result; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (bool)((cc::gi::LightProbes const *)arg1)->available(); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + + + return true; +} +SE_BIND_FUNC(js_cc_gi_LightProbes_available) + +static bool js_cc_gi_LightProbes__enabled_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbes *arg1 = (cc::gi::LightProbes *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) bool + ok &= sevalue_to_native(args[0], &arg1->_enabled); + SE_PRECONDITION2(ok, false, "LightProbes__enabled_set,2,SWIGTYPE_bool"); + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_LightProbes__enabled_set) + +static bool js_cc_gi_LightProbes__enabled_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::LightProbes *arg1 = (cc::gi::LightProbes *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // out 5 + ok &= nativevalue_to_se(arg1->_enabled, s.rval(), s.thisObject() /*ctx*/); + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_LightProbes__enabled_get) + +static bool js_cc_gi_LightProbes__reduceRinging_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbes *arg1 = (cc::gi::LightProbes *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg1->_reduceRinging, nullptr); + SE_PRECONDITION2(ok, false, "LightProbes__reduceRinging_set,2,SWIGTYPE_float"); + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_LightProbes__reduceRinging_set) + +static bool js_cc_gi_LightProbes__reduceRinging_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::LightProbes *arg1 = (cc::gi::LightProbes *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // out 1 + ok &= nativevalue_to_se(arg1->_reduceRinging, s.rval(), s.thisObject() /*ctx*/); + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_LightProbes__reduceRinging_get) + +static bool js_cc_gi_LightProbes__showProbe_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbes *arg1 = (cc::gi::LightProbes *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) bool + ok &= sevalue_to_native(args[0], &arg1->_showProbe); + SE_PRECONDITION2(ok, false, "LightProbes__showProbe_set,2,SWIGTYPE_bool"); + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_LightProbes__showProbe_set) + +static bool js_cc_gi_LightProbes__showProbe_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::LightProbes *arg1 = (cc::gi::LightProbes *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // out 5 + ok &= nativevalue_to_se(arg1->_showProbe, s.rval(), s.thisObject() /*ctx*/); + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_LightProbes__showProbe_get) + +static bool js_cc_gi_LightProbes__showWireframe_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbes *arg1 = (cc::gi::LightProbes *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) bool + ok &= sevalue_to_native(args[0], &arg1->_showWireframe); + SE_PRECONDITION2(ok, false, "LightProbes__showWireframe_set,2,SWIGTYPE_bool"); + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_LightProbes__showWireframe_set) + +static bool js_cc_gi_LightProbes__showWireframe_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::LightProbes *arg1 = (cc::gi::LightProbes *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // out 5 + ok &= nativevalue_to_se(arg1->_showWireframe, s.rval(), s.thisObject() /*ctx*/); + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_LightProbes__showWireframe_get) + +static bool js_cc_gi_LightProbes__showConvex_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbes *arg1 = (cc::gi::LightProbes *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) bool + ok &= sevalue_to_native(args[0], &arg1->_showConvex); + SE_PRECONDITION2(ok, false, "LightProbes__showConvex_set,2,SWIGTYPE_bool"); + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_LightProbes__showConvex_set) + +static bool js_cc_gi_LightProbes__showConvex_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::LightProbes *arg1 = (cc::gi::LightProbes *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // out 5 + ok &= nativevalue_to_se(arg1->_showConvex, s.rval(), s.thisObject() /*ctx*/); + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_LightProbes__showConvex_get) + +static bool js_cc_gi_LightProbes__data_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbes *arg1 = (cc::gi::LightProbes *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg1->_data, s.thisObject()); + SE_PRECONDITION2(ok, false, "LightProbes__data_set,2,SWIGTYPE_cc__gi__LightProbesData"); + + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_LightProbes__data_set) + +static bool js_cc_gi_LightProbes__data_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::LightProbes *arg1 = (cc::gi::LightProbes *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(arg1->_data, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "LightProbes__data_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(arg1->_data, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_LightProbes__data_get) + +static bool js_cc_gi_LightProbes_enabled_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbes *arg1 = (cc::gi::LightProbes *) NULL ; + bool arg2 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) bool + ok &= sevalue_to_native(args[0], &arg2); + SE_PRECONDITION2(ok, false, "LightProbes_enabled_set,2,SWIGTYPE_bool"); + cc_gi_LightProbes_enabled_set(arg1,arg2); + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_LightProbes_enabled_set) + +static bool js_cc_gi_LightProbes_enabled_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::LightProbes *arg1 = (cc::gi::LightProbes *) NULL ; + bool result; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (bool)cc_gi_LightProbes_enabled_get(arg1); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_LightProbes_enabled_get) + +static bool js_cc_gi_LightProbes_reduceRinging_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbes *arg1 = (cc::gi::LightProbes *) NULL ; + bool arg2 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) bool + ok &= sevalue_to_native(args[0], &arg2); + SE_PRECONDITION2(ok, false, "LightProbes_reduceRinging_set,2,SWIGTYPE_bool"); + cc_gi_LightProbes_reduceRinging_set(arg1,arg2); + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_LightProbes_reduceRinging_set) + +static bool js_cc_gi_LightProbes_reduceRinging_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::LightProbes *arg1 = (cc::gi::LightProbes *) NULL ; + bool result; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (bool)cc_gi_LightProbes_reduceRinging_get(arg1); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_LightProbes_reduceRinging_get) + +static bool js_cc_gi_LightProbes_showProbe_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbes *arg1 = (cc::gi::LightProbes *) NULL ; + bool arg2 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) bool + ok &= sevalue_to_native(args[0], &arg2); + SE_PRECONDITION2(ok, false, "LightProbes_showProbe_set,2,SWIGTYPE_bool"); + cc_gi_LightProbes_showProbe_set(arg1,arg2); + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_LightProbes_showProbe_set) + +static bool js_cc_gi_LightProbes_showProbe_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::LightProbes *arg1 = (cc::gi::LightProbes *) NULL ; + bool result; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (bool)cc_gi_LightProbes_showProbe_get(arg1); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_LightProbes_showProbe_get) + +static bool js_cc_gi_LightProbes_showWireframe_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbes *arg1 = (cc::gi::LightProbes *) NULL ; + bool arg2 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) bool + ok &= sevalue_to_native(args[0], &arg2); + SE_PRECONDITION2(ok, false, "LightProbes_showWireframe_set,2,SWIGTYPE_bool"); + cc_gi_LightProbes_showWireframe_set(arg1,arg2); + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_LightProbes_showWireframe_set) + +static bool js_cc_gi_LightProbes_showWireframe_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::LightProbes *arg1 = (cc::gi::LightProbes *) NULL ; + bool result; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (bool)cc_gi_LightProbes_showWireframe_get(arg1); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_LightProbes_showWireframe_get) + +static bool js_cc_gi_LightProbes_showConvex_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbes *arg1 = (cc::gi::LightProbes *) NULL ; + bool arg2 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) bool + ok &= sevalue_to_native(args[0], &arg2); + SE_PRECONDITION2(ok, false, "LightProbes_showConvex_set,2,SWIGTYPE_bool"); + cc_gi_LightProbes_showConvex_set(arg1,arg2); + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_LightProbes_showConvex_set) + +static bool js_cc_gi_LightProbes_showConvex_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::LightProbes *arg1 = (cc::gi::LightProbes *) NULL ; + bool result; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (bool)cc_gi_LightProbes_showConvex_get(arg1); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_LightProbes_showConvex_get) + +static bool js_cc_gi_LightProbes_data_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbes *arg1 = (cc::gi::LightProbes *) NULL ; + cc::gi::LightProbesData *arg2 = 0 ; + cc::gi::LightProbesData temp2 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "LightProbes_data_set,2,SWIGTYPE_p_cc__gi__LightProbesData"); + arg2 = &temp2; + + cc_gi_LightProbes_data_set(arg1,*arg2); + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_LightProbes_data_set) + +static bool js_cc_gi_LightProbes_data_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::LightProbes *arg1 = (cc::gi::LightProbes *) NULL ; + cc::gi::LightProbesData *result = 0 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (cc::gi::LightProbesData *) &cc_gi_LightProbes_data_get(arg1); + // %typemap(out) SWIGTYPE& + ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "LightProbes_data_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_LightProbes_data_get) + +bool js_register_cc_gi_LightProbes(se::Object* obj) { + auto* cls = se::Class::create("LightProbes", obj, nullptr, _SE(js_new_cc_gi_LightProbes)); + + cls->defineProperty("_enabled", _SE(js_cc_gi_LightProbes__enabled_get), _SE(js_cc_gi_LightProbes__enabled_set)); + cls->defineProperty("_reduceRinging", _SE(js_cc_gi_LightProbes__reduceRinging_get), _SE(js_cc_gi_LightProbes__reduceRinging_set)); + cls->defineProperty("_showProbe", _SE(js_cc_gi_LightProbes__showProbe_get), _SE(js_cc_gi_LightProbes__showProbe_set)); + cls->defineProperty("_showWireframe", _SE(js_cc_gi_LightProbes__showWireframe_get), _SE(js_cc_gi_LightProbes__showWireframe_set)); + cls->defineProperty("_showConvex", _SE(js_cc_gi_LightProbes__showConvex_get), _SE(js_cc_gi_LightProbes__showConvex_set)); + cls->defineProperty("_data", _SE(js_cc_gi_LightProbes__data_get), _SE(js_cc_gi_LightProbes__data_set)); + cls->defineProperty("enabled", _SE(js_cc_gi_LightProbes_enabled_get), _SE(js_cc_gi_LightProbes_enabled_set)); + cls->defineProperty("reduceRinging", _SE(js_cc_gi_LightProbes_reduceRinging_get), _SE(js_cc_gi_LightProbes_reduceRinging_set)); + cls->defineProperty("showProbe", _SE(js_cc_gi_LightProbes_showProbe_get), _SE(js_cc_gi_LightProbes_showProbe_set)); + cls->defineProperty("showWireframe", _SE(js_cc_gi_LightProbes_showWireframe_get), _SE(js_cc_gi_LightProbes_showWireframe_set)); + cls->defineProperty("showConvex", _SE(js_cc_gi_LightProbes_showConvex_get), _SE(js_cc_gi_LightProbes_showConvex_set)); + cls->defineProperty("data", _SE(js_cc_gi_LightProbes_data_get), _SE(js_cc_gi_LightProbes_data_set)); + + cls->defineFunction("initialize", _SE(js_cc_gi_LightProbes_initialize)); + cls->defineFunction("available", _SE(js_cc_gi_LightProbes_available)); + + + + + cls->defineFinalizeFunction(_SE(js_delete_cc_gi_LightProbes)); + + + cls->install(); + JSBClassType::registerClass(cls); + + __jsb_cc_gi_LightProbes_proto = cls->getProto(); + __jsb_cc_gi_LightProbes_class = cls; + se::ScriptEngine::getInstance()->clearException(); + return true; +} + + +se::Class* __jsb_cc_gi_LightProbeInfo_class = nullptr; +se::Object* __jsb_cc_gi_LightProbeInfo_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_gi_LightProbeInfo) + +// js_ctor +static bool js_new_cc_gi_LightProbeInfo(se::State& s) // NOLINT(readability-identifier-naming) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + + cc::gi::LightProbeInfo *result; + result = (cc::gi::LightProbeInfo *)new cc::gi::LightProbeInfo(); + + + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); + return true; +} +SE_BIND_CTOR(js_new_cc_gi_LightProbeInfo, __jsb_cc_gi_LightProbeInfo_class, js_delete_cc_gi_LightProbeInfo) + +static bool js_delete_cc_gi_LightProbeInfo(se::State& s) +{ + // js_dtoroverride + return true; +} +SE_BIND_FINALIZE_FUNC(js_delete_cc_gi_LightProbeInfo) + +static bool js_cc_gi_LightProbeInfo_activate(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbeInfo *arg1 = (cc::gi::LightProbeInfo *) NULL ; + cc::gi::LightProbes *arg2 = (cc::gi::LightProbes *) NULL ; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "LightProbeInfo_activate,2,SWIGTYPE_p_cc__gi__LightProbes"); + (arg1)->activate(arg2); + + + return true; +} +SE_BIND_FUNC(js_cc_gi_LightProbeInfo_activate) + +static bool js_cc_gi_LightProbeInfo__enabled_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbeInfo *arg1 = (cc::gi::LightProbeInfo *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) bool + ok &= sevalue_to_native(args[0], &arg1->_enabled); + SE_PRECONDITION2(ok, false, "LightProbeInfo__enabled_set,2,SWIGTYPE_bool"); + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_LightProbeInfo__enabled_set) + +static bool js_cc_gi_LightProbeInfo__enabled_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::LightProbeInfo *arg1 = (cc::gi::LightProbeInfo *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // out 5 + ok &= nativevalue_to_se(arg1->_enabled, s.rval(), s.thisObject() /*ctx*/); + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_LightProbeInfo__enabled_get) + +static bool js_cc_gi_LightProbeInfo__reduceRinging_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbeInfo *arg1 = (cc::gi::LightProbeInfo *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg1->_reduceRinging, nullptr); + SE_PRECONDITION2(ok, false, "LightProbeInfo__reduceRinging_set,2,SWIGTYPE_float"); + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_LightProbeInfo__reduceRinging_set) + +static bool js_cc_gi_LightProbeInfo__reduceRinging_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::LightProbeInfo *arg1 = (cc::gi::LightProbeInfo *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // out 1 + ok &= nativevalue_to_se(arg1->_reduceRinging, s.rval(), s.thisObject() /*ctx*/); + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_LightProbeInfo__reduceRinging_get) + +static bool js_cc_gi_LightProbeInfo__showProbe_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbeInfo *arg1 = (cc::gi::LightProbeInfo *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) bool + ok &= sevalue_to_native(args[0], &arg1->_showProbe); + SE_PRECONDITION2(ok, false, "LightProbeInfo__showProbe_set,2,SWIGTYPE_bool"); + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_LightProbeInfo__showProbe_set) + +static bool js_cc_gi_LightProbeInfo__showProbe_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::LightProbeInfo *arg1 = (cc::gi::LightProbeInfo *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // out 5 + ok &= nativevalue_to_se(arg1->_showProbe, s.rval(), s.thisObject() /*ctx*/); + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_LightProbeInfo__showProbe_get) + +static bool js_cc_gi_LightProbeInfo__showWireframe_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbeInfo *arg1 = (cc::gi::LightProbeInfo *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) bool + ok &= sevalue_to_native(args[0], &arg1->_showWireframe); + SE_PRECONDITION2(ok, false, "LightProbeInfo__showWireframe_set,2,SWIGTYPE_bool"); + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_LightProbeInfo__showWireframe_set) + +static bool js_cc_gi_LightProbeInfo__showWireframe_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::LightProbeInfo *arg1 = (cc::gi::LightProbeInfo *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // out 5 + ok &= nativevalue_to_se(arg1->_showWireframe, s.rval(), s.thisObject() /*ctx*/); + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_LightProbeInfo__showWireframe_get) + +static bool js_cc_gi_LightProbeInfo__showConvex_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbeInfo *arg1 = (cc::gi::LightProbeInfo *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) bool + ok &= sevalue_to_native(args[0], &arg1->_showConvex); + SE_PRECONDITION2(ok, false, "LightProbeInfo__showConvex_set,2,SWIGTYPE_bool"); + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_LightProbeInfo__showConvex_set) + +static bool js_cc_gi_LightProbeInfo__showConvex_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::LightProbeInfo *arg1 = (cc::gi::LightProbeInfo *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // out 5 + ok &= nativevalue_to_se(arg1->_showConvex, s.rval(), s.thisObject() /*ctx*/); + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_LightProbeInfo__showConvex_get) + +static bool js_cc_gi_LightProbeInfo__data_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbeInfo *arg1 = (cc::gi::LightProbeInfo *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg1->_data, s.thisObject()); + SE_PRECONDITION2(ok, false, "LightProbeInfo__data_set,2,SWIGTYPE_cc__gi__LightProbesData"); + + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_LightProbeInfo__data_set) + +static bool js_cc_gi_LightProbeInfo__data_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::LightProbeInfo *arg1 = (cc::gi::LightProbeInfo *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(arg1->_data, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "LightProbeInfo__data_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(arg1->_data, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_LightProbeInfo__data_get) + +static bool js_cc_gi_LightProbeInfo_enabled_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbeInfo *arg1 = (cc::gi::LightProbeInfo *) NULL ; + bool arg2 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) bool + ok &= sevalue_to_native(args[0], &arg2); + SE_PRECONDITION2(ok, false, "LightProbeInfo_enabled_set,2,SWIGTYPE_bool"); + cc_gi_LightProbeInfo_enabled_set(arg1,arg2); + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_LightProbeInfo_enabled_set) + +static bool js_cc_gi_LightProbeInfo_enabled_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::LightProbeInfo *arg1 = (cc::gi::LightProbeInfo *) NULL ; + bool result; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (bool)cc_gi_LightProbeInfo_enabled_get(arg1); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_LightProbeInfo_enabled_get) + +static bool js_cc_gi_LightProbeInfo_reduceRinging_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbeInfo *arg1 = (cc::gi::LightProbeInfo *) NULL ; + bool arg2 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) bool + ok &= sevalue_to_native(args[0], &arg2); + SE_PRECONDITION2(ok, false, "LightProbeInfo_reduceRinging_set,2,SWIGTYPE_bool"); + cc_gi_LightProbeInfo_reduceRinging_set(arg1,arg2); + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_LightProbeInfo_reduceRinging_set) + +static bool js_cc_gi_LightProbeInfo_reduceRinging_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::LightProbeInfo *arg1 = (cc::gi::LightProbeInfo *) NULL ; + bool result; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (bool)cc_gi_LightProbeInfo_reduceRinging_get(arg1); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_LightProbeInfo_reduceRinging_get) + +static bool js_cc_gi_LightProbeInfo_showProbe_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbeInfo *arg1 = (cc::gi::LightProbeInfo *) NULL ; + bool arg2 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) bool + ok &= sevalue_to_native(args[0], &arg2); + SE_PRECONDITION2(ok, false, "LightProbeInfo_showProbe_set,2,SWIGTYPE_bool"); + cc_gi_LightProbeInfo_showProbe_set(arg1,arg2); + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_LightProbeInfo_showProbe_set) + +static bool js_cc_gi_LightProbeInfo_showProbe_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::LightProbeInfo *arg1 = (cc::gi::LightProbeInfo *) NULL ; + bool result; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (bool)cc_gi_LightProbeInfo_showProbe_get(arg1); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_LightProbeInfo_showProbe_get) + +static bool js_cc_gi_LightProbeInfo_showWireframe_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbeInfo *arg1 = (cc::gi::LightProbeInfo *) NULL ; + bool arg2 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) bool + ok &= sevalue_to_native(args[0], &arg2); + SE_PRECONDITION2(ok, false, "LightProbeInfo_showWireframe_set,2,SWIGTYPE_bool"); + cc_gi_LightProbeInfo_showWireframe_set(arg1,arg2); + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_LightProbeInfo_showWireframe_set) + +static bool js_cc_gi_LightProbeInfo_showWireframe_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::LightProbeInfo *arg1 = (cc::gi::LightProbeInfo *) NULL ; + bool result; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (bool)cc_gi_LightProbeInfo_showWireframe_get(arg1); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_LightProbeInfo_showWireframe_get) + +static bool js_cc_gi_LightProbeInfo_showConvex_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbeInfo *arg1 = (cc::gi::LightProbeInfo *) NULL ; + bool arg2 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) bool + ok &= sevalue_to_native(args[0], &arg2); + SE_PRECONDITION2(ok, false, "LightProbeInfo_showConvex_set,2,SWIGTYPE_bool"); + cc_gi_LightProbeInfo_showConvex_set(arg1,arg2); + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_LightProbeInfo_showConvex_set) + +static bool js_cc_gi_LightProbeInfo_showConvex_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::LightProbeInfo *arg1 = (cc::gi::LightProbeInfo *) NULL ; + bool result; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (bool)cc_gi_LightProbeInfo_showConvex_get(arg1); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_LightProbeInfo_showConvex_get) + +static bool js_cc_gi_LightProbeInfo_data_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbeInfo *arg1 = (cc::gi::LightProbeInfo *) NULL ; + cc::gi::LightProbesData *arg2 = 0 ; + cc::gi::LightProbesData temp2 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "LightProbeInfo_data_set,2,SWIGTYPE_p_cc__gi__LightProbesData"); + arg2 = &temp2; + + cc_gi_LightProbeInfo_data_set(arg1,*arg2); + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_LightProbeInfo_data_set) + +static bool js_cc_gi_LightProbeInfo_data_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::LightProbeInfo *arg1 = (cc::gi::LightProbeInfo *) NULL ; + cc::gi::LightProbesData *result = 0 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (cc::gi::LightProbesData *) &cc_gi_LightProbeInfo_data_get(arg1); + // %typemap(out) SWIGTYPE& + ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "LightProbeInfo_data_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_LightProbeInfo_data_get) + +bool js_register_cc_gi_LightProbeInfo(se::Object* obj) { + auto* cls = se::Class::create("LightProbeInfo", obj, nullptr, _SE(js_new_cc_gi_LightProbeInfo)); + + cls->defineProperty("_enabled", _SE(js_cc_gi_LightProbeInfo__enabled_get), _SE(js_cc_gi_LightProbeInfo__enabled_set)); + cls->defineProperty("_reduceRinging", _SE(js_cc_gi_LightProbeInfo__reduceRinging_get), _SE(js_cc_gi_LightProbeInfo__reduceRinging_set)); + cls->defineProperty("_showProbe", _SE(js_cc_gi_LightProbeInfo__showProbe_get), _SE(js_cc_gi_LightProbeInfo__showProbe_set)); + cls->defineProperty("_showWireframe", _SE(js_cc_gi_LightProbeInfo__showWireframe_get), _SE(js_cc_gi_LightProbeInfo__showWireframe_set)); + cls->defineProperty("_showConvex", _SE(js_cc_gi_LightProbeInfo__showConvex_get), _SE(js_cc_gi_LightProbeInfo__showConvex_set)); + cls->defineProperty("_data", _SE(js_cc_gi_LightProbeInfo__data_get), _SE(js_cc_gi_LightProbeInfo__data_set)); + cls->defineProperty("enabled", _SE(js_cc_gi_LightProbeInfo_enabled_get), _SE(js_cc_gi_LightProbeInfo_enabled_set)); + cls->defineProperty("reduceRinging", _SE(js_cc_gi_LightProbeInfo_reduceRinging_get), _SE(js_cc_gi_LightProbeInfo_reduceRinging_set)); + cls->defineProperty("showProbe", _SE(js_cc_gi_LightProbeInfo_showProbe_get), _SE(js_cc_gi_LightProbeInfo_showProbe_set)); + cls->defineProperty("showWireframe", _SE(js_cc_gi_LightProbeInfo_showWireframe_get), _SE(js_cc_gi_LightProbeInfo_showWireframe_set)); + cls->defineProperty("showConvex", _SE(js_cc_gi_LightProbeInfo_showConvex_get), _SE(js_cc_gi_LightProbeInfo_showConvex_set)); + cls->defineProperty("data", _SE(js_cc_gi_LightProbeInfo_data_get), _SE(js_cc_gi_LightProbeInfo_data_set)); + + cls->defineFunction("activate", _SE(js_cc_gi_LightProbeInfo_activate)); + + + + + cls->defineFinalizeFunction(_SE(js_delete_cc_gi_LightProbeInfo)); + + + cls->install(); + JSBClassType::registerClass(cls); + + __jsb_cc_gi_LightProbeInfo_proto = cls->getProto(); + __jsb_cc_gi_LightProbeInfo_class = cls; + se::ScriptEngine::getInstance()->clearException(); + return true; +} + + + + +bool register_all_gi(se::Object* obj) { + // Get the ns + se::Value nsVal; + if (!obj->getProperty("jsb", &nsVal, true)) + { + se::HandleObject jsobj(se::Object::createPlainObject()); + nsVal.setObject(jsobj); + obj->setProperty("jsb", nsVal); + } + se::Object* ns = nsVal.toObject(); + /* Register classes */ + js_register_cc_gi_Vertex(ns); + js_register_cc_gi_CircumSphere(ns); + js_register_cc_gi_Tetrahedron(ns); + js_register_cc_gi_Delaunay(ns); + js_register_cc_gi_LightProbesData(ns); + js_register_cc_gi_LightProbes(ns); + js_register_cc_gi_LightProbeInfo(ns); + + /* Register global variables & global functions */ + + + + return true; +} + + +#if defined(__clang__) +#pragma clang diagnostic pop +#elif defined(__GNUC__) || defined(__GNUG__) +#pragma GCC diagnostic pop +#elif defined(_MSC_VER) +#pragma warning(pop) +#endif +// clang-format on diff --git a/native/cocos/bindings/auto/jsb_gi_auto.h b/native/cocos/bindings/auto/jsb_gi_auto.h new file mode 100644 index 00000000000..c4490301c51 --- /dev/null +++ b/native/cocos/bindings/auto/jsb_gi_auto.h @@ -0,0 +1,95 @@ +// clang-format off + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 4.1.0 + * + * This file is not intended to be easily readable and contains a number of + * coding conventions designed to improve portability and efficiency. Do not make + * changes to this file unless you know what you are doing--modify the SWIG + * interface file instead. + * ----------------------------------------------------------------------------- */ + +/**************************************************************************** + Copyright (c) 2022 Xiamen Yaji Software Co., Ltd. + + http://www.cocos.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated engine source code (the "Software"), a limited, + worldwide, royalty-free, non-assignable, revocable and non-exclusive license + to use Cocos Creator solely to develop games on your target platforms. You shall + not use Cocos Creator software for developing other software or tools that's + used for developing games. You are not granted to publish, distribute, + sublicense, and/or sell copies of Cocos Creator. + + The software or tools in this License Agreement are licensed, not sold. + Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +****************************************************************************/ + +#pragma once +#include "bindings/jswrapper/SeApi.h" +#include "bindings/manual/jsb_conversions.h" +#include "gi/light-probe/Delaunay.h" +#include "gi/light-probe/LightProbe.h" + + + +bool register_all_gi(se::Object* obj); + + +JSB_REGISTER_OBJECT_TYPE(cc::gi::Vertex); +extern se::Object *__jsb_cc_gi_Vertex_proto; // NOLINT +extern se::Class * __jsb_cc_gi_Vertex_class; // NOLINT + + +template<> +bool sevalue_to_native(const se::Value &from, cc::gi::Vertex * to, se::Object *ctx); + + +JSB_REGISTER_OBJECT_TYPE(cc::gi::CircumSphere); +extern se::Object *__jsb_cc_gi_CircumSphere_proto; // NOLINT +extern se::Class * __jsb_cc_gi_CircumSphere_class; // NOLINT + + +template<> +bool sevalue_to_native(const se::Value &from, cc::gi::CircumSphere * to, se::Object *ctx); + + +JSB_REGISTER_OBJECT_TYPE(cc::gi::Tetrahedron); +extern se::Object *__jsb_cc_gi_Tetrahedron_proto; // NOLINT +extern se::Class * __jsb_cc_gi_Tetrahedron_class; // NOLINT + + +template<> +bool sevalue_to_native(const se::Value &from, cc::gi::Tetrahedron * to, se::Object *ctx); + + +JSB_REGISTER_OBJECT_TYPE(cc::gi::Delaunay); +extern se::Object *__jsb_cc_gi_Delaunay_proto; // NOLINT +extern se::Class * __jsb_cc_gi_Delaunay_class; // NOLINT + + +JSB_REGISTER_OBJECT_TYPE(cc::gi::LightProbesData); +extern se::Object *__jsb_cc_gi_LightProbesData_proto; // NOLINT +extern se::Class * __jsb_cc_gi_LightProbesData_class; // NOLINT + + +JSB_REGISTER_OBJECT_TYPE(cc::gi::LightProbes); +extern se::Object *__jsb_cc_gi_LightProbes_proto; // NOLINT +extern se::Class * __jsb_cc_gi_LightProbes_class; // NOLINT + + +JSB_REGISTER_OBJECT_TYPE(cc::gi::LightProbeInfo); +extern se::Object *__jsb_cc_gi_LightProbeInfo_proto; // NOLINT +extern se::Class * __jsb_cc_gi_LightProbeInfo_class; // NOLINT + +// clang-format on diff --git a/native/cocos/bindings/auto/jsb_pipeline_auto.cpp b/native/cocos/bindings/auto/jsb_pipeline_auto.cpp index e24ee3cc3c0..6184b3da994 100644 --- a/native/cocos/bindings/auto/jsb_pipeline_auto.cpp +++ b/native/cocos/bindings/auto/jsb_pipeline_auto.cpp @@ -123,6 +123,9 @@ using namespace cc; #define cc_pipeline_PipelineSceneData_shadows_get(self_) self_->getShadows() +#define cc_pipeline_PipelineSceneData_lightProbes_get(self_) self_->getLightProbes() + + #define cc_pipeline_BloomStage_threshold_get(self_) self_->getThreshold() #define cc_pipeline_BloomStage_threshold_set(self_, val_) self_->setThreshold(val_) @@ -4105,6 +4108,136 @@ bool js_register_cc_pipeline_UBOUILocal(se::Object* obj) { } +se::Class* __jsb_cc_pipeline_UBOSH_class = nullptr; +se::Object* __jsb_cc_pipeline_UBOSH_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_pipeline_UBOSH) + +static bool js_cc_pipeline_UBOSH_DESCRIPTOR_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gfx::DescriptorSetLayoutBinding result; + + result = cc::pipeline::UBOSH::DESCRIPTOR; + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "UBOSH_DESCRIPTOR_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_PROP_GET(js_cc_pipeline_UBOSH_DESCRIPTOR_get) + +static bool js_cc_pipeline_UBOSH_LAYOUT_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gfx::UniformBlock result; + + result = cc::pipeline::UBOSH::LAYOUT; + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "UBOSH_LAYOUT_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_PROP_GET(js_cc_pipeline_UBOSH_LAYOUT_get) + +static bool js_cc_pipeline_UBOSH_NAME_get(se::State& s) +{ + CC_UNUSED bool ok = true; + ccstd::string result; + + result = (ccstd::string)cc::pipeline::UBOSH::NAME; + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "UBOSH_NAME_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_PROP_GET(js_cc_pipeline_UBOSH_NAME_get) + +// js_ctor +static bool js_new_cc_pipeline_UBOSH(se::State& s) // NOLINT(readability-identifier-naming) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + + cc::pipeline::UBOSH *result; + result = (cc::pipeline::UBOSH *)new cc::pipeline::UBOSH(); + + + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); + return true; +} +SE_BIND_CTOR(js_new_cc_pipeline_UBOSH, __jsb_cc_pipeline_UBOSH_class, js_delete_cc_pipeline_UBOSH) + +static bool js_delete_cc_pipeline_UBOSH(se::State& s) +{ + // js_dtoroverride + return true; +} +SE_BIND_FINALIZE_FUNC(js_delete_cc_pipeline_UBOSH) + +template<> +bool sevalue_to_native(const se::Value &from, cc::pipeline::UBOSH * to, se::Object *ctx) +{ + assert(from.isObject()); + se::Object *json = from.toObject(); + auto* data = reinterpret_cast(json->getPrivateData()); + if (data) { + *to = *data; + return true; + } + se::Value field; + bool ok = true; + + return ok; +} + + +bool js_register_cc_pipeline_UBOSH(se::Object* obj) { + auto* cls = se::Class::create("UBOSH", obj, nullptr, _SE(js_new_cc_pipeline_UBOSH)); + + + + cls->defineStaticProperty("SH_LINEAR_CONST_R_OFFSET", nullptr, nullptr); + cls->defineStaticProperty("SH_LINEAR_CONST_G_OFFSET", nullptr, nullptr); + cls->defineStaticProperty("SH_LINEAR_CONST_B_OFFSET", nullptr, nullptr); + cls->defineStaticProperty("SH_QUADRATIC_R_OFFSET", nullptr, nullptr); + cls->defineStaticProperty("SH_QUADRATIC_G_OFFSET", nullptr, nullptr); + cls->defineStaticProperty("SH_QUADRATIC_B_OFFSET", nullptr, nullptr); + cls->defineStaticProperty("SH_QUADRATIC_A_OFFSET", nullptr, nullptr); + cls->defineStaticProperty("COUNT", nullptr, nullptr); + cls->defineStaticProperty("SIZE", nullptr, nullptr); + cls->defineStaticProperty("BINDING", nullptr, nullptr); + cls->defineStaticProperty("DESCRIPTOR", _SE(js_cc_pipeline_UBOSH_DESCRIPTOR_get), nullptr); + cls->defineStaticProperty("LAYOUT", _SE(js_cc_pipeline_UBOSH_LAYOUT_get), nullptr); + cls->defineStaticProperty("NAME", _SE(js_cc_pipeline_UBOSH_NAME_get), nullptr); + + + + cls->defineFinalizeFunction(_SE(js_delete_cc_pipeline_UBOSH)); + + + cls->install(); + JSBClassType::registerClass(cls); + + __jsb_cc_pipeline_UBOSH_proto = cls->getProto(); + __jsb_cc_pipeline_UBOSH_class = cls; + se::ScriptEngine::getInstance()->clearException(); + return true; +} + + static bool js_cc_pipeline_toNumber__SWIG_7(se::State& s) { // js_overloaded_function @@ -13900,6 +14033,25 @@ static bool js_cc_pipeline_PipelineSceneData_shadows_get(se::State& s) } SE_BIND_PROP_GET(js_cc_pipeline_PipelineSceneData_shadows_get) +static bool js_cc_pipeline_PipelineSceneData_lightProbes_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::pipeline::PipelineSceneData *arg1 = (cc::pipeline::PipelineSceneData *) NULL ; + cc::gi::LightProbes *result = 0 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (cc::gi::LightProbes *)cc_pipeline_PipelineSceneData_lightProbes_get(arg1); + // %typemap(out) SWIGTYPE* + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "PipelineSceneData_lightProbes_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + return true; +} +SE_BIND_PROP_GET(js_cc_pipeline_PipelineSceneData_lightProbes_get) + bool js_register_cc_pipeline_PipelineSceneData(se::Object* obj) { auto* cls = se::Class::create("PipelineSceneData", obj, nullptr, _SE(js_new_cc_pipeline_PipelineSceneData)); @@ -13909,6 +14061,7 @@ bool js_register_cc_pipeline_PipelineSceneData(se::Object* obj) { cls->defineProperty("ambient", _SE(js_cc_pipeline_PipelineSceneData_ambient_get), nullptr); cls->defineProperty("skybox", _SE(js_cc_pipeline_PipelineSceneData_skybox_get), nullptr); cls->defineProperty("shadows", _SE(js_cc_pipeline_PipelineSceneData_shadows_get), nullptr); + cls->defineProperty("lightProbes", _SE(js_cc_pipeline_PipelineSceneData_lightProbes_get), nullptr); cls->defineFunction("activate", _SE(js_cc_pipeline_PipelineSceneData_activate)); cls->defineFunction("destroy", _SE(js_cc_pipeline_PipelineSceneData_destroy)); @@ -21505,6 +21658,7 @@ bool register_all_pipeline(se::Object* obj) { js_register_cc_pipeline_UBOSkinning(ns); js_register_cc_pipeline_UBOMorph(ns); js_register_cc_pipeline_UBOUILocal(ns); + js_register_cc_pipeline_UBOSH(ns); js_register_cc_pipeline_UBOGlobal(ns); js_register_cc_pipeline_UBOCamera(ns); js_register_cc_pipeline_UBOShadow(ns); diff --git a/native/cocos/bindings/auto/jsb_pipeline_auto.h b/native/cocos/bindings/auto/jsb_pipeline_auto.h index 2e95ae21a5a..2ceb715f847 100644 --- a/native/cocos/bindings/auto/jsb_pipeline_auto.h +++ b/native/cocos/bindings/auto/jsb_pipeline_auto.h @@ -246,6 +246,15 @@ template<> bool sevalue_to_native(const se::Value &from, cc::pipeline::UBOUILocal * to, se::Object *ctx); +JSB_REGISTER_OBJECT_TYPE(cc::pipeline::UBOSH); +extern se::Object *__jsb_cc_pipeline_UBOSH_proto; // NOLINT +extern se::Class * __jsb_cc_pipeline_UBOSH_class; // NOLINT + + +template<> +bool sevalue_to_native(const se::Value &from, cc::pipeline::UBOSH * to, se::Object *ctx); + + JSB_REGISTER_OBJECT_TYPE(cc::pipeline::UBOGlobal); extern se::Object *__jsb_cc_pipeline_UBOGlobal_proto; // NOLINT extern se::Class * __jsb_cc_pipeline_UBOGlobal_class; // NOLINT diff --git a/native/cocos/bindings/auto/jsb_scene_auto.cpp b/native/cocos/bindings/auto/jsb_scene_auto.cpp index d90bbe9251e..fb2c3df9946 100644 --- a/native/cocos/bindings/auto/jsb_scene_auto.cpp +++ b/native/cocos/bindings/auto/jsb_scene_auto.cpp @@ -238,6 +238,10 @@ using namespace cc; #define cc_Node__persistNode_set(self_, val_) self_->setPersistNode(val_) +#define cc_Node__mobility_get(self_) self_->getMobility() +#define cc_Node__mobility_set(self_, val_) self_->setMobility(val_) + + #define cc_scene_Ambient_skyColor_get(self_) self_->getSkyColor() #define cc_scene_Ambient_skyColor_set(self_, val_) self_->setSkyColor(val_) @@ -767,6 +771,10 @@ using namespace cc; #define cc_scene_Model_priority_set(self_, val_) self_->setPriority(val_) +#define cc_scene_Model_useLightProbe_get(self_) self_->getUseLightProbe() +#define cc_scene_Model_useLightProbe_set(self_, val_) self_->setUseLightProbe(val_) + + #define cc_scene_SubModel_passes_get(self_) self_->getPasses() #define cc_scene_SubModel_passes_set(self_, val_) self_->setPasses(val_) @@ -3999,6 +4007,46 @@ static bool js_cc_Node__persistNode_get(se::State& s) } SE_BIND_PROP_GET(js_cc_Node__persistNode_get) +static bool js_cc_Node__mobility_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::Node *arg1 = (cc::Node *) NULL ; + cc::MobilityMode arg2 ; + int32_t temp2 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) enum SWIGTYPE (int32_t temp2) + ok &= sevalue_to_native(args[0], &temp2); + SE_PRECONDITION2(ok, false, "Node__mobility_set,2,SWIGTYPE_cc__MobilityMode"); + arg2 = (cc::MobilityMode)temp2; + cc_Node__mobility_set(arg1,arg2); + + + return true; +} +SE_BIND_PROP_SET(js_cc_Node__mobility_set) + +static bool js_cc_Node__mobility_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::Node *arg1 = (cc::Node *) NULL ; + cc::MobilityMode result; + int32_t temp ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (cc::MobilityMode)cc_Node__mobility_get(arg1); + // out 4 + s.rval().setInt32(static_cast(result)); + + + return true; +} +SE_BIND_PROP_GET(js_cc_Node__mobility_get) + bool js_register_cc_Node(se::Object* obj) { auto* cls = se::Class::create("Node", obj, __jsb_cc_CCObject_proto, _SE(js_new_Node)); @@ -4010,6 +4058,7 @@ bool js_register_cc_Node(se::Object* obj) { cls->defineProperty("matrix", nullptr, _SE(js_cc_Node_matrix_set)); cls->defineProperty("hasChangedFlags", _SE(js_cc_Node_hasChangedFlags_get), _SE(js_cc_Node_hasChangedFlags_set)); cls->defineProperty("_persistNode", _SE(js_cc_Node__persistNode_get), _SE(js_cc_Node__persistNode_set)); + cls->defineProperty("_mobility", _SE(js_cc_Node__mobility_get), _SE(js_cc_Node__mobility_set)); cls->defineFunction("onPostActivated", _SE(js_cc_Node_onPostActivated)); cls->defineFunction("setParent", _SE(js_cc_Node_setParent)); @@ -4603,6 +4652,33 @@ static bool js_cc_SceneGlobals_getOctreeInfo(se::State& s) } SE_BIND_FUNC(js_cc_SceneGlobals_getOctreeInfo) +static bool js_cc_SceneGlobals_getLightProbeInfo(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::SceneGlobals *arg1 = (cc::SceneGlobals *) NULL ; + cc::gi::LightProbeInfo *result = 0 ; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (cc::gi::LightProbeInfo *)((cc::SceneGlobals const *)arg1)->getLightProbeInfo(); + // %typemap(out) SWIGTYPE* + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "SceneGlobals_getLightProbeInfo, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + return true; +} +SE_BIND_FUNC(js_cc_SceneGlobals_getLightProbeInfo) + static bool js_cc_SceneGlobals_setAmbientInfo(se::State& s) { // js_function @@ -4733,6 +4809,32 @@ static bool js_cc_SceneGlobals_setOctreeInfo(se::State& s) } SE_BIND_FUNC(js_cc_SceneGlobals_setOctreeInfo) +static bool js_cc_SceneGlobals_setLightProbeInfo(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::SceneGlobals *arg1 = (cc::SceneGlobals *) NULL ; + cc::gi::LightProbeInfo *arg2 = (cc::gi::LightProbeInfo *) NULL ; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "SceneGlobals_setLightProbeInfo,2,SWIGTYPE_p_cc__gi__LightProbeInfo"); + (arg1)->setLightProbeInfo(arg2); + + + return true; +} +SE_BIND_FUNC(js_cc_SceneGlobals_setLightProbeInfo) + bool js_register_cc_SceneGlobals(se::Object* obj) { auto* cls = se::Class::create("SceneGlobals", obj, nullptr, _SE(js_new_cc_SceneGlobals)); @@ -4743,11 +4845,13 @@ bool js_register_cc_SceneGlobals(se::Object* obj) { cls->defineFunction("getSkyboxInfo", _SE(js_cc_SceneGlobals_getSkyboxInfo)); cls->defineFunction("getFogInfo", _SE(js_cc_SceneGlobals_getFogInfo)); cls->defineFunction("getOctreeInfo", _SE(js_cc_SceneGlobals_getOctreeInfo)); + cls->defineFunction("getLightProbeInfo", _SE(js_cc_SceneGlobals_getLightProbeInfo)); cls->defineFunction("setAmbientInfo", _SE(js_cc_SceneGlobals_setAmbientInfo)); cls->defineFunction("setShadowsInfo", _SE(js_cc_SceneGlobals_setShadowsInfo)); cls->defineFunction("setSkyboxInfo", _SE(js_cc_SceneGlobals_setSkyboxInfo)); cls->defineFunction("setFogInfo", _SE(js_cc_SceneGlobals_setFogInfo)); cls->defineFunction("setOctreeInfo", _SE(js_cc_SceneGlobals_setOctreeInfo)); + cls->defineFunction("setLightProbeInfo", _SE(js_cc_SceneGlobals_setLightProbeInfo)); @@ -13196,6 +13300,38 @@ static bool js_cc_scene_Model__updateLocalDescriptors(se::State& s) } SE_BIND_FUNC(js_cc_scene_Model__updateLocalDescriptors) +static bool js_cc_scene_Model__updateLocalSHDescriptors(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::scene::Model *arg1 = (cc::scene::Model *) NULL ; + index_t arg2 ; + cc::gfx::DescriptorSet *arg3 = (cc::gfx::DescriptorSet *) NULL ; + + if(argc != 2) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "Model__updateLocalSHDescriptors,2,SWIGTYPE_int32_t"); + + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[1], &arg3, s.thisObject()); + SE_PRECONDITION2(ok, false, "Model__updateLocalSHDescriptors,3,SWIGTYPE_p_cc__gfx__DescriptorSet"); + (arg1)->updateLocalSHDescriptors(arg2,arg3); + + + return true; +} +SE_BIND_FUNC(js_cc_scene_Model__updateLocalSHDescriptors) + static bool js_cc_scene_Model_updateWorldBoundDescriptors(se::State& s) { // js_function @@ -13347,6 +13483,34 @@ static bool js_cc_scene_Model__initLocalDescriptors(se::State& s) } SE_BIND_FUNC(js_cc_scene_Model__initLocalDescriptors) +static bool js_cc_scene_Model__initLocalSHDescriptors(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::scene::Model *arg1 = (cc::scene::Model *) NULL ; + index_t arg2 ; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "Model__initLocalSHDescriptors,2,SWIGTYPE_int32_t"); + + (arg1)->initLocalSHDescriptors(arg2); + + + return true; +} +SE_BIND_FUNC(js_cc_scene_Model__initLocalSHDescriptors) + static bool js_cc_scene_Model_initWorldBoundDescriptors(se::State& s) { // js_function @@ -13629,6 +13793,28 @@ static bool js_cc_scene_Model_updateLightingmap(se::State& s) } SE_BIND_FUNC(js_cc_scene_Model_updateLightingmap) +static bool js_cc_scene_Model_updateSHUBOs(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::scene::Model *arg1 = (cc::scene::Model *) NULL ; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + (arg1)->updateSHUBOs(); + + + return true; +} +SE_BIND_FUNC(js_cc_scene_Model_updateSHUBOs) + static bool js_cc_scene_Model_updateWorldBoundUBOs(se::State& s) { // js_function @@ -13721,6 +13907,32 @@ static bool js_cc_scene_Model_detachFromScene(se::State& s) } SE_BIND_FUNC(js_cc_scene_Model_detachFromScene) +static bool js_cc_scene_Model_setLocalSHBuffer(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::scene::Model *arg1 = (cc::scene::Model *) NULL ; + cc::gfx::Buffer *arg2 = (cc::gfx::Buffer *) NULL ; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "Model_setLocalSHBuffer,2,SWIGTYPE_p_cc__gfx__Buffer"); + (arg1)->setLocalSHBuffer(arg2); + + + return true; +} +SE_BIND_FUNC(js_cc_scene_Model_setLocalSHBuffer) + static bool js_cc_scene_Model_setBounds(se::State& s) { // js_function @@ -13747,6 +13959,143 @@ static bool js_cc_scene_Model_setBounds(se::State& s) } SE_BIND_FUNC(js_cc_scene_Model_setBounds) +static bool js_cc_scene_Model_getTetrahedronIndex(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::scene::Model *arg1 = (cc::scene::Model *) NULL ; + int32_t result; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = ((cc::scene::Model const *)arg1)->getTetrahedronIndex(); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "Model_getTetrahedronIndex, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_FUNC(js_cc_scene_Model_getTetrahedronIndex) + +static bool js_cc_scene_Model_setTetrahedronIndex(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::scene::Model *arg1 = (cc::scene::Model *) NULL ; + int32_t arg2 ; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "Model_setTetrahedronIndex,2,SWIGTYPE_int32_t"); + + (arg1)->setTetrahedronIndex(arg2); + + + return true; +} +SE_BIND_FUNC(js_cc_scene_Model_setTetrahedronIndex) + +static bool js_cc_scene_Model_showTetrahedron(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::scene::Model *arg1 = (cc::scene::Model *) NULL ; + bool result; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (bool)((cc::scene::Model const *)arg1)->showTetrahedron(); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + + + return true; +} +SE_BIND_FUNC(js_cc_scene_Model_showTetrahedron) + +static bool js_cc_scene_Model_getLocalSHBuffer(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::scene::Model *arg1 = (cc::scene::Model *) NULL ; + cc::gfx::Buffer *result = 0 ; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (cc::gfx::Buffer *)((cc::scene::Model const *)arg1)->getLocalSHBuffer(); + // %typemap(out) SWIGTYPE* + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "Model_getLocalSHBuffer, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + return true; +} +SE_BIND_FUNC(js_cc_scene_Model_getLocalSHBuffer) + +static bool js_cc_scene_Model_getLocalSHData(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::scene::Model *arg1 = (cc::scene::Model *) NULL ; + cc::Float32Array result; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = ((cc::scene::Model const *)arg1)->getLocalSHData(); + + // %typemap(out) cc::Float32Array + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "Model_getLocalSHData, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_FUNC(js_cc_scene_Model_getLocalSHData) + static bool js_cc_scene_Model_setCalledFromJS(se::State& s) { // js_function @@ -14607,6 +14956,43 @@ static bool js_cc_scene_Model_priority_get(se::State& s) } SE_BIND_PROP_GET(js_cc_scene_Model_priority_get) +static bool js_cc_scene_Model_useLightProbe_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::scene::Model *arg1 = (cc::scene::Model *) NULL ; + bool arg2 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) bool + ok &= sevalue_to_native(args[0], &arg2); + SE_PRECONDITION2(ok, false, "Model_useLightProbe_set,2,SWIGTYPE_bool"); + cc_scene_Model_useLightProbe_set(arg1,arg2); + + + return true; +} +SE_BIND_PROP_SET(js_cc_scene_Model_useLightProbe_set) + +static bool js_cc_scene_Model_useLightProbe_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::scene::Model *arg1 = (cc::scene::Model *) NULL ; + bool result; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (bool)cc_scene_Model_useLightProbe_get(arg1); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + + + return true; +} +SE_BIND_PROP_GET(js_cc_scene_Model_useLightProbe_get) + bool js_register_cc_scene_Model(se::Object* obj) { auto* cls = se::Class::create("Model", obj, nullptr, _SE(js_new_cc_scene_Model)); @@ -14633,6 +15019,7 @@ bool js_register_cc_scene_Model(se::Object* obj) { cls->defineProperty("type", _SE(js_cc_scene_Model_type_get), _SE(js_cc_scene_Model_type_set)); cls->defineProperty("isDynamicBatching", _SE(js_cc_scene_Model_isDynamicBatching_get), _SE(js_cc_scene_Model_isDynamicBatching_set)); cls->defineProperty("priority", _SE(js_cc_scene_Model_priority_get), _SE(js_cc_scene_Model_priority_set)); + cls->defineProperty("useLightProbe", _SE(js_cc_scene_Model_useLightProbe_get), _SE(js_cc_scene_Model_useLightProbe_set)); cls->defineFunction("destroy", _SE(js_cc_scene_Model_destroy)); cls->defineFunction("initSubModel", _SE(js_cc_scene_Model_initSubModel)); @@ -14642,11 +15029,13 @@ bool js_register_cc_scene_Model(se::Object* obj) { cls->defineFunction("updateTransform", _SE(js_cc_scene_Model_updateTransform)); cls->defineFunction("updateUBOs", _SE(js_cc_scene_Model_updateUBOs)); cls->defineFunction("_updateLocalDescriptors", _SE(js_cc_scene_Model__updateLocalDescriptors)); + cls->defineFunction("_updateLocalSHDescriptors", _SE(js_cc_scene_Model__updateLocalSHDescriptors)); cls->defineFunction("updateWorldBoundDescriptors", _SE(js_cc_scene_Model_updateWorldBoundDescriptors)); cls->defineFunction("createBoundingShape", _SE(js_cc_scene_Model_createBoundingShape)); cls->defineFunction("initialize", _SE(js_cc_scene_Model_initialize)); cls->defineFunction("initLightingmap", _SE(js_cc_scene_Model_initLightingmap)); cls->defineFunction("_initLocalDescriptors", _SE(js_cc_scene_Model__initLocalDescriptors)); + cls->defineFunction("_initLocalSHDescriptors", _SE(js_cc_scene_Model__initLocalSHDescriptors)); cls->defineFunction("initWorldBoundDescriptors", _SE(js_cc_scene_Model_initWorldBoundDescriptors)); cls->defineFunction("onGlobalPipelineStateChanged", _SE(js_cc_scene_Model_onGlobalPipelineStateChanged)); cls->defineFunction("onMacroPatchesStateChanged", _SE(js_cc_scene_Model_onMacroPatchesStateChanged)); @@ -14657,11 +15046,18 @@ bool js_register_cc_scene_Model(se::Object* obj) { cls->defineFunction("updateWorldBoundsForJSSkinningModel", _SE(js_cc_scene_Model_updateWorldBoundsForJSSkinningModel)); cls->defineFunction("updateWorldBoundsForJSBakedSkinningModel", _SE(js_cc_scene_Model_updateWorldBoundsForJSBakedSkinningModel)); cls->defineFunction("updateLightingmap", _SE(js_cc_scene_Model_updateLightingmap)); + cls->defineFunction("updateSHUBOs", _SE(js_cc_scene_Model_updateSHUBOs)); cls->defineFunction("updateWorldBoundUBOs", _SE(js_cc_scene_Model_updateWorldBoundUBOs)); cls->defineFunction("updateLocalShadowBias", _SE(js_cc_scene_Model_updateLocalShadowBias)); cls->defineFunction("attachToScene", _SE(js_cc_scene_Model_attachToScene)); cls->defineFunction("detachFromScene", _SE(js_cc_scene_Model_detachFromScene)); + cls->defineFunction("setLocalSHBuffer", _SE(js_cc_scene_Model_setLocalSHBuffer)); cls->defineFunction("setBounds", _SE(js_cc_scene_Model_setBounds)); + cls->defineFunction("getTetrahedronIndex", _SE(js_cc_scene_Model_getTetrahedronIndex)); + cls->defineFunction("setTetrahedronIndex", _SE(js_cc_scene_Model_setTetrahedronIndex)); + cls->defineFunction("showTetrahedron", _SE(js_cc_scene_Model_showTetrahedron)); + cls->defineFunction("getLocalSHBuffer", _SE(js_cc_scene_Model_getLocalSHBuffer)); + cls->defineFunction("getLocalSHData", _SE(js_cc_scene_Model_getLocalSHData)); cls->defineFunction("setCalledFromJS", _SE(js_cc_scene_Model_setCalledFromJS)); cls->defineFunction("isModelImplementedInJS", _SE(js_cc_scene_Model_isModelImplementedInJS)); diff --git a/native/cocos/bindings/auto/jsb_scene_auto.h b/native/cocos/bindings/auto/jsb_scene_auto.h index 84d29af6062..29ddaf4f7c0 100644 --- a/native/cocos/bindings/auto/jsb_scene_auto.h +++ b/native/cocos/bindings/auto/jsb_scene_auto.h @@ -38,6 +38,7 @@ #pragma once #include "bindings/jswrapper/SeApi.h" #include "bindings/manual/jsb_conversions.h" +#include "bindings/auto/jsb_gi_auto.h" #include "core/Root.h" #include "core/scene-graph/Node.h" #include "core/scene-graph/Scene.h" diff --git a/native/cocos/bindings/manual/jsb_module_register.cpp b/native/cocos/bindings/manual/jsb_module_register.cpp index 95679ccc57f..e5104b6868c 100644 --- a/native/cocos/bindings/manual/jsb_module_register.cpp +++ b/native/cocos/bindings/manual/jsb_module_register.cpp @@ -31,6 +31,7 @@ #include "cocos/bindings/auto/jsb_extension_auto.h" #include "cocos/bindings/auto/jsb_geometry_auto.h" #include "cocos/bindings/auto/jsb_gfx_auto.h" +#include "cocos/bindings/auto/jsb_gi_auto.h" #include "cocos/bindings/auto/jsb_network_auto.h" #include "cocos/bindings/auto/jsb_pipeline_auto.h" #include "cocos/bindings/auto/jsb_render_auto.h" @@ -138,6 +139,7 @@ bool jsb_register_all_modules() { se->addRegisterCallback(register_all_pipeline_manual); se->addRegisterCallback(register_all_geometry); se->addRegisterCallback(register_all_scene); + se->addRegisterCallback(register_all_gi); se->addRegisterCallback(register_all_scene_manual); se->addRegisterCallback(register_all_render); se->addRegisterCallback(register_all_native2d); diff --git a/native/cocos/bindings/manual/jsb_scene_manual.cpp b/native/cocos/bindings/manual/jsb_scene_manual.cpp index f1bcb6df55e..f4f352cdc0f 100644 --- a/native/cocos/bindings/manual/jsb_scene_manual.cpp +++ b/native/cocos/bindings/manual/jsb_scene_manual.cpp @@ -718,6 +718,26 @@ static bool js_Model_registerListeners(se::State &s) // NOLINT(readability-ident se::ScriptEngine::getInstance()->callFunction(thiz, "_updateLocalDescriptors", static_cast(args.size()), args.data()); }); + cobj->getEventProcessor().on(cc::EventTypesToJS::MODEL_UPDATE_LOCAL_SH_DESCRIPTORS, [=](index_t subModelIndex, cc::gfx::DescriptorSet *descriptorSet) { + cobj->setCalledFromJS(true); + se::AutoHandleScope hs; + + ccstd::array args; + nativevalue_to_se(subModelIndex, args[0]); + nativevalue_to_se(descriptorSet, args[1]); + se::ScriptEngine::getInstance()->callFunction(thiz, "_updateLocalSHDescriptors", static_cast(args.size()), args.data()); + }); + + cobj->getEventProcessor().on(cc::EventTypesToJS::MODEL_UPDATE_WORLD_BOUND_DESCRIPTORS, [=](index_t subModelIndex, cc::gfx::DescriptorSet *descriptorSet) { + cobj->setCalledFromJS(true); + se::AutoHandleScope hs; + + ccstd::array args; + nativevalue_to_se(subModelIndex, args[0]); + nativevalue_to_se(descriptorSet, args[1]); + se::ScriptEngine::getInstance()->callFunction(thiz, "_updateWorldBoundDescriptors", static_cast(args.size()), args.data()); + }); + cobj->getEventProcessor().on(cc::EventTypesToJS::MODEL_UPDATE_INSTANCED_ATTRIBUTES, [=](const ccstd::vector &attributes, cc::scene::SubModel *subModel) { cobj->setCalledFromJS(true); se::AutoHandleScope hs; diff --git a/native/cocos/core/builtin/DebugInfos.cpp b/native/cocos/core/builtin/DebugInfos.cpp index 10c1c7edeb3..514f855ddb6 100644 --- a/native/cocos/core/builtin/DebugInfos.cpp +++ b/native/cocos/core/builtin/DebugInfos.cpp @@ -459,5 +459,6 @@ ccstd::unordered_map debugInfos = { { 16201, "The asset replacing failed, can not found override asset('%s') for '%s'" }, { 16301, "node '%s' doesn't have any ModelRenderer component, this component will not work. please add ModelRenderer component first" }, +{ 17000, "Less than 4 probes, can not tetrahedralize." }, }; }//namespace cc diff --git a/native/cocos/core/event/EventTypesToJS.cpp b/native/cocos/core/event/EventTypesToJS.cpp index c898b7a3564..ae21f2a8f74 100644 --- a/native/cocos/core/event/EventTypesToJS.cpp +++ b/native/cocos/core/event/EventTypesToJS.cpp @@ -38,30 +38,32 @@ const CallbacksInvoker::KeyType EventTypesToJS::NODE_UI_TRANSFORM_DIRTY{107}; const CallbacksInvoker::KeyType EventTypesToJS::NODE_ACTIVE_NODE{108}; //{"NODE_ACTIVE_NODE"}; const CallbacksInvoker::KeyType EventTypesToJS::NODE_ON_BATCH_CREATED{109}; //{"NODE_ON_BATCH_CREATED"}; -const CallbacksInvoker::KeyType EventTypesToJS::MODEL_UPDATE_TRANSFORM{110}; //{"MODEL_UPDATE_TRANSFORM"}; -const CallbacksInvoker::KeyType EventTypesToJS::MODEL_UPDATE_UBO{111}; //{"MODEL_UPDATE_UBO"}; -const CallbacksInvoker::KeyType EventTypesToJS::MODEL_UPDATE_LOCAL_DESCRIPTORS{112}; //{"MODEL_UPDATE_LOCAL_DESCRIPTORS"}; -const CallbacksInvoker::KeyType EventTypesToJS::MODEL_UPDATE_INSTANCED_ATTRIBUTES{113}; //{"MODEL_UPDATE_INSTANCED_ATTRIBUTES"}; -const CallbacksInvoker::KeyType EventTypesToJS::MODEL_GET_MACRO_PATCHES{114}; //{"MODEL_GET_MACRO_PATCHES"}; +const CallbacksInvoker::KeyType EventTypesToJS::MODEL_UPDATE_TRANSFORM{110}; //{"MODEL_UPDATE_TRANSFORM"}; +const CallbacksInvoker::KeyType EventTypesToJS::MODEL_UPDATE_UBO{111}; //{"MODEL_UPDATE_UBO"}; +const CallbacksInvoker::KeyType EventTypesToJS::MODEL_UPDATE_LOCAL_DESCRIPTORS{112}; //{"MODEL_UPDATE_LOCAL_DESCRIPTORS"}; +const CallbacksInvoker::KeyType EventTypesToJS::MODEL_UPDATE_LOCAL_SH_DESCRIPTORS{113}; //{"MODEL_UPDATE_LOCAL_SH_DESCRIPTORS"}; +const CallbacksInvoker::KeyType EventTypesToJS::MODEL_UPDATE_WORLD_BOUND_DESCRIPTORS{114}; //{"MODEL_UPDATE_WORLD_BOUND_DESCRIPTORS"}; +const CallbacksInvoker::KeyType EventTypesToJS::MODEL_UPDATE_INSTANCED_ATTRIBUTES{115}; //{"MODEL_UPDATE_INSTANCED_ATTRIBUTES"}; +const CallbacksInvoker::KeyType EventTypesToJS::MODEL_GET_MACRO_PATCHES{116}; //{"MODEL_GET_MACRO_PATCHES"}; -const CallbacksInvoker::KeyType EventTypesToJS::DIRECTOR_BEFORE_COMMIT{115}; //{"MODEL_GET_MACRO_PATCHES"}; +const CallbacksInvoker::KeyType EventTypesToJS::DIRECTOR_BEFORE_COMMIT{117}; //{"MODEL_GET_MACRO_PATCHES"}; -const CallbacksInvoker::KeyType EventTypesToJS::SIMPLE_TEXTURE_GFX_TEXTURE_UPDATED{116}; -const CallbacksInvoker::KeyType EventTypesToJS::TEXTURE_BASE_GFX_SAMPLER_UPDATED{117}; +const CallbacksInvoker::KeyType EventTypesToJS::SIMPLE_TEXTURE_GFX_TEXTURE_UPDATED{118}; +const CallbacksInvoker::KeyType EventTypesToJS::TEXTURE_BASE_GFX_SAMPLER_UPDATED{119}; -const CallbacksInvoker::KeyType EventTypesToJS::NODE_SCENE_UPDATED{118}; +const CallbacksInvoker::KeyType EventTypesToJS::NODE_SCENE_UPDATED{120}; -const CallbacksInvoker::KeyType EventTypesToJS::MATERIAL_PASSES_UPDATED{119}; +const CallbacksInvoker::KeyType EventTypesToJS::MATERIAL_PASSES_UPDATED{121}; -const CallbacksInvoker::KeyType EventTypesToJS::NODE_LOCAL_POSITION_UPDATED{120}; -const CallbacksInvoker::KeyType EventTypesToJS::NODE_LOCAL_ROTATION_UPDATED{121}; -const CallbacksInvoker::KeyType EventTypesToJS::NODE_LOCAL_SCALE_UPDATED{122}; -const CallbacksInvoker::KeyType EventTypesToJS::NODE_LOCAL_POSITION_ROTATION_SCALE_UPDATED{123}; +const CallbacksInvoker::KeyType EventTypesToJS::NODE_LOCAL_POSITION_UPDATED{122}; +const CallbacksInvoker::KeyType EventTypesToJS::NODE_LOCAL_ROTATION_UPDATED{123}; +const CallbacksInvoker::KeyType EventTypesToJS::NODE_LOCAL_SCALE_UPDATED{124}; +const CallbacksInvoker::KeyType EventTypesToJS::NODE_LOCAL_POSITION_ROTATION_SCALE_UPDATED{125}; -const CallbacksInvoker::KeyType EventTypesToJS::SIMPLE_TEXTURE_AFTER_ASSIGN_IMAGE{124}; +const CallbacksInvoker::KeyType EventTypesToJS::SIMPLE_TEXTURE_AFTER_ASSIGN_IMAGE{126}; -const CallbacksInvoker::KeyType EventTypesToJS::NODE_EDITOR_ATTACHED{125}; +const CallbacksInvoker::KeyType EventTypesToJS::NODE_EDITOR_ATTACHED{127}; -const CallbacksInvoker::KeyType EventTypesToJS::DIRECTOR_BEFORE_RENDER{126}; +const CallbacksInvoker::KeyType EventTypesToJS::DIRECTOR_BEFORE_RENDER{128}; } // namespace cc diff --git a/native/cocos/core/event/EventTypesToJS.h b/native/cocos/core/event/EventTypesToJS.h index 112434e0968..5485b26849c 100644 --- a/native/cocos/core/event/EventTypesToJS.h +++ b/native/cocos/core/event/EventTypesToJS.h @@ -48,6 +48,8 @@ class EventTypesToJS final { static const CallbacksInvoker::KeyType MODEL_UPDATE_TRANSFORM; static const CallbacksInvoker::KeyType MODEL_UPDATE_UBO; static const CallbacksInvoker::KeyType MODEL_UPDATE_LOCAL_DESCRIPTORS; + static const CallbacksInvoker::KeyType MODEL_UPDATE_LOCAL_SH_DESCRIPTORS; + static const CallbacksInvoker::KeyType MODEL_UPDATE_WORLD_BOUND_DESCRIPTORS; static const CallbacksInvoker::KeyType MODEL_UPDATE_INSTANCED_ATTRIBUTES; static const CallbacksInvoker::KeyType MODEL_GET_MACRO_PATCHES; diff --git a/native/cocos/core/scene-graph/Node.cpp b/native/cocos/core/scene-graph/Node.cpp index 790fb492b57..5cde1129fd9 100644 --- a/native/cocos/core/scene-graph/Node.cpp +++ b/native/cocos/core/scene-graph/Node.cpp @@ -587,6 +587,7 @@ void Node::invalidateChildren(TransformBit dirtyBit) { //NOLINT(misc-no-recursio if (isValid() && (dirtyFlags & hasChangedFlags & curDirtyBit) != curDirtyBit) { setDirtyFlag(dirtyFlags | curDirtyBit); setChangedFlags(hasChangedFlags | curDirtyBit); + emit(NodeEventType::ANCESTOR_TRANSFORM_CHANGED, dirtyBit); for (Node *child : getChildren()) { child->invalidateChildren(dirtyBit | TransformBit::POSITION); diff --git a/native/cocos/core/scene-graph/Node.h b/native/cocos/core/scene-graph/Node.h index 501b533564a..dda15d5b454 100644 --- a/native/cocos/core/scene-graph/Node.h +++ b/native/cocos/core/scene-graph/Node.h @@ -504,6 +504,15 @@ class Node : public CCObject { _isStatic = v ? 1 : 0; } + inline MobilityMode getMobility() const { + return _mobility; + } + + inline void setMobility(MobilityMode m) { + _mobility = m; + emit(NodeEventType::MOBILITY_CHANGED); + } + /** * @en Whether the node's transformation have changed during the current frame. * @zh 这个节点的空间变换信息在当前帧内是否有变过? @@ -630,6 +639,7 @@ class Node : public CCObject { // For deserialization ccstd::string _id; Node *_parent{nullptr}; + MobilityMode _mobility = MobilityMode::Static; private: static index_t getIdxOfChild(const ccstd::vector> &, Node *); diff --git a/native/cocos/core/scene-graph/NodeEnum.h b/native/cocos/core/scene-graph/NodeEnum.h index c5b89f49a81..eb36724f277 100644 --- a/native/cocos/core/scene-graph/NodeEnum.h +++ b/native/cocos/core/scene-graph/NodeEnum.h @@ -43,4 +43,28 @@ enum class TransformBit : uint32_t { }; CC_ENUM_BITWISE_OPERATORS(TransformBit); +/** + * @en Node's mobility + * @zh 节点的移动性 + */ +enum class MobilityMode { + /** + * @en Static node + * @zh 静态节点 + */ + Static = 0, + + /** + * @en Stationary node + * @zh 固定节点 + */ + Stationary = 1, + + /** + * @en Movable node + * @zh 可移动节点 + */ + Movable = 2, +}; + } // namespace cc diff --git a/native/cocos/core/scene-graph/NodeEvent.cpp b/native/cocos/core/scene-graph/NodeEvent.cpp index 345333253f0..3d68c15d54e 100644 --- a/native/cocos/core/scene-graph/NodeEvent.cpp +++ b/native/cocos/core/scene-graph/NodeEvent.cpp @@ -45,16 +45,19 @@ const CallbacksInvoker::KeyType NodeEventType::KEY_DOWN{10}; const CallbacksInvoker::KeyType NodeEventType::KEY_UP{11}; //{"keyup"}; const CallbacksInvoker::KeyType NodeEventType::DEVICEMOTION{12}; //{"devicemotion"}; const CallbacksInvoker::KeyType NodeEventType::TRANSFORM_CHANGED{13}; //{"transform-changed"}; -const CallbacksInvoker::KeyType NodeEventType::SCENE_CHANGED_FOR_PERSISTS{14}; //{"scene-changed-for-persists"}; -const CallbacksInvoker::KeyType NodeEventType::SIZE_CHANGED{15}; //{"size-changed"}; -const CallbacksInvoker::KeyType NodeEventType::ANCHOR_CHANGED{16}; //{"anchor-changed"}; -const CallbacksInvoker::KeyType NodeEventType::COLOR_CHANGED{17}; //{"color-changed"}; -const CallbacksInvoker::KeyType NodeEventType::CHILD_ADDED{18}; //{"child-added"}; -const CallbacksInvoker::KeyType NodeEventType::CHILD_REMOVED{19}; //{"child-removed"}; -const CallbacksInvoker::KeyType NodeEventType::PARENT_CHANGED{20}; //{"parent-changed"}; -const CallbacksInvoker::KeyType NodeEventType::NODE_DESTROYED{21}; //{"node-destroyed"}; -const CallbacksInvoker::KeyType NodeEventType::LAYER_CHANGED{22}; //{"layer-changed"}; -const CallbacksInvoker::KeyType NodeEventType::SIBLING_ORDER_CHANGED{23}; //{"sibling-order-changed"}; -const CallbacksInvoker::KeyType NodeEventType::ACTIVE_IN_HIERARCHY_CHANGED{24}; //{"active-in-hierarchy-changed"}; +const CallbacksInvoker::KeyType NodeEventType::ANCESTOR_TRANSFORM_CHANGED{14}; //{"ancestor-transform-changed"}; +const CallbacksInvoker::KeyType NodeEventType::MOBILITY_CHANGED{15}; //{"mobility-changed"}; +const CallbacksInvoker::KeyType NodeEventType::SCENE_CHANGED_FOR_PERSISTS{16}; //{"scene-changed-for-persists"}; +const CallbacksInvoker::KeyType NodeEventType::SIZE_CHANGED{17}; //{"size-changed"}; +const CallbacksInvoker::KeyType NodeEventType::ANCHOR_CHANGED{18}; //{"anchor-changed"}; +const CallbacksInvoker::KeyType NodeEventType::COLOR_CHANGED{19}; //{"color-changed"}; +const CallbacksInvoker::KeyType NodeEventType::CHILD_ADDED{20}; //{"child-added"}; +const CallbacksInvoker::KeyType NodeEventType::CHILD_REMOVED{21}; //{"child-removed"}; +const CallbacksInvoker::KeyType NodeEventType::PARENT_CHANGED{22}; //{"parent-changed"}; +const CallbacksInvoker::KeyType NodeEventType::NODE_DESTROYED{23}; //{"node-destroyed"}; +const CallbacksInvoker::KeyType NodeEventType::LAYER_CHANGED{24}; //{"layer-changed"}; +const CallbacksInvoker::KeyType NodeEventType::SIBLING_ORDER_CHANGED{25}; //{"sibling-order-changed"}; +const CallbacksInvoker::KeyType NodeEventType::ACTIVE_IN_HIERARCHY_CHANGED{26}; //{"active-in-hierarchy-changed"}; +const CallbacksInvoker::KeyType NodeEventType::LIGHT_PROBE_CHANGED{27}; //{"light-probe-changed"}; } // namespace cc diff --git a/native/cocos/core/scene-graph/NodeEvent.h b/native/cocos/core/scene-graph/NodeEvent.h index 009080bb615..2fc0bbc3c18 100644 --- a/native/cocos/core/scene-graph/NodeEvent.h +++ b/native/cocos/core/scene-graph/NodeEvent.h @@ -45,6 +45,8 @@ class NodeEventType { static const CallbacksInvoker::KeyType KEY_UP; static const CallbacksInvoker::KeyType DEVICEMOTION; static const CallbacksInvoker::KeyType TRANSFORM_CHANGED; + static const CallbacksInvoker::KeyType ANCESTOR_TRANSFORM_CHANGED; + static const CallbacksInvoker::KeyType MOBILITY_CHANGED; static const CallbacksInvoker::KeyType SCENE_CHANGED_FOR_PERSISTS; static const CallbacksInvoker::KeyType SIZE_CHANGED; static const CallbacksInvoker::KeyType ANCHOR_CHANGED; @@ -56,6 +58,7 @@ class NodeEventType { static const CallbacksInvoker::KeyType LAYER_CHANGED; static const CallbacksInvoker::KeyType SIBLING_ORDER_CHANGED; static const CallbacksInvoker::KeyType ACTIVE_IN_HIERARCHY_CHANGED; + static const CallbacksInvoker::KeyType LIGHT_PROBE_CHANGED; }; } // namespace cc diff --git a/native/cocos/core/scene-graph/SceneGlobals.cpp b/native/cocos/core/scene-graph/SceneGlobals.cpp index ac1d279f3c0..fb355c557af 100644 --- a/native/cocos/core/scene-graph/SceneGlobals.cpp +++ b/native/cocos/core/scene-graph/SceneGlobals.cpp @@ -25,6 +25,7 @@ #include "core/scene-graph/SceneGlobals.h" #include "core/Root.h" +#include "gi/light-probe/LightProbe.h" #include "renderer/pipeline/PipelineSceneData.h" #include "renderer/pipeline/custom/RenderInterfaceTypes.h" #include "scene/Ambient.h" @@ -41,6 +42,7 @@ SceneGlobals::SceneGlobals() { _skyboxInfo = ccnew scene::SkyboxInfo(); _fogInfo = ccnew scene::FogInfo(); _octreeInfo = ccnew scene::OctreeInfo(); + _lightProbeInfo = ccnew gi::LightProbeInfo(); } void SceneGlobals::activate() { @@ -65,13 +67,35 @@ void SceneGlobals::activate() { _octreeInfo->activate(sceneData->getOctree()); } + if (_lightProbeInfo != nullptr) { + _lightProbeInfo->activate(sceneData->getLightProbes()); + } + Root::getInstance()->onGlobalPipelineStateChanged(); } -void SceneGlobals::setAmbientInfo(scene::AmbientInfo *info) { _ambientInfo = info; } -void SceneGlobals::setShadowsInfo(scene::ShadowsInfo *info) { _shadowInfo = info; } -void SceneGlobals::setSkyboxInfo(scene::SkyboxInfo *info) { _skyboxInfo = info; } -void SceneGlobals::setFogInfo(scene::FogInfo *info) { _fogInfo = info; } -void SceneGlobals::setOctreeInfo(scene::OctreeInfo *info) { _octreeInfo = info; } +void SceneGlobals::setAmbientInfo(scene::AmbientInfo *info) { + _ambientInfo = info; +} + +void SceneGlobals::setShadowsInfo(scene::ShadowsInfo *info) { + _shadowInfo = info; +} + +void SceneGlobals::setSkyboxInfo(scene::SkyboxInfo *info) { + _skyboxInfo = info; +} + +void SceneGlobals::setFogInfo(scene::FogInfo *info) { + _fogInfo = info; +} + +void SceneGlobals::setOctreeInfo(scene::OctreeInfo *info) { + _octreeInfo = info; +} + +void SceneGlobals::setLightProbeInfo(gi::LightProbeInfo *info) { + _lightProbeInfo = info; +} } // namespace cc diff --git a/native/cocos/core/scene-graph/SceneGlobals.h b/native/cocos/core/scene-graph/SceneGlobals.h index 13e0e79ccae..66b40dd6436 100644 --- a/native/cocos/core/scene-graph/SceneGlobals.h +++ b/native/cocos/core/scene-graph/SceneGlobals.h @@ -38,6 +38,10 @@ class FogInfo; class OctreeInfo; } // namespace scene +namespace gi { +class LightProbeInfo; +} + class SceneGlobals : public RefCounted { public: SceneGlobals(); @@ -50,12 +54,14 @@ class SceneGlobals : public RefCounted { inline scene::SkyboxInfo *getSkyboxInfo() const { return _skyboxInfo.get(); } inline scene::FogInfo *getFogInfo() const { return _fogInfo.get(); } inline scene::OctreeInfo *getOctreeInfo() const { return _octreeInfo.get(); } + inline gi::LightProbeInfo *getLightProbeInfo() const { return _lightProbeInfo.get(); } void setAmbientInfo(scene::AmbientInfo *info); void setShadowsInfo(scene::ShadowsInfo *info); void setSkyboxInfo(scene::SkyboxInfo *info); void setFogInfo(scene::FogInfo *info); void setOctreeInfo(scene::OctreeInfo *info); + void setLightProbeInfo(gi::LightProbeInfo *info); private: IntrusivePtr _ambientInfo; @@ -63,6 +69,7 @@ class SceneGlobals : public RefCounted { IntrusivePtr _skyboxInfo; IntrusivePtr _fogInfo; IntrusivePtr _octreeInfo; + IntrusivePtr _lightProbeInfo; }; } // namespace cc diff --git a/native/cocos/gi/light-probe/AutoPlacement.cpp b/native/cocos/gi/light-probe/AutoPlacement.cpp new file mode 100644 index 00000000000..8779d16d1c2 --- /dev/null +++ b/native/cocos/gi/light-probe/AutoPlacement.cpp @@ -0,0 +1,79 @@ + +/**************************************************************************** + Copyright (c) 2022 Xiamen Yaji Software Co., Ltd. + + http://www.cocos.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated engine source code (the "Software"), a limited, + worldwide, royalty-free, non-assignable, revocable and non-exclusive license + to use Cocos Creator solely to develop games on your target platforms. You shall + not use Cocos Creator software for developing other software or tools that's + used for developing games. You are not granted to publish, distribute, + sublicense, and/or sell copies of Cocos Creator. + + The software or tools in this License Agreement are licensed, not sold. + Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +****************************************************************************/ + +#include "AutoPlacement.h" +#include "base/Macros.h" + +namespace cc { +namespace gi { + +ccstd::vector AutoPlacement::generate(const PlacementInfo &info) { + switch (info.method) { + case PlaceMethod::UNIFORM: + return doGenerateUniform(info); + case PlaceMethod::ADAPTIVE: + return doGenerateAdaptive(info); + default: + CC_ASSERT(false); + } + + return {}; +} + +ccstd::vector AutoPlacement::doGenerateUniform(const PlacementInfo &info) { + if (info.nProbesX < 2U || info.nProbesY < 2U || info.nProbesZ < 2U) { + return {}; + } + + ccstd::vector probes; + Vec3 position{0.0F, 0.0F, 0.0F}; + Vec3 gridSize{ + (info.maxPos.x - info.minPos.x) / static_cast(info.nProbesX - 1U), + (info.maxPos.y - info.minPos.y) / static_cast(info.nProbesY - 1U), + (info.maxPos.z - info.minPos.z) / static_cast(info.nProbesZ - 1U)}; + + for (auto x = 0U; x < info.nProbesX; x++) { + position.x = static_cast(x) * gridSize.x + info.minPos.x; + + for (auto y = 0U; y < info.nProbesY; y++) { + position.y = static_cast(y) * gridSize.y + info.minPos.y; + + for (auto z = 0U; z < info.nProbesZ; z++) { + position.z = static_cast(z) * gridSize.z + info.minPos.z; + probes.push_back(position); + } + } + } + + return probes; +} + +ccstd::vector AutoPlacement::doGenerateAdaptive(const PlacementInfo &info) { + return doGenerateUniform(info); +} + +} // namespace gi +} // namespace cc diff --git a/native/cocos/gi/light-probe/AutoPlacement.h b/native/cocos/gi/light-probe/AutoPlacement.h new file mode 100644 index 00000000000..5baeada8053 --- /dev/null +++ b/native/cocos/gi/light-probe/AutoPlacement.h @@ -0,0 +1,59 @@ + +/**************************************************************************** + Copyright (c) 2022 Xiamen Yaji Software Co., Ltd. + + http://www.cocos.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated engine source code (the "Software"), a limited, + worldwide, royalty-free, non-assignable, revocable and non-exclusive license + to use Cocos Creator solely to develop games on your target platforms. You shall + not use Cocos Creator software for developing other software or tools that's + used for developing games. You are not granted to publish, distribute, + sublicense, and/or sell copies of Cocos Creator. + + The software or tools in this License Agreement are licensed, not sold. + Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +****************************************************************************/ + +#pragma once +#include "base/std/container/array.h" +#include "base/std/container/vector.h" +#include "math/Vec3.h" + +namespace cc { +namespace gi { + +enum class PlaceMethod { + UNIFORM = 0, + ADAPTIVE = 1, +}; + +struct PlacementInfo { + PlaceMethod method = PlaceMethod::UNIFORM; + uint32_t nProbesX{3U}; + uint32_t nProbesY{3U}; + uint32_t nProbesZ{3U}; + Vec3 minPos{-10.0F, -10.0F, -10.0F}; + Vec3 maxPos{10.0F, 10.0F, 10.0F}; +}; + +class AutoPlacement { +public: + static ccstd::vector generate(const PlacementInfo &info); + +private: + static ccstd::vector doGenerateUniform(const PlacementInfo &info); + static ccstd::vector doGenerateAdaptive(const PlacementInfo &info); +}; + +} // namespace gi +} // namespace cc diff --git a/native/cocos/gi/light-probe/Delaunay.cpp b/native/cocos/gi/light-probe/Delaunay.cpp new file mode 100644 index 00000000000..67166c76790 --- /dev/null +++ b/native/cocos/gi/light-probe/Delaunay.cpp @@ -0,0 +1,377 @@ + +/**************************************************************************** + Copyright (c) 2022 Xiamen Yaji Software Co., Ltd. + + http://www.cocos.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated engine source code (the "Software"), a limited, + worldwide, royalty-free, non-assignable, revocable and non-exclusive license + to use Cocos Creator solely to develop games on your target platforms. You shall + not use Cocos Creator software for developing other software or tools that's + used for developing games. You are not granted to publish, distribute, + sublicense, and/or sell copies of Cocos Creator. + + The software or tools in this License Agreement are licensed, not sold. + Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +****************************************************************************/ + +#include "Delaunay.h" +#include +#include "base/Log.h" +#include "core/platform/Debug.h" +#include "math/Mat3.h" + +namespace cc { +namespace gi { + +void CircumSphere::init(const Vec3 &p0, const Vec3 &p1, const Vec3 &p2, const Vec3 &p3) { + // calculate circumsphere of 4 points in R^3 space. + Mat3 mat(p1.x - p0.x, p1.y - p0.y, p1.z - p0.z, + p2.x - p0.x, p2.y - p0.y, p2.z - p0.z, + p3.x - p0.x, p3.y - p0.y, p3.z - p0.z); + mat.inverse(); + mat.transpose(); + + Vec3 n(((p1.x + p0.x) * (p1.x - p0.x) + (p1.y + p0.y) * (p1.y - p0.y) + (p1.z + p0.z) * (p1.z - p0.z)) * 0.5F, + ((p2.x + p0.x) * (p2.x - p0.x) + (p2.y + p0.y) * (p2.y - p0.y) + (p2.z + p0.z) * (p2.z - p0.z)) * 0.5F, + ((p3.x + p0.x) * (p3.x - p0.x) + (p3.y + p0.y) * (p3.y - p0.y) + (p3.z + p0.z) * (p3.z - p0.z)) * 0.5F); + + center.transformMat3(n, mat); + radiusSquared = p0.distanceSquared(center); +} + +Tetrahedron::Tetrahedron(const Delaunay *delaunay, int32_t v0, int32_t v1, int32_t v2, int32_t v3 /* = -1*/) +: vertex0(v0), vertex1(v1), vertex2(v2), vertex3(v3) { + // inner tetrahedron + if (v3 >= 0) { + const auto &probes = delaunay->getProbes(); + const auto &p0 = probes[vertex0].position; + const auto &p1 = probes[vertex1].position; + const auto &p2 = probes[vertex2].position; + const auto &p3 = probes[vertex3].position; + sphere.init(p0, p1, p2, p3); + } +} + +void Delaunay::build(const ccstd::vector &points) { + reset(); + + const auto pointCount = points.size(); + if (pointCount < 4) { + debug::warnID(17000); + return; + } + + _probes.reserve(pointCount); + for (const auto &point : points) { + _probes.emplace_back(point); + } + + tetrahedralize(); + computeAdjacency(); + computeMatrices(); +} + +void Delaunay::reset() { + _probes.clear(); + _tetrahedrons.clear(); +} + +void Delaunay::tetrahedralize() { + // get probe count first + const auto probeCount = _probes.size(); + + // init a super tetrahedron containing all probes + const auto center = initTetrahedron(); + + for (auto i = 0; i < probeCount; i++) { + addProbe(i); + } + + // remove all tetrahedrons which contain the super tetrahedron's vertices + _tetrahedrons.erase(std::remove_if(_tetrahedrons.begin(), _tetrahedrons.end(), + [probeCount](Tetrahedron &tetrahedron) { + auto vertexIndex = static_cast(probeCount); + return (tetrahedron.contain(vertexIndex) || + tetrahedron.contain(vertexIndex + 1) || + tetrahedron.contain(vertexIndex + 2) || + tetrahedron.contain(vertexIndex + 3)); + }), + _tetrahedrons.end()); + + // remove all additional points in the super tetrahedron + _probes.erase(_probes.begin() + probeCount, _probes.end()); + + reorder(center); +} + +Vec3 Delaunay::initTetrahedron() { + constexpr float minFloat = std::numeric_limits::min(); + constexpr float maxFloat = std::numeric_limits::max(); + + Vec3 minPos = {maxFloat, maxFloat, maxFloat}; + Vec3 maxPos = {minFloat, minFloat, minFloat}; + + for (const auto &probe : _probes) { + const auto &position = probe.position; + minPos.x = std::min(minPos.x, position.x); + maxPos.x = std::max(maxPos.x, position.x); + + minPos.y = std::min(minPos.y, position.y); + maxPos.y = std::max(maxPos.y, position.y); + + minPos.z = std::min(minPos.z, position.z); + maxPos.z = std::max(maxPos.z, position.z); + } + + const Vec3 center = (maxPos + minPos) * 0.5F; + const Vec3 extent = maxPos - minPos; + float offset = std::max({extent.x, extent.y, extent.z}) * 10.0F; + + Vec3 p0 = center + Vec3(0.0F, offset, 0.0F); + Vec3 p1 = center + Vec3(-offset, -offset, -offset); + Vec3 p2 = center + Vec3(-offset, -offset, offset); + Vec3 p3 = center + Vec3(offset, -offset, 0.0F); + + auto index = static_cast(_probes.size()); + _probes.emplace_back(p0); + _probes.emplace_back(p1); + _probes.emplace_back(p2); + _probes.emplace_back(p3); + + _tetrahedrons.emplace_back(this, index, index + 1, index + 2, index + 3); + + return center; +} + +void Delaunay::addProbe(int32_t vertexIndex) { + ccstd::vector triangles; + const auto &probe = _probes[vertexIndex]; + + for (auto i = 0; i < _tetrahedrons.size(); i++) { + auto &tetrahedron = _tetrahedrons[i]; + if (tetrahedron.isInCircumSphere(probe.position)) { + tetrahedron.invalid = true; + + triangles.emplace_back(i, 0, tetrahedron.vertex1, tetrahedron.vertex3, tetrahedron.vertex2, tetrahedron.vertex0); + triangles.emplace_back(i, 1, tetrahedron.vertex0, tetrahedron.vertex2, tetrahedron.vertex3, tetrahedron.vertex1); + triangles.emplace_back(i, 2, tetrahedron.vertex0, tetrahedron.vertex3, tetrahedron.vertex1, tetrahedron.vertex2); + triangles.emplace_back(i, 3, tetrahedron.vertex0, tetrahedron.vertex1, tetrahedron.vertex2, tetrahedron.vertex3); + } + } + + for (auto i = 0; i < triangles.size(); i++) { + for (auto k = i + 1; k < triangles.size(); k++) { + if (triangles[i].isSame(triangles[k])) { + triangles[i].invalid = true; + triangles[k].invalid = true; + } + } + } + + // remove all duplicated triangles. + triangles.erase(std::remove_if(triangles.begin(), triangles.end(), + [](Triangle &triangle) { return triangle.invalid; }), + triangles.end()); + // remove containing tetrahedron + _tetrahedrons.erase(std::remove_if(_tetrahedrons.begin(), _tetrahedrons.end(), + [](Tetrahedron &tetrahedron) { return tetrahedron.invalid; }), + _tetrahedrons.end()); + + for (const auto &triangle : triangles) { + _tetrahedrons.emplace_back(this, triangle.vertex0, triangle.vertex1, triangle.vertex2, vertexIndex); + } +} + +void Delaunay::reorder(const Vec3 ¢er) { + // The tetrahedron in the middle is placed at the front of the vector + std::sort(_tetrahedrons.begin(), _tetrahedrons.end(), [center](Tetrahedron &a, Tetrahedron &b) { + return a.sphere.center.distanceSquared(center) <= b.sphere.center.distanceSquared(center); + }); +} + +void Delaunay::computeAdjacency() { + ccstd::vector triangles; + ccstd::vector edges; + Vec3 normal; + + const auto tetrahedronCount = _tetrahedrons.size(); + triangles.reserve(tetrahedronCount * 4); + + for (auto i = 0; i < _tetrahedrons.size(); i++) { + const auto &tetrahedron = _tetrahedrons[i]; + + triangles.emplace_back(i, 0, tetrahedron.vertex1, tetrahedron.vertex3, tetrahedron.vertex2, tetrahedron.vertex0); + triangles.emplace_back(i, 1, tetrahedron.vertex0, tetrahedron.vertex2, tetrahedron.vertex3, tetrahedron.vertex1); + triangles.emplace_back(i, 2, tetrahedron.vertex0, tetrahedron.vertex3, tetrahedron.vertex1, tetrahedron.vertex2); + triangles.emplace_back(i, 3, tetrahedron.vertex0, tetrahedron.vertex1, tetrahedron.vertex2, tetrahedron.vertex3); + } + + for (auto i = 0; i < triangles.size(); i++) { + for (auto k = i + 1; k < triangles.size(); k++) { + if (triangles[i].isSame(triangles[k])) { + // update adjacency between tetrahedrons + _tetrahedrons[triangles[i].tetrahedron].neighbours[triangles[i].index] = triangles[k].tetrahedron; + _tetrahedrons[triangles[k].tetrahedron].neighbours[triangles[k].index] = triangles[i].tetrahedron; + triangles[i].isOuterFace = false; + triangles[k].isOuterFace = false; + break; + } + } + + if (triangles[i].isOuterFace) { + auto &probe0 = _probes[triangles[i].vertex0]; + auto &probe1 = _probes[triangles[i].vertex1]; + auto &probe2 = _probes[triangles[i].vertex2]; + auto &probe3 = _probes[triangles[i].vertex3]; + + auto edge1 = probe1.position - probe0.position; + auto edge2 = probe2.position - probe0.position; + Vec3::cross(edge1, edge2, &normal); + + auto edge3 = probe3.position - probe0.position; + auto negative = normal.dot(edge3); + if (negative > 0.0F) { + normal.negate(); + } + + // accumulate weighted normal + probe0.normal += normal; + probe1.normal += normal; + probe2.normal += normal; + + // create an outer cell with normal facing out + auto v0 = triangles[i].vertex0; + auto v1 = negative > 0.0F ? triangles[i].vertex2 : triangles[i].vertex1; + auto v2 = negative > 0.0F ? triangles[i].vertex1 : triangles[i].vertex2; + Tetrahedron tetrahedron(this, v0, v1, v2); + + // update adjacency between tetrahedron and outer cell + tetrahedron.neighbours[3] = triangles[i].tetrahedron; + _tetrahedrons[triangles[i].tetrahedron].neighbours[triangles[i].index] = static_cast(_tetrahedrons.size()); + _tetrahedrons.push_back(tetrahedron); + } + } + + // start from outer cell index + for (auto i = tetrahedronCount; i < _tetrahedrons.size(); i++) { + const auto &tetrahedron = _tetrahedrons[i]; + + edges.emplace_back(i, 0, tetrahedron.vertex1, tetrahedron.vertex2); + edges.emplace_back(i, 1, tetrahedron.vertex2, tetrahedron.vertex0); + edges.emplace_back(i, 2, tetrahedron.vertex0, tetrahedron.vertex1); + } + + for (auto i = 0; i < edges.size(); i++) { + for (auto k = i + 1; k < edges.size(); k++) { + if (edges[i].isSame(edges[k])) { + // update adjacency between outer cells + _tetrahedrons[edges[i].tetrahedron].neighbours[edges[i].index] = edges[k].tetrahedron; + _tetrahedrons[edges[k].tetrahedron].neighbours[edges[k].index] = edges[i].tetrahedron; + } + } + } + + // normalize all convex hull probes' normal + for (auto &probe : _probes) { + if (!probe.normal.isZero()) { + probe.normal.normalize(); + } + } +} + +void Delaunay::computeMatrices() { + for (auto &tetrahedron : _tetrahedrons) { + if (tetrahedron.vertex3 >= 0) { + computeTetrahedronMatrix(tetrahedron); + } else { + computeOuterCellMatrix(tetrahedron); + } + } +} + +void Delaunay::computeTetrahedronMatrix(Tetrahedron &tetrahedron) { + const auto &p0 = _probes[tetrahedron.vertex0].position; + const auto &p1 = _probes[tetrahedron.vertex1].position; + const auto &p2 = _probes[tetrahedron.vertex2].position; + const auto &p3 = _probes[tetrahedron.vertex3].position; + + tetrahedron.matrix.set( + p0.x - p3.x, p1.x - p3.x, p2.x - p3.x, + p0.y - p3.y, p1.y - p3.y, p2.y - p3.y, + p0.z - p3.z, p1.z - p3.z, p2.z - p3.z); + tetrahedron.matrix.inverse(); + tetrahedron.matrix.transpose(); +} + +void Delaunay::computeOuterCellMatrix(Tetrahedron &tetrahedron) { + Vec3 v[3]; + Vec3 p[3]; + + v[0] = _probes[tetrahedron.vertex0].normal; + v[1] = _probes[tetrahedron.vertex1].normal; + v[2] = _probes[tetrahedron.vertex2].normal; + + p[0] = _probes[tetrahedron.vertex0].position; + p[1] = _probes[tetrahedron.vertex1].position; + p[2] = _probes[tetrahedron.vertex2].position; + + Vec3 a = p[0] - p[2]; + Vec3 ap = v[0] - v[2]; + Vec3 b = p[1] - p[2]; + Vec3 bp = v[1] - v[2]; + Vec3 p2 = p[2]; + Vec3 cp = -v[2]; + + float m[12]; + + m[0] = ap.y * bp.z - ap.z * bp.y; + m[3] = -ap.x * bp.z + ap.z * bp.x; + m[6] = ap.x * bp.y - ap.y * bp.x; + m[9] = a.x * bp.y * cp.z - a.y * bp.x * cp.z + ap.x * b.y * cp.z - ap.y * b.x * cp.z + a.z * bp.x * cp.y - a.z * bp.y * cp.x + ap.z * b.x * cp.y - ap.z * b.y * cp.x - a.x * bp.z * cp.y + a.y * bp.z * cp.x - ap.x * b.z * cp.y + ap.y * b.z * cp.x; + m[9] -= p2.x * m[0] + p2.y * m[3] + p2.z * m[6]; + + m[1] = ap.y * b.z + a.y * bp.z - ap.z * b.y - a.z * bp.y; + m[4] = -a.x * bp.z - ap.x * b.z + a.z * bp.x + ap.z * b.x; + m[7] = a.x * bp.y - a.y * bp.x + ap.x * b.y - ap.y * b.x; + m[10] = a.x * b.y * cp.z - a.y * b.x * cp.z - a.x * b.z * cp.y + a.y * b.z * cp.x + a.z * b.x * cp.y - a.z * b.y * cp.x; + m[10] -= p2.x * m[1] + p2.y * m[4] + p2.z * m[7]; + + m[2] = -a.z * b.y + a.y * b.z; + m[5] = -a.x * b.z + a.z * b.x; + m[8] = a.x * b.y - a.y * b.x; + m[11] = 0.0F; + m[11] -= p2.x * m[2] + p2.y * m[5] + p2.z * m[8]; + + // coefficient of t^3 + float c = ap.x * bp.y * cp.z - ap.y * bp.x * cp.z + ap.z * bp.x * cp.y - ap.z * bp.y * cp.x + ap.y * bp.z * cp.x - ap.x * bp.z * cp.y; + + if (std::abs(c) > mathutils::EPSILON) { + // t^3 + p * t^2 + q * t + r = 0 + for (float &k : m) { + k /= c; + } + } else { + // set last vertex index of outer cell to -2 + // p * t^2 + q * t + r = 0 + tetrahedron.vertex3 = -2; + } + + // transpose the matrix + tetrahedron.matrix.set(m[0], m[1], m[2], m[3], m[4], m[5], m[6], m[7], m[8]); + + // last column of mat3x4 + tetrahedron.offset.set(m[9], m[10], m[11]); +} + +} // namespace gi +} // namespace cc diff --git a/native/cocos/gi/light-probe/Delaunay.h b/native/cocos/gi/light-probe/Delaunay.h new file mode 100644 index 00000000000..204842fffa5 --- /dev/null +++ b/native/cocos/gi/light-probe/Delaunay.h @@ -0,0 +1,166 @@ + +/**************************************************************************** + Copyright (c) 2022 Xiamen Yaji Software Co., Ltd. + + http://www.cocos.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated engine source code (the "Software"), a limited, + worldwide, royalty-free, non-assignable, revocable and non-exclusive license + to use Cocos Creator solely to develop games on your target platforms. You shall + not use Cocos Creator software for developing other software or tools that's + used for developing games. You are not granted to publish, distribute, + sublicense, and/or sell copies of Cocos Creator. + + The software or tools in this License Agreement are licensed, not sold. + Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +****************************************************************************/ + +#pragma once +#include "base/Macros.h" +#include "base/std/container/array.h" +#include "base/std/container/vector.h" +#include "core/geometry/AABB.h" +#include "math/Utils.h" +#include "math/Vec3.h" + +namespace cc { +namespace gi { + +class Delaunay; + +struct Vertex { + Vec3 position; + Vec3 normal; + ccstd::vector coefficients; + + Vertex() = default; + explicit Vertex(const Vec3 &pos) + : position(pos) { + } +}; + +struct Edge { + int32_t tetrahedron{-1}; // tetrahedron index this edge belongs to + int32_t index{-1}; // index in triangle's three edges of an outer cell + int32_t vertex0{-1}; + int32_t vertex1{-1}; + + Edge() = default; + Edge(int32_t tet, int32_t i, int32_t v0, int32_t v1) + : tetrahedron(tet), index(i), vertex0(v0), vertex1(v1) { + } + + inline bool isSame(const Edge &other) const { + return ((vertex0 == other.vertex0 && vertex1 == other.vertex1) || + (vertex0 == other.vertex1 && vertex1 == other.vertex0)); + } +}; + +struct Triangle { + bool invalid{false}; + bool isOuterFace{true}; + int32_t tetrahedron{-1}; // tetrahedron index this triangle belongs to + int32_t index{-1}; // index in tetrahedron's four triangles + int32_t vertex0{-1}; + int32_t vertex1{-1}; + int32_t vertex2{-1}; + int32_t vertex3{-1}; // tetrahedron's last vertex index used to compute normal direction + + Triangle() = default; + Triangle(int32_t tet, int32_t i, int32_t v0, int32_t v1, int32_t v2, int32_t v3) + : tetrahedron(tet), index(i), vertex0(v0), vertex1(v1), vertex2(v2), vertex3(v3) { + } + + inline bool isSame(const Triangle &other) const { + return ((vertex0 == other.vertex0 && vertex1 == other.vertex1 && vertex2 == other.vertex2) || + (vertex0 == other.vertex0 && vertex1 == other.vertex2 && vertex2 == other.vertex1) || + (vertex0 == other.vertex1 && vertex1 == other.vertex0 && vertex2 == other.vertex2) || + (vertex0 == other.vertex1 && vertex1 == other.vertex2 && vertex2 == other.vertex0) || + (vertex0 == other.vertex2 && vertex1 == other.vertex0 && vertex2 == other.vertex1) || + (vertex0 == other.vertex2 && vertex1 == other.vertex1 && vertex2 == other.vertex0)); + } +}; + +struct CircumSphere { + Vec3 center; + float radiusSquared{0.0F}; + + CircumSphere() = default; + void init(const Vec3 &p0, const Vec3 &p1, const Vec3 &p2, const Vec3 &p3); +}; + +/** + * inner tetrahedron or outer cell structure + */ +struct Tetrahedron { + bool invalid{false}; + int32_t vertex0{-1}; + int32_t vertex1{-1}; + int32_t vertex2{-1}; + int32_t vertex3{-1}; // -1 means outer cell, otherwise inner tetrahedron + ccstd::array neighbours{-1, -1, -1, -1}; + + Mat3 matrix; + Vec3 offset; // only valid in outer cell + CircumSphere sphere; // only valid in inner tetrahedron + + // inner tetrahedron or outer cell constructor + Tetrahedron(const Delaunay *delaunay, int32_t v0, int32_t v1, int32_t v2, int32_t v3 = -1); + Tetrahedron() = default; + + inline bool isInCircumSphere(const Vec3 &point) const { + return point.distanceSquared(sphere.center) < sphere.radiusSquared - mathutils::EPSILON; + } + + inline bool contain(int32_t vertexIndex) const { + return (vertex0 == vertexIndex || vertex1 == vertexIndex || + vertex2 == vertexIndex || vertex3 == vertexIndex); + } + + inline bool isInnerTetrahedron() const { + return vertex3 >= 0; + } + + inline bool isOuterCell() const { + return vertex3 < 0; // -1 or -2 + } +}; + +class Delaunay { +public: + Delaunay() = default; + ~Delaunay() = default; + + inline const ccstd::vector &getProbes() const { return _probes; } + inline const ccstd::vector &getTetrahedrons() const { return _tetrahedrons; } + + void build(const ccstd::vector &points); + +private: + void reset(); + void tetrahedralize(); // Bowyer-Watson algorithm + Vec3 initTetrahedron(); + void addProbe(int32_t vertexIndex); + void reorder(const Vec3 ¢er); + void computeAdjacency(); + void computeMatrices(); + void computeTetrahedronMatrix(Tetrahedron &tetrahedron); + void computeOuterCellMatrix(Tetrahedron &tetrahedron); + + ccstd::vector _probes; + ccstd::vector _tetrahedrons; + + CC_DISALLOW_COPY_MOVE_ASSIGN(Delaunay); +}; + +} // namespace gi +} // namespace cc diff --git a/native/cocos/gi/light-probe/LightProbe.cpp b/native/cocos/gi/light-probe/LightProbe.cpp new file mode 100644 index 00000000000..c78cae80336 --- /dev/null +++ b/native/cocos/gi/light-probe/LightProbe.cpp @@ -0,0 +1,207 @@ + +/**************************************************************************** + Copyright (c) 2022 Xiamen Yaji Software Co., Ltd. + + http://www.cocos.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated engine source code (the "Software"), a limited, + worldwide, royalty-free, non-assignable, revocable and non-exclusive license + to use Cocos Creator solely to develop games on your target platforms. You shall + not use Cocos Creator software for developing other software or tools that's + used for developing games. You are not granted to publish, distribute, + sublicense, and/or sell copies of Cocos Creator. + + The software or tools in this License Agreement are licensed, not sold. + Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +****************************************************************************/ + +#include "LightProbe.h" +#include "PolynomialSolver.h" +#include "core/Root.h" +#include "math/Math.h" +#include "math/Utils.h" +#include "renderer/pipeline/custom/RenderInterfaceTypes.h" + +namespace cc { +namespace gi { + +void LightProbesData::build(const ccstd::vector &points) { + Delaunay delaunay; + delaunay.build(points); + + _probes = delaunay.getProbes(); + _tetrahedrons = delaunay.getTetrahedrons(); +} + +int32_t LightProbesData::getInterpolationSHCoefficients(const Vec3 &position, int32_t tetIndex, ccstd::vector &coefficients) const { + Vec4 weights{0.0F, 0.0F, 0.0F, 0.0F}; + tetIndex = getInterpolationWeights(position, tetIndex, weights); + const auto length = SH::getBasisCount(); + coefficients.resize(length); + + const auto &tetrahedron = _tetrahedrons[tetIndex]; + const auto &c0 = _probes[tetrahedron.vertex0].coefficients; + const auto &c1 = _probes[tetrahedron.vertex1].coefficients; + const auto &c2 = _probes[tetrahedron.vertex2].coefficients; + + if (tetrahedron.vertex3 >= 0) { + const auto &c3 = _probes[tetrahedron.vertex3].coefficients; + + for (auto i = 0; i < length; i++) { + coefficients[i] = c0[i] * weights.x + c1[i] * weights.y + c2[i] * weights.z + c3[i] * weights.w; + } + } else { + for (auto i = 0; i < length; i++) { + coefficients[i] = c0[i] * weights.x + c1[i] * weights.y + c2[i] * weights.z; + } + } + + return tetIndex; +} + +int32_t LightProbesData::getInterpolationWeights(const Vec3 &position, int32_t tetIndex, Vec4 &weights) const { + const auto tetrahedronCount = _tetrahedrons.size(); + if (tetIndex < 0 || tetIndex >= tetrahedronCount) { + tetIndex = 0; + } + + int32_t lastIndex = -1; + int32_t nextIndex = -1; + + for (auto i = 0; i < tetrahedronCount; i++) { + const auto &tetrahedron = _tetrahedrons[tetIndex]; + getBarycentricCoord(position, tetrahedron, weights); + if (weights.x >= 0.0F && weights.y >= 0.0F && weights.z >= 0.0F && weights.w >= 0.0F) { + break; + } + + if (weights.x < weights.y && weights.x < weights.z && weights.x < weights.w) { + nextIndex = tetrahedron.neighbours[0]; + } else if (weights.y < weights.z && weights.y < weights.w) { + nextIndex = tetrahedron.neighbours[1]; + } else if (weights.z < weights.w) { + nextIndex = tetrahedron.neighbours[2]; + } else { + nextIndex = tetrahedron.neighbours[3]; + } + + // return directly due to numerical precision error + if (lastIndex == nextIndex) { + break; + } + + lastIndex = tetIndex; + tetIndex = nextIndex; + } + + return tetIndex; +} + +Vec3 LightProbesData::getTriangleBarycentricCoord(const Vec3 &p0, const Vec3 &p1, const Vec3 &p2, const Vec3 &position) { + Vec3 normal; + Vec3::cross(p1 - p0, p2 - p0, &normal); + + if (normal.lengthSquared() <= mathutils::EPSILON) { + return Vec3(0.0F, 0.0F, 0.0F); + } + + const Vec3 n = normal.getNormalized(); + const float area012Inv = 1.0F / (n.dot(normal)); + + Vec3 crossP12; + Vec3::cross(p1 - position, p2 - position, &crossP12); + const float areaP12 = n.dot(crossP12); + const float alpha = areaP12 * area012Inv; + + Vec3 crossP20; + Vec3::cross(p2 - position, p0 - position, &crossP20); + const float areaP20 = n.dot(crossP20); + const float beta = areaP20 * area012Inv; + + return Vec3(alpha, beta, 1.0F - alpha - beta); +} + +void LightProbesData::getBarycentricCoord(const Vec3 &position, const Tetrahedron &tetrahedron, Vec4 &weights) const { + if (tetrahedron.vertex3 >= 0) { + getTetrahedronBarycentricCoord(position, tetrahedron, weights); + } else { + getOuterCellBarycentricCoord(position, tetrahedron, weights); + } +} + +void LightProbesData::getTetrahedronBarycentricCoord(const Vec3 &position, const Tetrahedron &tetrahedron, Vec4 &weights) const { + Vec3 result = position - _probes[tetrahedron.vertex3].position; + result.transformMat3(result, tetrahedron.matrix); + + weights.set(result.x, result.y, result.z, 1.0F - result.x - result.y - result.z); +} + +void LightProbesData::getOuterCellBarycentricCoord(const Vec3 &position, const Tetrahedron &tetrahedron, Vec4 &weights) const { + const auto &p0 = _probes[tetrahedron.vertex0].position; + const auto &p1 = _probes[tetrahedron.vertex1].position; + const auto &p2 = _probes[tetrahedron.vertex2].position; + + Vec3 normal; + const auto edge1 = p1 - p0; + const auto edge2 = p2 - p0; + Vec3::cross(edge1, edge2, &normal); + float t = Vec3::dot(position - p0, normal); + if (t < 0.0F) { + // test tetrahedron in next iterator + weights.set(0.0F, 0.0F, 0.0F, -1.0F); + return; + } + + Vec3 coefficients; + coefficients.transformMat3(position, tetrahedron.matrix); + coefficients += tetrahedron.offset; + + if (tetrahedron.vertex3 == -1) { + t = PolynomialSolver::getCubicUniqueRoot(coefficients.x, coefficients.y, coefficients.z); + } else { + t = PolynomialSolver::getQuadraticUniqueRoot(coefficients.x, coefficients.y, coefficients.z); + } + + const auto v0 = p0 + _probes[tetrahedron.vertex0].normal * t; + const auto v1 = p1 + _probes[tetrahedron.vertex1].normal * t; + const auto v2 = p2 + _probes[tetrahedron.vertex2].normal * t; + const auto result = getTriangleBarycentricCoord(v0, v1, v2, position); + + weights.set(result.x, result.y, result.z, 0.0F); +} + +void LightProbes::initialize(LightProbeInfo *info) { + _enabled = info->isEnabled(); + _reduceRinging = info->getReduceRinging(); + _showProbe = info->isShowProbe(); + _showWireframe = info->isShowWireframe(); + _showConvex = info->isShowConvex(); + _data = info->getData(); + + updatePipeline(); +} + +void LightProbes::updatePipeline() const { + auto *root = Root::getInstance(); + auto *pipeline = root->getPipeline(); + + pipeline->setValue("CC_LIGHT_PROBE_ENABLED", _enabled); + root->onGlobalPipelineStateChanged(); +} + +void LightProbeInfo::activate(LightProbes *resource) { + _resource = resource; + _resource->initialize(this); +} + +} // namespace gi +} // namespace cc diff --git a/native/cocos/gi/light-probe/LightProbe.h b/native/cocos/gi/light-probe/LightProbe.h new file mode 100644 index 00000000000..7ddf6f31d9c --- /dev/null +++ b/native/cocos/gi/light-probe/LightProbe.h @@ -0,0 +1,210 @@ + +/**************************************************************************** + Copyright (c) 2022 Xiamen Yaji Software Co., Ltd. + + http://www.cocos.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated engine source code (the "Software"), a limited, + worldwide, royalty-free, non-assignable, revocable and non-exclusive license + to use Cocos Creator solely to develop games on your target platforms. You shall + not use Cocos Creator software for developing other software or tools that's + used for developing games. You are not granted to publish, distribute, + sublicense, and/or sell copies of Cocos Creator. + + The software or tools in this License Agreement are licensed, not sold. + Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +****************************************************************************/ + +#pragma once + +#include "Delaunay.h" +#include "SH.h" +#include "base/Macros.h" +#include "base/RefCounted.h" +#include "base/std/container/vector.h" +#include "math/Vec3.h" +#include "math/Vec4.h" + +namespace cc { +namespace gi { + +class LightProbeInfo; + +class LightProbesData { +public: + LightProbesData() = default; + + inline ccstd::vector &getProbes() { return _probes; } + inline void setProbes(const ccstd::vector &probes) { _probes = probes; } + inline ccstd::vector &getTetrahedrons() { return _tetrahedrons; } + inline void setTetrahedrons(const ccstd::vector &tetrahedrons) { _tetrahedrons = tetrahedrons; } + + inline bool empty() const { return _probes.empty() || _tetrahedrons.empty(); } + inline bool available() const { return !empty() && !_probes[0].coefficients.empty(); } + void build(const ccstd::vector &points); + int32_t getInterpolationSHCoefficients(const Vec3 &position, int32_t tetIndex, ccstd::vector &coefficients) const; + +private: + int32_t getInterpolationWeights(const Vec3 &position, int32_t tetIndex, Vec4 &weights) const; + static Vec3 getTriangleBarycentricCoord(const Vec3 &p0, const Vec3 &p1, const Vec3 &p2, const Vec3 &position); + void getBarycentricCoord(const Vec3 &position, const Tetrahedron &tetrahedron, Vec4 &weights) const; + void getTetrahedronBarycentricCoord(const Vec3 &position, const Tetrahedron &tetrahedron, Vec4 &weights) const; + void getOuterCellBarycentricCoord(const Vec3 &position, const Tetrahedron &tetrahedron, Vec4 &weights) const; + +public: + ccstd::vector _probes; + ccstd::vector _tetrahedrons; +}; + +class LightProbes final { +public: + LightProbes() = default; + ~LightProbes() = default; + + void initialize(LightProbeInfo *info); + + inline bool available() const { + if (!_enabled) { + return false; + } + + return _data.available(); + } + + inline void setEnabled(bool val) { + if (_enabled == val) { + return; + } + + _enabled = val; + updatePipeline(); + } + inline bool isEnabled() const { return _enabled; } + + inline void setReduceRinging(float val) { _reduceRinging = val; } + inline float getReduceRinging() const { return _reduceRinging; } + + inline void setShowProbe(bool val) { _showProbe = val; } + inline bool isShowProbe() const { return _showProbe; } + + inline void setShowWireframe(bool val) { _showWireframe = val; } + inline bool isShowWireframe() const { return _showWireframe; } + + inline void setShowConvex(bool val) { _showConvex = val; } + inline bool isShowConvex() const { return _showConvex; } + + inline void setData(const LightProbesData &data) { _data = data; } + inline const LightProbesData &getData() const { return _data; } + + bool _enabled{true}; + float _reduceRinging{0.0F}; + bool _showProbe{true}; + bool _showWireframe{true}; + bool _showConvex{false}; + LightProbesData _data; + +private: + void updatePipeline() const; +}; + +class LightProbeInfo : public RefCounted { +public: + LightProbeInfo() = default; + ~LightProbeInfo() override = default; + + void activate(LightProbes *resource); + + inline void setEnabled(bool val) { + if (_enabled == val) { + return; + } + + _enabled = val; + if (_resource) { + _resource->setEnabled(val); + } + } + inline bool isEnabled() const { return _enabled; } + + inline void setReduceRinging(float val) { + if (_reduceRinging == val) { + return; + } + + _reduceRinging = val; + if (_resource) { + _resource->setReduceRinging(val); + } + } + inline float getReduceRinging() const { return _reduceRinging; } + + inline void setShowProbe(bool val) { + if (_showProbe == val) { + return; + } + + _showProbe = val; + if (_resource) { + _resource->setShowProbe(val); + } + } + inline bool isShowProbe() const { return _showProbe; } + + inline void setShowWireframe(bool val) { + if (_showWireframe == val) { + return; + } + + _showWireframe = val; + if (_resource) { + _resource->setShowWireframe(val); + } + } + inline bool isShowWireframe() const { return _showWireframe; } + + inline void setShowConvex(bool val) { + if (_showConvex == val) { + return; + } + + _showConvex = val; + if (_resource) { + _resource->setShowConvex(val); + } + } + inline bool isShowConvex() const { return _showConvex; } + + inline void setData(const LightProbesData &data) { + _data = data; + if (_resource) { + _resource->setData(data); + } + } + + inline const LightProbesData &getData() const { return _data; } + + // add addGroup, removeGroup, update after the component module is ported to cpp + + //cjh JSB need to bind the property, so need to make it public + bool _enabled{false}; + float _reduceRinging{0.0F}; + bool _showProbe{true}; + bool _showWireframe{true}; + bool _showConvex{false}; + LightProbesData _data; + +private: + LightProbes *_resource{nullptr}; +}; + +} // namespace gi +} // namespace cc diff --git a/native/cocos/gi/light-probe/PolynomialSolver.cpp b/native/cocos/gi/light-probe/PolynomialSolver.cpp new file mode 100644 index 00000000000..63daa7de38f --- /dev/null +++ b/native/cocos/gi/light-probe/PolynomialSolver.cpp @@ -0,0 +1,94 @@ + +/**************************************************************************** + Copyright (c) 2022 Xiamen Yaji Software Co., Ltd. + + http://www.cocos.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated engine source code (the "Software"), a limited, + worldwide, royalty-free, non-assignable, revocable and non-exclusive license + to use Cocos Creator solely to develop games on your target platforms. You shall + not use Cocos Creator software for developing other software or tools that's + used for developing games. You are not granted to publish, distribute, + sublicense, and/or sell copies of Cocos Creator. + + The software or tools in this License Agreement are licensed, not sold. + Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +****************************************************************************/ + +#include "PolynomialSolver.h" +#include +#include "base/std/container/vector.h" +#include "math/Math.h" + +namespace cc { +namespace gi { + +float PolynomialSolver::getQuadraticUniqueRoot(float b, float c, float d) { + // quadratic case + if (b != 0.0F) { + // the discriminant should be 0 + return -c / (2.0F * b); + } + + // linear case + if (c != 0.0F) { + return -d / c; + } + + // never reach here + return 0.0F; +} + +float PolynomialSolver::getCubicUniqueRoot(float b, float c, float d) { + ccstd::vector roots; + + // let x = y - b / 3, convert equation to: y^3 + 3 * p * y + 2 * q = 0 + // where p = c / 3 - b^2 / 9, q = d / 2 + b^3 / 27 - b * c / 6 + const auto offset = -b / 3.0F; + const auto p = c / 3.0F - (b * b) / 9.0F; + const auto q = d / 2.0F + (b * b * b) / 27.0F - (b * c) / 6.0F; + const auto delta = p * p * p + q * q; // discriminant + + if (delta > 0.0F) { + // only one real root + const auto sqrtDelta = std::sqrt(delta); + roots.push_back(std::cbrt(-q + sqrtDelta) + std::cbrt(-q - sqrtDelta)); + } else if (delta < 0.0F) { + // three different real roots + const auto angle = std::acos(-q * std::sqrt(-p) / (p * p)) / 3.0F; + roots.push_back(2.0F * std::sqrt(-p) * std::cos(angle)); + roots.push_back(2.0F * std::sqrt(-p) * std::cos(angle + 2.0F * math::PI / 3.0F)); + roots.push_back(2.0F * std::sqrt(-p) * std::cos(angle + 4.0F * math::PI / 3.0F)); + } else { + // three real roots, at least two equal roots + if (q == 0.0F) { + roots.push_back(0.0F); + } else { + const auto root = std::cbrt(q); + roots.push_back(root); + roots.push_back(-2.0F * root); + } + } + + // return the unique positive root + for (float root : roots) { + if (root + offset >= 0.0F) { + return root + offset; + } + } + + // never reach here + return 0.0; +} + +} // namespace gi +} // namespace cc diff --git a/native/cocos/gi/light-probe/PolynomialSolver.h b/native/cocos/gi/light-probe/PolynomialSolver.h new file mode 100644 index 00000000000..f165856a2b5 --- /dev/null +++ b/native/cocos/gi/light-probe/PolynomialSolver.h @@ -0,0 +1,48 @@ + +/**************************************************************************** + Copyright (c) 2022 Xiamen Yaji Software Co., Ltd. + + http://www.cocos.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated engine source code (the "Software"), a limited, + worldwide, royalty-free, non-assignable, revocable and non-exclusive license + to use Cocos Creator solely to develop games on your target platforms. You shall + not use Cocos Creator software for developing other software or tools that's + used for developing games. You are not granted to publish, distribute, + sublicense, and/or sell copies of Cocos Creator. + + The software or tools in this License Agreement are licensed, not sold. + Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +****************************************************************************/ + +#pragma once + +namespace cc { +namespace gi { + +class PolynomialSolver { +public: + /** + * solve quadratic equation: b * t^2 + c * t + d = 0 + * return the unique real positive root + */ + static float getQuadraticUniqueRoot(float b, float c, float d); + + /** + * solve cubic equation: t^3 + b * t^2 + c * t + d = 0 + * return the unique real positive root + */ + static float getCubicUniqueRoot(float b, float c, float d); +}; + +} // namespace gi +} // namespace cc diff --git a/native/cocos/gi/light-probe/SH.cpp b/native/cocos/gi/light-probe/SH.cpp new file mode 100644 index 00000000000..ab09e709997 --- /dev/null +++ b/native/cocos/gi/light-probe/SH.cpp @@ -0,0 +1,247 @@ + +/**************************************************************************** + Copyright (c) 2022 Xiamen Yaji Software Co., Ltd. + + http://www.cocos.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated engine source code (the "Software"), a limited, + worldwide, royalty-free, non-assignable, revocable and non-exclusive license + to use Cocos Creator solely to develop games on your target platforms. You shall + not use Cocos Creator software for developing other software or tools that's + used for developing games. You are not granted to publish, distribute, + sublicense, and/or sell copies of Cocos Creator. + + The software or tools in this License Agreement are licensed, not sold. + Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +****************************************************************************/ + +#include "SH.h" +#include "base/Macros.h" + +namespace cc { +namespace gi { + +Vec3 LightProbeSampler::uniformSampleSphere(float u1, float u2) { + float z = 1.0F - 2.0F * u1; + float r = std::sqrt(std::max(0.0F, 1.0F - z * z)); + float phi = 2.0F * math::PI * u2; + + float x = r * std::cos(phi); + float y = r * std::sin(phi); + + return Vec3(x, y, z); +} + +ccstd::vector LightProbeSampler::uniformSampleSphereAll(uint32_t uCount1, uint32_t uCount2) { + CC_ASSERT(uCount1 > 0U && uCount2 > 0U); + + ccstd::vector samples; + const auto uDelta1 = 1.0F / static_cast(uCount1); + const auto uDelta2 = 1.0F / static_cast(uCount2); + + for (auto i = 0U; i < uCount1; i++) { + const auto u1 = (static_cast(i) + 0.5F) * uDelta1; + + for (auto j = 0U; j < uCount2; j++) { + const auto u2 = (static_cast(j) + 0.5F) * uDelta2; + const auto sample = uniformSampleSphere(u1, u2); + samples.push_back(sample); + } + } + + return samples; +} + +ccstd::vector SH::basisFunctions = { + [](const Vec3& /*v*/) -> float { return 0.282095F; }, // 0.5F * std::sqrt(math::PI_INV) + [](const Vec3& v) -> float { return 0.488603F * v.y; }, // 0.5F * std::sqrt(3.0F * math::PI_INV) * v.y + [](const Vec3& v) -> float { return 0.488603F * v.z; }, // 0.5F * std::sqrt(3.0F * math::PI_INV) * v.z + [](const Vec3& v) -> float { return 0.488603F * v.x; }, // 0.5F * std::sqrt(3.0F * math::PI_INV) * v.x + [](const Vec3& v) -> float { return 1.09255F * v.y * v.x; }, // 0.5F * std::sqrt(15.0F * math::PI_INV) * v.y * v.x + [](const Vec3& v) -> float { return 1.09255F * v.y * v.z; }, // 0.5F * std::sqrt(15.0F * math::PI_INV) * v.y * v.z + [](const Vec3& v) -> float { return 0.946175F * (v.z * v.z - 1.0F / 3.0F); }, // 0.75F * std::sqrt(5.0F * math::PI_INV) * (v.z * v.z - 1.0F / 3.0F) + [](const Vec3& v) -> float { return 1.09255F * v.z * v.x; }, // 0.5F * std::sqrt(15.0F * math::PI_INV) * v.z * v.x + [](const Vec3& v) -> float { return 0.546274F * (v.x * v.x - v.y * v.y); }, // 0.25F * std::sqrt(15.0F * math::PI_INV) * (v.x * v.x - v.y * v.y) +}; + +ccstd::vector SH::basisOverPI = { + 0.0897936F, // 0.282095 / Math.PI + 0.155527F, // 0.488603 / Math.PI + 0.155527F, // 0.488603 / Math.PI + 0.155527F, // 0.488603 / Math.PI + 0.347769F, // 1.09255 / Math.PI + 0.347769F, // 1.09255 / Math.PI + 0.301177F, // 0.946175 / Math.PI + 0.347769F, // 1.09255 / Math.PI + 0.173884F, // 0.546274 / Math.PI +}; + +void SH::updateUBOData(Float32Array& data, int32_t offset, ccstd::vector& coefficients) { + // cc_sh_linear_const_r + data[offset++] = coefficients[3].x * basisOverPI[3]; + data[offset++] = coefficients[1].x * basisOverPI[1]; + data[offset++] = coefficients[2].x * basisOverPI[2]; + data[offset++] = coefficients[0].x * basisOverPI[0] - coefficients[6].x * basisOverPI[6] / 3.0F; + + // cc_sh_linear_const_g + data[offset++] = coefficients[3].y * basisOverPI[3]; + data[offset++] = coefficients[1].y * basisOverPI[1]; + data[offset++] = coefficients[2].y * basisOverPI[2]; + data[offset++] = coefficients[0].y * basisOverPI[0] - coefficients[6].y * basisOverPI[6] / 3.0F; + + // cc_sh_linear_const_b + data[offset++] = coefficients[3].z * basisOverPI[3]; + data[offset++] = coefficients[1].z * basisOverPI[1]; + data[offset++] = coefficients[2].z * basisOverPI[2]; + data[offset++] = coefficients[0].z * basisOverPI[0] - coefficients[6].z * basisOverPI[6] / 3.0F; + + // cc_sh_quadratic_r + data[offset++] = coefficients[4].x * basisOverPI[4]; + data[offset++] = coefficients[5].x * basisOverPI[5]; + data[offset++] = coefficients[6].x * basisOverPI[6]; + data[offset++] = coefficients[7].x * basisOverPI[7]; + + // cc_sh_quadratic_g + data[offset++] = coefficients[4].y * basisOverPI[4]; + data[offset++] = coefficients[5].y * basisOverPI[5]; + data[offset++] = coefficients[6].y * basisOverPI[6]; + data[offset++] = coefficients[7].y * basisOverPI[7]; + + // cc_sh_quadratic_b + data[offset++] = coefficients[4].z * basisOverPI[4]; + data[offset++] = coefficients[5].z * basisOverPI[5]; + data[offset++] = coefficients[6].z * basisOverPI[6]; + data[offset++] = coefficients[7].z * basisOverPI[7]; + + // cc_sh_quadratic_a + data[offset++] = coefficients[8].x * basisOverPI[8]; + data[offset++] = coefficients[8].y * basisOverPI[8]; + data[offset++] = coefficients[8].z * basisOverPI[8]; + data[offset++] = 0.0; +} + +Vec3 SH::shaderEvaluate(const Vec3& normal, ccstd::vector& coefficients) { + const Vec4 linearConstR = { + coefficients[3].x * basisOverPI[3], + coefficients[1].x * basisOverPI[1], + coefficients[2].x * basisOverPI[2], + coefficients[0].x * basisOverPI[0] - coefficients[6].x * basisOverPI[6] / 3.0F}; + + const Vec4 linearConstG = { + coefficients[3].y * basisOverPI[3], + coefficients[1].y * basisOverPI[1], + coefficients[2].y * basisOverPI[2], + coefficients[0].y * basisOverPI[0] - coefficients[6].y * basisOverPI[6] / 3.0F}; + + const Vec4 linearConstB = { + coefficients[3].z * basisOverPI[3], + coefficients[1].z * basisOverPI[1], + coefficients[2].z * basisOverPI[2], + coefficients[0].z * basisOverPI[0] - coefficients[6].z * basisOverPI[6] / 3.0F}; + + const Vec4 quadraticR = { + coefficients[4].x * basisOverPI[4], + coefficients[5].x * basisOverPI[5], + coefficients[6].x * basisOverPI[6], + coefficients[7].x * basisOverPI[7]}; + + const Vec4 quadraticG = { + coefficients[4].y * basisOverPI[4], + coefficients[5].y * basisOverPI[5], + coefficients[6].y * basisOverPI[6], + coefficients[7].y * basisOverPI[7]}; + + const Vec4 quadraticB = { + coefficients[4].z * basisOverPI[4], + coefficients[5].z * basisOverPI[5], + coefficients[6].z * basisOverPI[6], + coefficients[7].z * basisOverPI[7]}; + + const Vec3 quadraticA = { + coefficients[8].x * basisOverPI[8], + coefficients[8].y * basisOverPI[8], + coefficients[8].z * basisOverPI[8]}; + + Vec3 result{0.0F, 0.0F, 0.0F}; + Vec4 normal4{normal.x, normal.y, normal.z, 1.0F}; + + // calculate linear and const terms + result.x = linearConstR.dot(normal4); + result.y = linearConstG.dot(normal4); + result.z = linearConstB.dot(normal4); + + // calculate quadratic terms + Vec4 n14{normal.x * normal.y, normal.y * normal.z, normal.z * normal.z, normal.z * normal.x}; + float n5 = normal.x * normal.x - normal.y * normal.y; + + result.x += quadraticR.dot(n14); + result.y += quadraticG.dot(n14); + result.z += quadraticB.dot(n14); + result += quadraticA * n5; + + return result; +} + +Vec3 SH::evaluate(const Vec3& sample, const ccstd::vector& coefficients) { + Vec3 result{0.0F, 0.0F, 0.0F}; + + const auto size = coefficients.size(); + for (auto i = 0; i < size; i++) { + const Vec3& c = coefficients[i]; + result += c * evaluateBasis(i, sample); + } + + return result; +} + +ccstd::vector SH::project(const ccstd::vector& samples, const ccstd::vector& values) { + CC_ASSERT(!samples.empty() && samples.size() == values.size()); + + // integral using Monte Carlo method + const auto basisCount = getBasisCount(); + const auto sampleCount = samples.size(); + const auto scale = 1.0F / (LightProbeSampler::uniformSpherePdf() * static_cast(sampleCount)); + + ccstd::vector coefficients; + coefficients.reserve(basisCount); + + for (auto i = 0; i < basisCount; i++) { + Vec3 coefficient{0.0F, 0.0F, 0.0F}; + + for (auto k = 0; k < sampleCount; k++) { + coefficient += values[k] * evaluateBasis(i, samples[k]); + } + + coefficient *= scale; + coefficients.push_back(coefficient); + } + + return coefficients; +} + +ccstd::vector SH::convolveCosine(const ccstd::vector& radianceCoefficients) { + static const float COS_THETA[3] = {0.8862268925F, 1.0233267546F, 0.4954159260F}; + ccstd::vector irradianceCoefficients; + + for (auto l = 0; l <= LMAX; l++) { + for (auto m = -l; m <= l; m++) { + auto i = toIndex(l, m); + Vec3 coefficient = lambda(l) * COS_THETA[l] * radianceCoefficients[i]; + irradianceCoefficients.push_back(coefficient); + } + } + + return irradianceCoefficients; +} + +} // namespace gi +} // namespace cc diff --git a/native/cocos/gi/light-probe/SH.h b/native/cocos/gi/light-probe/SH.h new file mode 100644 index 00000000000..fa3789b614d --- /dev/null +++ b/native/cocos/gi/light-probe/SH.h @@ -0,0 +1,138 @@ + +/**************************************************************************** + Copyright (c) 2022 Xiamen Yaji Software Co., Ltd. + + http://www.cocos.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated engine source code (the "Software"), a limited, + worldwide, royalty-free, non-assignable, revocable and non-exclusive license + to use Cocos Creator solely to develop games on your target platforms. You shall + not use Cocos Creator software for developing other software or tools that's + used for developing games. You are not granted to publish, distribute, + sublicense, and/or sell copies of Cocos Creator. + + The software or tools in this License Agreement are licensed, not sold. + Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +****************************************************************************/ + +#pragma once + +#include +#include +#include "base/std/container/vector.h" +#include "core/TypedArray.h" +#include "math/Math.h" +#include "math/Vec3.h" + +namespace cc { +namespace gi { + +#define SH_BASIS_COUNT 9 + +class LightProbeSampler { +public: + /** + * generate one sample from sphere uniformly + */ + static Vec3 uniformSampleSphere(float u1, float u2); + + /** + * generate ucount1 * ucount2 samples from sphere uniformly + */ + static ccstd::vector uniformSampleSphereAll(uint32_t uCount1, uint32_t uCount2); + + /** + * probability density function of uniform distribution on spherical surface + */ + static inline float uniformSpherePdf() { return 1.0F / (4.0F * math::PI); } +}; + +/** + * Spherical Harmonics utility class + */ +class SH { +public: + using BasisFunction = std::function; + + /** + * update ubo data by coefficients + */ + static void updateUBOData(Float32Array& data, int32_t offset, ccstd::vector& coefficients); + + /** + * recreate a function from sh coefficients, which is same as SHEvaluate in shader + */ + static Vec3 shaderEvaluate(const Vec3& normal, ccstd::vector& coefficients); + + /** + * recreate a function from sh coefficients + */ + static Vec3 evaluate(const Vec3& sample, const ccstd::vector& coefficients); + + /** + * project a function to sh coefficients + */ + static ccstd::vector project(const ccstd::vector& samples, const ccstd::vector& values); + + /** + * calculate irradiance's sh coefficients from radiance's sh coefficients directly + */ + static ccstd::vector convolveCosine(const ccstd::vector& radianceCoefficients); + + /** + * return basis function count + */ + static inline uint32_t getBasisCount() { + return SH_BASIS_COUNT; + } + + /** + * evaluate from a basis function + */ + static inline float evaluateBasis(uint32_t index, const Vec3& sample) { + CC_ASSERT(index < getBasisCount()); + const auto& func = basisFunctions[index]; + + return func(sample); + } + + static inline void reduceRinging(ccstd::vector& coefficients, float lambda) { + if (lambda == 0.0F) { + return; + } + + for (int32_t l = 0; l <= LMAX; ++l) { + auto level = static_cast(l); + float scale = 1.0F / (1.0F + lambda * level * level * (level + 1) * (level + 1)); + for (int32_t m = -l; m <= l; ++m) { + const int32_t i = toIndex(l, m); + coefficients[i] *= scale; + } + } + } + +private: + static inline float lambda(int32_t l) { + return std::sqrt((4.0F * math::PI) / (2.0F * static_cast(l) + 1.0F)); + } + + static inline int32_t toIndex(int32_t l, int32_t m) { + return l * l + l + m; + } + + static constexpr int32_t LMAX = 2; + static ccstd::vector basisFunctions; + static ccstd::vector basisOverPI; +}; + +} // namespace gi +} // namespace cc diff --git a/native/cocos/renderer/pipeline/Define.cpp b/native/cocos/renderer/pipeline/Define.cpp index 2e6e419279d..9484c73fdae 100644 --- a/native/cocos/renderer/pipeline/Define.cpp +++ b/native/cocos/renderer/pipeline/Define.cpp @@ -347,6 +347,30 @@ const gfx::UniformBlock UBOUILocal::LAYOUT = { 1, }; +const ccstd::string UBOSH::NAME = "CCSH"; +const gfx::DescriptorSetLayoutBinding UBOSH::DESCRIPTOR = { + UBOSH::BINDING, + gfx::DescriptorType::UNIFORM_BUFFER, + 1, + gfx::ShaderStageFlagBit::FRAGMENT, + {}, +}; +const gfx::UniformBlock UBOSH::LAYOUT = { + localSet, + UBOSH::BINDING, + UBOSH::NAME, + { + {"cc_sh_linear_const_r", gfx::Type::FLOAT4, 1}, + {"cc_sh_linear_const_g", gfx::Type::FLOAT4, 1}, + {"cc_sh_linear_const_b", gfx::Type::FLOAT4, 1}, + {"cc_sh_quadratic_r", gfx::Type::FLOAT4, 1}, + {"cc_sh_quadratic_g", gfx::Type::FLOAT4, 1}, + {"cc_sh_quadratic_b", gfx::Type::FLOAT4, 1}, + {"cc_sh_quadratic_a", gfx::Type::FLOAT4, 1}, + }, + 1, +}; + const ccstd::string SHADOWMAP::NAME = "cc_shadowMap"; const gfx::DescriptorSetLayoutBinding SHADOWMAP::DESCRIPTOR = { SHADOWMAP::BINDING, diff --git a/native/cocos/renderer/pipeline/Define.h b/native/cocos/renderer/pipeline/Define.h index 9073e476dd8..ac437e19b5b 100644 --- a/native/cocos/renderer/pipeline/Define.h +++ b/native/cocos/renderer/pipeline/Define.h @@ -243,6 +243,7 @@ enum class CC_DLL ModelLocalBindings { UBO_SKINNING_TEXTURE, UBO_MORPH, UBO_UI_LOCAL, + UBO_SH, SAMPLER_JOINTS, SAMPLER_MORPH_POSITION, @@ -376,6 +377,22 @@ struct CC_DLL UBOUILocal { static const ccstd::string NAME; }; +struct CC_DLL UBOSH { + static constexpr uint32_t SH_LINEAR_CONST_R_OFFSET = 0; + static constexpr uint32_t SH_LINEAR_CONST_G_OFFSET = UBOSH::SH_LINEAR_CONST_R_OFFSET + 4; + static constexpr uint32_t SH_LINEAR_CONST_B_OFFSET = UBOSH::SH_LINEAR_CONST_G_OFFSET + 4; + static constexpr uint32_t SH_QUADRATIC_R_OFFSET = UBOSH::SH_LINEAR_CONST_B_OFFSET + 4; + static constexpr uint32_t SH_QUADRATIC_G_OFFSET = UBOSH::SH_QUADRATIC_R_OFFSET + 4; + static constexpr uint32_t SH_QUADRATIC_B_OFFSET = UBOSH::SH_QUADRATIC_G_OFFSET + 4; + static constexpr uint32_t SH_QUADRATIC_A_OFFSET = UBOSH::SH_QUADRATIC_B_OFFSET + 4; + static constexpr uint32_t COUNT = UBOSH::SH_QUADRATIC_A_OFFSET + 4; + static constexpr uint32_t SIZE = UBOSH::COUNT * 4; + static constexpr uint32_t BINDING = static_cast(ModelLocalBindings::UBO_SH); + static const gfx::DescriptorSetLayoutBinding DESCRIPTOR; + static const gfx::UniformBlock LAYOUT; + static const ccstd::string NAME; +}; + enum class CC_DLL ForwardStagePriority { FORWARD = 10, UI = 20 diff --git a/native/cocos/renderer/pipeline/GlobalDescriptorSetManager.cpp b/native/cocos/renderer/pipeline/GlobalDescriptorSetManager.cpp index 92f8423e273..8669343b2cd 100644 --- a/native/cocos/renderer/pipeline/GlobalDescriptorSetManager.cpp +++ b/native/cocos/renderer/pipeline/GlobalDescriptorSetManager.cpp @@ -211,6 +211,8 @@ void GlobalDSManager::setDescriptorSetLayout() { localDescriptorSetLayout.bindings[UBOMorph::BINDING] = UBOMorph::DESCRIPTOR; localDescriptorSetLayout.blocks[UBOUILocal::NAME] = UBOUILocal::LAYOUT; localDescriptorSetLayout.bindings[UBOUILocal::BINDING] = UBOUILocal::DESCRIPTOR; + localDescriptorSetLayout.blocks[UBOSH::NAME] = UBOSH::LAYOUT; + localDescriptorSetLayout.bindings[UBOSH::BINDING] = UBOSH::DESCRIPTOR; localDescriptorSetLayout.samplers[JOINTTEXTURE::NAME] = JOINTTEXTURE::LAYOUT; localDescriptorSetLayout.bindings[JOINTTEXTURE::BINDING] = JOINTTEXTURE::DESCRIPTOR; localDescriptorSetLayout.samplers[REALTIMEJOINTTEXTURE::NAME] = REALTIMEJOINTTEXTURE::LAYOUT; diff --git a/native/cocos/renderer/pipeline/PipelineSceneData.cpp b/native/cocos/renderer/pipeline/PipelineSceneData.cpp index e3c480b31b9..6b5e094a4c8 100644 --- a/native/cocos/renderer/pipeline/PipelineSceneData.cpp +++ b/native/cocos/renderer/pipeline/PipelineSceneData.cpp @@ -36,6 +36,7 @@ #include "scene/Pass.h" #include "scene/Shadow.h" #include "scene/Skybox.h" +#include "gi/light-probe/LightProbe.h" namespace cc { namespace pipeline { @@ -47,6 +48,7 @@ PipelineSceneData::PipelineSceneData() { _shadow = ccnew scene::Shadows(); _csmLayers = ccnew CSMLayers(); _octree = ccnew scene::Octree(); + _lightProbes = ccnew gi::LightProbes(); } PipelineSceneData::~PipelineSceneData() { @@ -56,6 +58,7 @@ PipelineSceneData::~PipelineSceneData() { CC_SAFE_DELETE(_shadow); CC_SAFE_DELETE(_octree); CC_SAFE_DELETE(_csmLayers); + CC_SAFE_DELETE(_lightProbes); } void PipelineSceneData::activate(gfx::Device *device) { diff --git a/native/cocos/renderer/pipeline/PipelineSceneData.h b/native/cocos/renderer/pipeline/PipelineSceneData.h index 92dfc3c4bb6..d002d1dd487 100644 --- a/native/cocos/renderer/pipeline/PipelineSceneData.h +++ b/native/cocos/renderer/pipeline/PipelineSceneData.h @@ -45,6 +45,10 @@ class Fog; class Octree; class Light; } // namespace scene +namespace gi { +class LightProbes; +} + namespace pipeline { class CC_DLL PipelineSceneData : public RefCounted { @@ -69,6 +73,7 @@ class CC_DLL PipelineSceneData : public RefCounted { inline scene::Skybox *getSkybox() const { return _skybox; } inline scene::Fog *getFog() const { return _fog; } inline scene::Octree *getOctree() const { return _octree; } + inline gi::LightProbes *getLightProbes() const { return _lightProbes; } inline gfx::InputAssembler *getOcclusionQueryInputAssembler() const { return _occlusionQueryInputAssembler; } inline scene::Pass *getOcclusionQueryPass() const { return _occlusionQueryPass; } inline gfx::Shader *getOcclusionQueryShader() const { return _occlusionQueryShader; } @@ -116,6 +121,8 @@ class CC_DLL PipelineSceneData : public RefCounted { // manage memory manually scene::Octree *_octree{nullptr}; // manage memory manually + gi::LightProbes *_lightProbes{nullptr}; + CSMLayers *_csmLayers{nullptr}; bool _isHDR{true}; diff --git a/native/cocos/scene/Model.cpp b/native/cocos/scene/Model.cpp index adac9570fcd..f982eb1e5d7 100644 --- a/native/cocos/scene/Model.cpp +++ b/native/cocos/scene/Model.cpp @@ -30,6 +30,8 @@ #include "core/assets/Material.h" #include "core/event/EventTypesToJS.h" #include "gfx-base/GFXTexture.h" +#include "gi/light-probe/LightProbe.h" +#include "gi/light-probe/SH.h" #include "profiler/Profiler.h" #include "renderer/pipeline/Define.h" #include "renderer/pipeline/InstancedBuffer.h" @@ -59,6 +61,7 @@ const cc::gfx::SamplerInfo LIGHTMAP_SAMPLER_WITH_MIP_HASH{ }; const ccstd::vector SHADOW_MAP_PATCHES{{"CC_RECEIVE_SHADOW", true}}; +const ccstd::vector LIGHT_PROBE_PATCHES{{"CC_USE_LIGHT_PROBE", true}}; } // namespace namespace cc { @@ -86,6 +89,7 @@ void Model::destroy() { _subModels.clear(); CC_SAFE_DESTROY_NULL(_localBuffer); + CC_SAFE_DESTROY_NULL(_localSHBuffer); CC_SAFE_DESTROY_NULL(_worldBoundBuffer); _worldBounds = nullptr; @@ -161,6 +165,9 @@ void Model::updateUBOs(uint32_t stamp) { subModel->update(); } _updateStamp = stamp; + + updateSHUBOs(); + if (!_localDataUpdated) { return; } @@ -182,10 +189,10 @@ void Model::updateUBOs(uint32_t stamp) { Mat4 mat4; Mat4::inverseTranspose(worldMatrix, &mat4); - _localBuffer->write(worldMatrix, sizeof(float) * pipeline::UBOLocal::MAT_WORLD_OFFSET); - _localBuffer->write(mat4, sizeof(float) * pipeline::UBOLocal::MAT_WORLD_IT_OFFSET); + _localBuffer->write(worldMatrix, sizeof(float) * pipeline::UBOLocal::MAT_WORLD_OFFSET); + _localBuffer->write(mat4, sizeof(float) * pipeline::UBOLocal::MAT_WORLD_IT_OFFSET); _localBuffer->write(_lightmapUVParam, sizeof(float) * pipeline::UBOLocal::LIGHTINGMAP_UVPARAM); - _localBuffer->write(_shadowBias, sizeof(float) * (pipeline::UBOLocal::LOCAL_SHADOW_BIAS)); + _localBuffer->write(_shadowBias, sizeof(float) * (pipeline::UBOLocal::LOCAL_SHADOW_BIAS)); _localBuffer->update(); const bool enableOcclusionQuery = Root::getInstance()->getPipeline()->isOcclusionQueryEnabled(); @@ -311,6 +318,49 @@ void Model::updateLightingmap(Texture2D *texture, const Vec4 &uvParam) { } } +bool Model::isLightProbeAvailable() const { + if (!_useLightProbe) { + return false; + } + + const auto *pipeline = Root::getInstance()->getPipeline(); + const auto *lightProbes = pipeline->getPipelineSceneData()->getLightProbes(); + if (!lightProbes->available()) { + return false; + } + + if (!_worldBounds) { + return false; + } + + return true; +} + +void Model::updateSHUBOs() { + if (!isLightProbeAvailable()) { + return; + } + + const auto center = _worldBounds->getCenter(); +#if !CC_EDITOR + if (center == _lastWorldBoundCenter) { + return; + } +#endif + + ccstd::vector coefficients; + const auto *pipeline = Root::getInstance()->getPipeline(); + const auto *lightProbes = pipeline->getPipelineSceneData()->getLightProbes(); + _tetrahedronIndex = lightProbes->getData().getInterpolationSHCoefficients(center, _tetrahedronIndex, coefficients); + gi::SH::reduceRinging(coefficients, lightProbes->getReduceRinging()); + _lastWorldBoundCenter.set(center); + + if (!_localSHData.empty() && _localSHBuffer) { + gi::SH::updateUBOData(_localSHData, pipeline::UBOSH::SH_LINEAR_CONST_R_OFFSET, coefficients); + _localSHBuffer->update(_localSHData.buffer()->getData()); + } +} + ccstd::vector Model::getMacroPatches(index_t subModelIndex) { if (isModelImplementedInJS()) { if (!_isCalledFromJS) { @@ -321,11 +371,20 @@ ccstd::vector Model::getMacroPatches(index_t subModelIndex) { } } + ccstd::vector patches; if (_receiveShadow) { - return SHADOW_MAP_PATCHES; + for (const auto &patch : SHADOW_MAP_PATCHES) { + patches.push_back(patch); + } } - return {}; + if (_useLightProbe) { + for (const auto &patch : LIGHT_PROBE_PATCHES) { + patches.push_back(patch); + } + } + + return patches; } void Model::updateAttributesAndBinding(index_t subModelIndex) { @@ -334,6 +393,9 @@ void Model::updateAttributesAndBinding(index_t subModelIndex) { initLocalDescriptors(subModelIndex); updateLocalDescriptors(subModelIndex, subModel->getDescriptorSet()); + initLocalSHDescriptors(subModelIndex); + updateLocalSHDescriptors(subModelIndex, subModel->getDescriptorSet()); + initWorldBoundDescriptors(subModelIndex); if (subModel->getWorldBoundDescriptorSet()) { updateWorldBoundDescriptors(subModelIndex, subModel->getWorldBoundDescriptorSet()); @@ -343,7 +405,7 @@ void Model::updateAttributesAndBinding(index_t subModelIndex) { updateInstancedAttributes(shader->getAttributes(), subModel); } -void Model::updateInstancedAttributes(const ccstd::vector &attributes, SubModel* subModel) { +void Model::updateInstancedAttributes(const ccstd::vector &attributes, SubModel *subModel) { if (isModelImplementedInJS()) { if (!_isCalledFromJS) { _eventProcessor.emit(EventTypesToJS::MODEL_UPDATE_INSTANCED_ATTRIBUTES, attributes, subModel); @@ -357,23 +419,42 @@ void Model::updateInstancedAttributes(const ccstd::vector &attri void Model::initLocalDescriptors(index_t /*subModelIndex*/) { if (!_localBuffer) { - _localBuffer = _device->createBuffer({ + _localBuffer = _device->createBuffer({gfx::BufferUsageBit::UNIFORM | gfx::BufferUsageBit::TRANSFER_DST, + gfx::MemoryUsageBit::DEVICE, + pipeline::UBOLocal::SIZE, + pipeline::UBOLocal::SIZE, + gfx::BufferFlagBit::ENABLE_STAGING_WRITE}); + } +} + +void Model::initLocalSHDescriptors(index_t /*subModelIndex*/) { +#if !CC_EDITOR + if (!_useLightProbe) { + return; + } +#endif + + if (_localSHData.empty()) { + _localSHData.reset(pipeline::UBOSH::COUNT); + } + + if (!_localSHBuffer) { + _localSHBuffer = _device->createBuffer({ gfx::BufferUsageBit::UNIFORM | gfx::BufferUsageBit::TRANSFER_DST, gfx::MemoryUsageBit::DEVICE, - pipeline::UBOLocal::SIZE, - pipeline::UBOLocal::SIZE, - gfx::BufferFlagBit::ENABLE_STAGING_WRITE}); + pipeline::UBOSH::SIZE, + pipeline::UBOSH::SIZE, + }); } } void Model::initWorldBoundDescriptors(index_t /*subModelIndex*/) { if (!_worldBoundBuffer) { - _worldBoundBuffer = _device->createBuffer({ - gfx::BufferUsageBit::UNIFORM | gfx::BufferUsageBit::TRANSFER_DST, - gfx::MemoryUsageBit::DEVICE, - pipeline::UBOLocal::SIZE, - pipeline::UBOLocal::SIZE, - gfx::BufferFlagBit::ENABLE_STAGING_WRITE}); + _worldBoundBuffer = _device->createBuffer({gfx::BufferUsageBit::UNIFORM | gfx::BufferUsageBit::TRANSFER_DST, + gfx::MemoryUsageBit::DEVICE, + pipeline::UBOWorldBound::SIZE, + pipeline::UBOWorldBound::SIZE, + gfx::BufferFlagBit::ENABLE_STAGING_WRITE}); } } @@ -391,10 +472,24 @@ void Model::updateLocalDescriptors(index_t subModelIndex, gfx::DescriptorSet *de } } +void Model::updateLocalSHDescriptors(index_t subModelIndex, gfx::DescriptorSet *descriptorSet) { + if (isModelImplementedInJS()) { + if (!_isCalledFromJS) { + _eventProcessor.emit(EventTypesToJS::MODEL_UPDATE_LOCAL_SH_DESCRIPTORS, subModelIndex, descriptorSet); + _isCalledFromJS = false; + return; + } + } + + if (_localSHBuffer) { + descriptorSet->bindBuffer(pipeline::UBOSH::BINDING, _localSHBuffer); + } +} + void Model::updateWorldBoundDescriptors(index_t subModelIndex, gfx::DescriptorSet *descriptorSet) { if (isModelImplementedInJS()) { if (!_isCalledFromJS) { - _eventProcessor.emit(EventTypesToJS::MODEL_UPDATE_LOCAL_DESCRIPTORS, subModelIndex, descriptorSet); + _eventProcessor.emit(EventTypesToJS::MODEL_UPDATE_WORLD_BOUND_DESCRIPTORS, subModelIndex, descriptorSet); _isCalledFromJS = false; return; } diff --git a/native/cocos/scene/Model.h b/native/cocos/scene/Model.h index 01829269719..1defc4751f6 100644 --- a/native/cocos/scene/Model.h +++ b/native/cocos/scene/Model.h @@ -25,6 +25,7 @@ #pragma once +#include #include #include "base/Ptr.h" #include "base/RefCounted.h" @@ -78,12 +79,14 @@ class Model : public RefCounted { virtual void updateTransform(uint32_t stamp); virtual void updateUBOs(uint32_t stamp); virtual void updateLocalDescriptors(index_t subModelIndex, gfx::DescriptorSet *descriptorSet); + virtual void updateLocalSHDescriptors(index_t subModelIndex, gfx::DescriptorSet *descriptorSet); virtual void updateWorldBoundDescriptors(index_t subModelIndex, gfx::DescriptorSet *descriptorSet); void createBoundingShape(const ccstd::optional &minPos, const ccstd::optional &maxPos); void initialize(); void initLightingmap(Texture2D *texture, const Vec4 &uvParam); void initLocalDescriptors(index_t subModelIndex); + void initLocalSHDescriptors(index_t subModelIndex); void initWorldBoundDescriptors(index_t subModelIndex); void onGlobalPipelineStateChanged() const; void onMacroPatchesStateChanged(); @@ -94,6 +97,7 @@ class Model : public RefCounted { void updateWorldBoundsForJSSkinningModel(const Vec3 &min, const Vec3 &max); void updateWorldBoundsForJSBakedSkinningModel(geometry::AABB *aabb); void updateLightingmap(Texture2D *texture, const Vec4 &uvParam); + void updateSHUBOs(); void updateOctree(); void updateWorldBoundUBOs(); void updateLocalShadowBias(); @@ -106,6 +110,7 @@ class Model : public RefCounted { inline void setCastShadow(bool value) { _castShadow = value; } inline void setEnabled(bool value) { _enabled = value; } inline void setLocalBuffer(gfx::Buffer *buffer) { _localBuffer = buffer; } + inline void setLocalSHBuffer(gfx::Buffer *buffer) { _localSHBuffer = buffer; } inline void setWorldBoundBuffer(gfx::Buffer *buffer) { _worldBoundBuffer = buffer; } inline void setNode(Node *node) { _node = node; } @@ -131,8 +136,18 @@ class Model : public RefCounted { inline bool isInited() const { return _inited; } inline bool isCastShadow() const { return _castShadow; } inline bool isEnabled() const { return _enabled; } + inline bool getUseLightProbe() const { return _useLightProbe; } + inline void setUseLightProbe(bool val) { + _useLightProbe = val; + onMacroPatchesStateChanged(); + } + inline int32_t getTetrahedronIndex() const { return _tetrahedronIndex; } + inline void setTetrahedronIndex(int32_t index) { _tetrahedronIndex = index; } + inline bool showTetrahedron() const { return isLightProbeAvailable(); } inline gfx::Buffer *getLocalBuffer() const { return _localBuffer.get(); } + inline gfx::Buffer *getLocalSHBuffer() const { return _localSHBuffer.get(); } inline gfx::Buffer *getWorldBoundBuffer() const { return _worldBoundBuffer.get(); } + inline Float32Array getLocalSHData() const { return _localSHData; } inline geometry::AABB *getModelBounds() const { return _modelBounds; } inline Node *getNode() const { return _node.get(); } inline bool isReceiveShadow() const { return _receiveShadow; } @@ -168,6 +183,7 @@ class Model : public RefCounted { static SubModel *createSubModel(); void updateAttributesAndBinding(index_t subModelIndex); + bool isLightProbeAvailable() const; // Please declare variables in descending order of memory size occupied by variables. Type _type{Type::DEFAULT}; @@ -176,6 +192,7 @@ class Model : public RefCounted { uint32_t _descriptorSetCount{1}; uint32_t _priority{0}; uint32_t _updateStamp{0}; + Float32Array _localSHData; OctreeNode *_octreeNode{nullptr}; RenderScene *_scene{nullptr}; @@ -184,11 +201,16 @@ class Model : public RefCounted { IntrusivePtr _transform; IntrusivePtr _node; IntrusivePtr _localBuffer; + IntrusivePtr _localSHBuffer; IntrusivePtr _worldBoundBuffer; IntrusivePtr _worldBounds; IntrusivePtr _modelBounds; IntrusivePtr _lightmap; + int32_t _tetrahedronIndex{0}; + Vec3 _lastWorldBoundCenter{INFINITY, INFINITY, INFINITY}; + bool _useLightProbe = false; + bool _enabled{false}; bool _castShadow{false}; bool _receiveShadow{false}; diff --git a/native/tools/swig-config/gi.i b/native/tools/swig-config/gi.i new file mode 100644 index 00000000000..7c9fc1709d9 --- /dev/null +++ b/native/tools/swig-config/gi.i @@ -0,0 +1,110 @@ +// Define module +// target_namespace means the name exported to JS, could be same as which in other modules +// 'your_module' at the last means the suffix of binding function name, different modules should use unique name +// Note: doesn't support number prefix +%module(target_namespace="jsb") gi + +// Insert code at the beginning of generated header file (.h) +%insert(header_file) %{ +#pragma once +#include "bindings/jswrapper/SeApi.h" +#include "bindings/manual/jsb_conversions.h" +#include "gi/light-probe/Delaunay.h" +#include "gi/light-probe/LightProbe.h" +%} + +// Insert code at the beginning of generated source file (.cpp) +%{ +#include "bindings/auto/jsb_gi_auto.h" + +using namespace cc; +using namespace cc::gi; +%} + +// ----- Ignore Section ------ +// Brief: Classes, methods or attributes need to be ignored +// +// Usage: +// +// %ignore your_namespace::your_class_name; +// %ignore your_namespace::your_class_name::your_method_name; +// %ignore your_namespace::your_class_name::your_attribute_name; +// +// Note: +// 1. 'Ignore Section' should be placed before attribute definition and %import/%include +// 2. namespace is needed +// +%ignore cc::gi::Edge; +%ignore cc::gi::Triangle; + + +// ----- Rename Section ------ +// Brief: Classes, methods or attributes needs to be renamed +// +// Usage: +// +// %rename(rename_to_name) your_namespace::original_class_name; +// %rename(rename_to_name) your_namespace::original_class_name::method_name; +// %rename(rename_to_name) your_namespace::original_class_name::attribute_name; +// +// Note: +// 1. 'Rename Section' should be placed before attribute definition and %import/%include +// 2. namespace is needed + + +// ----- Module Macro Section ------ +// Brief: Generated code should be wrapped inside a macro +// Usage: +// 1. Configure for class +// %module_macro(CC_USE_GEOMETRY_RENDERER) cc::pipeline::GeometryRenderer; +// 2. Configure for member function or attribute +// %module_macro(CC_USE_GEOMETRY_RENDERER) cc::pipeline::RenderPipeline::geometryRenderer; +// Note: Should be placed before 'Attribute Section' + +// Write your code bellow + + +// ----- Attribute Section ------ +// Brief: Define attributes ( JS properties with getter and setter ) +// Usage: +// 1. Define an attribute without setter +// %attribute(your_namespace::your_class_name, cpp_member_variable_type, js_property_name, cpp_getter_name) +// 2. Define an attribute with getter and setter +// %attribute(your_namespace::your_class_name, cpp_member_variable_type, js_property_name, cpp_getter_name, cpp_setter_name) +// 3. Define an attribute without getter +// %attribute_writeonly(your_namespace::your_class_name, cpp_member_variable_type, js_property_name, cpp_setter_name) +// +// Note: +// 1. Don't need to add 'const' prefix for cpp_member_variable_type +// 2. The return type of getter should keep the same as the type of setter's parameter +// 3. If using reference, add '&' suffix for cpp_member_variable_type to avoid generated code using value assignment +// 4. 'Attribute Section' should be placed before 'Import Section' and 'Include Section' +// +%attribute(cc::gi::LightProbesData, ccstd::vector&, probes, getProbes, setProbes); +%attribute(cc::gi::LightProbesData, ccstd::vector&, tetrahedrons, getTetrahedrons, setTetrahedrons); + +%attribute(cc::gi::LightProbes, bool, enabled, isEnabled, setEnabled); +%attribute(cc::gi::LightProbes, bool, reduceRinging, getReduceRinging, setReduceRinging); +%attribute(cc::gi::LightProbes, bool, showProbe, isShowProbe, setShowProbe); +%attribute(cc::gi::LightProbes, bool, showWireframe, isShowWireframe, setShowWireframe); +%attribute(cc::gi::LightProbes, bool, showConvex, isShowConvex, setShowConvex); +%attribute(cc::gi::LightProbes, cc::gi::LightProbesData&, data, getData, setData); + +%attribute(cc::gi::LightProbeInfo, bool, enabled, isEnabled, setEnabled); +%attribute(cc::gi::LightProbeInfo, bool, reduceRinging, getReduceRinging, setReduceRinging); +%attribute(cc::gi::LightProbeInfo, bool, showProbe, isShowProbe, setShowProbe); +%attribute(cc::gi::LightProbeInfo, bool, showWireframe, isShowWireframe, setShowWireframe); +%attribute(cc::gi::LightProbeInfo, bool, showConvex, isShowConvex, setShowConvex); +%attribute(cc::gi::LightProbeInfo, cc::gi::LightProbesData&, data, getData, setData); + +// ----- Import Section ------ +// Brief: Import header files which are depended by 'Include Section' +// Note: +// %import "your_header_file.h" will not generate code for that header file +// + + +// ----- Include Section ------ +// Brief: Include header files in which classes and methods will be bound +%include "gi/light-probe/Delaunay.h" +%include "gi/light-probe/LightProbe.h" diff --git a/native/tools/swig-config/pipeline.i b/native/tools/swig-config/pipeline.i index 33ae38b09e4..3ea8ee5d569 100644 --- a/native/tools/swig-config/pipeline.i +++ b/native/tools/swig-config/pipeline.i @@ -157,6 +157,7 @@ using namespace cc; %attribute(cc::pipeline::PipelineSceneData, cc::scene::Ambient*, ambient, getAmbient); %attribute(cc::pipeline::PipelineSceneData, cc::scene::Skybox*, skybox, getSkybox); %attribute(cc::pipeline::PipelineSceneData, cc::scene::Shadows*, shadows, getShadows); +%attribute(cc::pipeline::PipelineSceneData, cc::gi::LightProbes*, lightProbes, getLightProbes); %attribute(cc::pipeline::BloomStage, float, threshold, getThreshold, setThreshold); %attribute(cc::pipeline::BloomStage, float, intensity, getIntensity, setIntensity); diff --git a/native/tools/swig-config/scene.i b/native/tools/swig-config/scene.i index abc2aad3b62..9894d3ac917 100644 --- a/native/tools/swig-config/scene.i +++ b/native/tools/swig-config/scene.i @@ -9,6 +9,7 @@ #pragma once #include "bindings/jswrapper/SeApi.h" #include "bindings/manual/jsb_conversions.h" +#include "bindings/auto/jsb_gi_auto.h" #include "core/Root.h" #include "core/scene-graph/Node.h" #include "core/scene-graph/Scene.h" @@ -178,6 +179,8 @@ using namespace cc; %rename(_initLocalDescriptors) cc::scene::Model::initLocalDescriptors; %rename(_updateLocalDescriptors) cc::scene::Model::updateLocalDescriptors; +%rename(_initLocalSHDescriptors) cc::scene::Model::initLocalSHDescriptors; +%rename(_updateLocalSHDescriptors) cc::scene::Model::updateLocalSHDescriptors; %rename(_load) cc::Scene::load; %rename(_activate) cc::Scene::activate; @@ -267,6 +270,7 @@ using namespace cc; %attribute_writeonly(cc::Node, Mat4&, matrix, setMatrix); %attribute(cc::Node, uint32_t, hasChangedFlags, getChangedFlags, setChangedFlags); %attribute(cc::Node, bool, _persistNode, isPersistNode, setPersistNode); +%attribute(cc::Node, cc::MobilityMode, _mobility, getMobility, setMobility); %attribute(cc::scene::Ambient, cc::Vec4&, skyColor, getSkyColor, setSkyColor); %attribute(cc::scene::Ambient, float, skyIllum, getSkyIllum, setSkyIllum); @@ -417,6 +421,7 @@ using namespace cc; %attribute(cc::scene::Model, cc::scene::Model::Type, type, getType, setType); %attribute(cc::scene::Model, bool, isDynamicBatching, isDynamicBatching, setDynamicBatching); %attribute(cc::scene::Model, uint32_t, priority, getPriority, setPriority); +%attribute(cc::scene::Model, bool, useLightProbe, getUseLightProbe, setUseLightProbe); %attribute(cc::scene::SubModel, std::shared_ptr>> &, passes, getPasses, setPasses); %attribute(cc::scene::SubModel, ccstd::vector> &, shaders, getShaders, setShaders); diff --git a/native/tools/swig-config/swig-config.js b/native/tools/swig-config/swig-config.js index 3c9787b8c0e..d608e91ff09 100644 --- a/native/tools/swig-config/swig-config.js +++ b/native/tools/swig-config/swig-config.js @@ -21,6 +21,7 @@ const configList = [ [ 'webview.i', 'jsb_webview_auto.cpp' ], [ 'video.i', 'jsb_video_auto.cpp' ], [ 'renderer.i', 'jsb_render_auto.cpp' ], + [ 'gi.i', 'jsb_gi_auto.cpp' ], ]; const cocosNativeRoot = path.resolve(path.join(__dirname, '..', '..')); diff --git a/native/tools/tojs/genbindings.py b/native/tools/tojs/genbindings.py index c8e9fcd22be..d578330c190 100755 --- a/native/tools/tojs/genbindings.py +++ b/native/tools/tojs/genbindings.py @@ -30,7 +30,8 @@ '2d', 'editor_support', 'spine', - 'dragonbones' + 'dragonbones', + 'gi' ] projectRoot = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..')) diff --git a/native/tools/tojs/gi.ini b/native/tools/tojs/gi.ini new file mode 100644 index 00000000000..dac91042702 --- /dev/null +++ b/native/tools/tojs/gi.ini @@ -0,0 +1,77 @@ +[gi] +# the prefix to be added to the generated functions. You might or might not use this in your own +# templates +prefix = gi + +#cpp_headers = + +# create a target namespace (in javascript, this would create some code like the equiv. to `ns = ns || {}`) +# all classes will be embedded in that namespace +target_namespace = jsb + +android_headers = + +android_flags = -target armv7-none-linux-androideabi -D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS -DANDROID -D__ANDROID_API__=14 -gcc-toolchain %(gcc_toolchain_dir)s --sysroot=%(androidndkdir)s/platforms/android-14/arch-arm -idirafter %(androidndkdir)s/sources/android/support/include -idirafter %(androidndkdir)s/sysroot/usr/include -idirafter %(androidndkdir)s/sysroot/usr/include/arm-linux-androideabi -idirafter %(clangllvmdir)s/lib64/clang/5.0/include -I%(androidndkdir)s/sources/cxx-stl/llvm-libc++/include + +clang_headers = +clang_flags = -nostdinc -x c++ -std=c++17 -fsigned-char -U__SSE__ + +cocos_headers = -I%(cocosdir)s/cocos -I%(cocosdir)s/cocos/renderer -I%(cocosdir)s -I%(cocosdir)s/cocos/platform/android -I%(cocosdir)s/external/sources -I%(cocosdir)s/external/android/armeabi-v7a/include/v8 -I%(cocosdir)s/external/android/armeabi-v7a/include/uv +cocos_flags = -DANDROID -DCC_PLATFORM=3 -DCC_PLATFORM_IOS=1 -DCC_PLATFORM_MACOS=4 -DCC_PLATFORM_WINDOWS=2 -DCC_PLATFORM_ANDROID=3 + + +cxxgenerator_headers = + +# extra arguments for clang +extra_arguments = %(android_headers)s %(clang_headers)s %(cxxgenerator_headers)s %(cocos_headers)s %(android_flags)s %(clang_flags)s %(cocos_flags)s %(extra_flags)s + +# what headers to parse +headers = %(cocosdir)s/cocos/gi/light-probe/LightProbe.h + %(cocosdir)s/cocos/gi/light-probe/Delaunay.h + +hpp_headers = + +cpp_headers = + +# what classes to produce code for. You can use regular expressions here. When testing the regular +# expression, it will be enclosed in "^$", like this: "^Menu*$". +classes = Vertex CircumSphere Tetrahedron LightProbesData LightProbes LightProbeInfo + +# what should we skip? in the format ClassName::[function function] +# ClassName is a regular expression, but will be used like this: "^ClassName$" functions are also +# regular expressions, they will not be surrounded by "^$". If you want to skip a whole class, just +# add a single "*" as functions. See bellow for several examples. A special class name is "*", which +# will apply to all class names. This is a convenience wildcard to be able to skip similar named +# functions from all classes. +skip = + + +rename_functions = + +getter_setter = LightProbesData::[probes/getProbes/setProbes tetrahedrons/getTetrahedrons/setTetrahedrons], + LightProbes::[enabled/isEnabled/setEnabled reduceRinging/getReduceRinging/setReduceRinging showProbe/isShowProbe/setShowProbe showWireframe/isShowWireframe/setShowWireframe showConvex/isShowConvex/setShowConvex data/getData/setData], + LightProbeInfo::[enabled/isEnabled/setEnabled reduceRinging/getReduceRinging/setReduceRingingg showProbe/isShowProbe/setShowProbe showWireframe/isShowWireframe/setShowWireframe showConvex/isShowConvex/setShowConvex data/getData/setData] + +field = Vertex::[position normal coefficients], + CircumSphere::[center radiusSquared], + Tetrahedron::[invalid vertex0 vertex1 vertex2 vertex3 neighbours matrix offset sphere], + LightProbesData::[_probes _tetrahedrons], + LightProbeInfo::[_enabled _reduceRinging _showProbe _showWireframe _showConvex _data] + +skip_public_fields = + +rename_classes = + +# for all class names, should we remove something when registering in the target VM? +remove_prefix = + +# classes for which there will be no "parent" lookup +classes_have_no_parents = +# base classes which will be skipped when their sub-classes found them. +base_classes_to_skip = RefCounted + +# classes that create no constructor +# Set is special and we will use a hand-written constructor +abstract_classes = + +method_module_configs = diff --git a/native/tools/tojs/pipeline.ini b/native/tools/tojs/pipeline.ini index ec0d03d834b..1511e612bb0 100644 --- a/native/tools/tojs/pipeline.ini +++ b/native/tools/tojs/pipeline.ini @@ -63,7 +63,7 @@ skip = ForwardPipeline::[getOrCreateRenderPass getLightsUBO getValidLights getLi rename_functions = getter_setter= RenderPipeline::[globalDSManager descriptorSet descriptorSetLayout constantMacros clusterEnabled bloomEnabled pipelineSceneData geometryRenderer profiler shadingScale], - PipelineSceneData::[isHDR/isHDR/setHDR shadingScale fog ambient skybox shadows/getShadows], + PipelineSceneData::[isHDR/isHDR/setHDR shadingScale fog ambient skybox shadows/getShadows lightProbes/getLightProbes], BloomStage::[threshold intensity iterations] rename_classes = diff --git a/native/tools/tojs/scene.ini b/native/tools/tojs/scene.ini index f9c218fb21a..6b5b4affbee 100644 --- a/native/tools/tojs/scene.ini +++ b/native/tools/tojs/scene.ini @@ -55,7 +55,7 @@ headers = %(cocosdir)s/cocos/core/data/Object.h %(cocosdir)s/cocos/scene/Octree.h %(cocosdir)s/cocos/platform/interfaces/modules/ISystemWindowManager.h -hpp_headers = cocos/bindings/auto/jsb_gfx_auto.h cocos/bindings/auto/jsb_geometry_auto.h cocos/bindings/auto/jsb_assets_auto.h +hpp_headers = cocos/bindings/auto/jsb_gfx_auto.h cocos/bindings/auto/jsb_geometry_auto.h cocos/bindings/auto/jsb_assets_auto.h cocos/bindings/auto/jsb_gi_auto.h cpp_headers = cocos/bindings/auto/jsb_render_auto.h cocos/bindings/auto/jsb_pipeline_auto.h cocos/bindings/auto/jsb_cocos_auto.h cocos/bindings/auto/jsb_2d_auto.h @@ -89,7 +89,7 @@ rename_functions = Root::[initialize=_initialize], Node::[resetChangedFlags=resetHasChangedFlags _parent=_parentInternal updateSiblingIndex=_updateSiblingIndex onPreDestroyBase=_onPreDestroyBase onPreDestroy=_onPreDestroy], FogInfo::[_isEnabled=_enabled], ProgramLib::[registerEffect=register], - Model::[initLocalDescriptors=_initLocalDescriptors updateLocalDescriptors=_updateLocalDescriptors], + Model::[initLocalDescriptors=_initLocalDescriptors initLocalSHDescriptors=_initLocalSHDescriptors updateLocalDescriptors=_updateLocalDescriptors updateLocalSHDescriptors=_updateLocalSHDescriptors], Scene::[load=_load activate=_activate], Pass::[initPassFromTarget=_initPassFromTarget updatePassHash=_updatePassHash] @@ -97,7 +97,7 @@ getter_setter = Root::[device:_device mainWindow curWindow tempWindow windows sc RenderWindow::[width height framebuffer cameras swapchain], Pass::[root device shaderInfo localSetLayout program properties defines passIndex propertyIndex dynamics rootBufferDirty/isRootBufferDirty _rootBufferDirty/isRootBufferDirty/_setRootBufferDirty priority primitive stage phase rasterizerState depthStencilState blendState dynamicStates batchingScheme descriptorSet hash/getHash pipelineLayout], PassInstance::[parent], - Node::[uuid angle matrix hasChangedFlags/getChangedFlags/setChangedFlags _persistNode/isPersistNode/setPersistNode], + Node::[uuid angle matrix hasChangedFlags/getChangedFlags/setChangedFlags _persistNode/isPersistNode/setPersistNode mobility/getMobility/setMobility], Ambient::[skyColor skyIllum groundAlbedo enabled/isEnabled mipmapCount], Light::[baked/isBaked/setBaked color useColorTemperature/isUseColorTemperature/setUseColorTemperature colorTemperature colorTemperatureRGB node type name scene], DirectionalLight::[direction illuminance illuminanceHDR illuminanceLDR shadowEnabled/isShadowEnabled shadowPcf shadowBias shadowNormalBias shadowSaturation shadowDistance shadowInvisibleOcclusionRange csmLevel/getCSMLevel/setCSMLevel csmNeedUpdate/isCSMNeedUpdate/setCSMNeedUpdate csmLayerLambda/getCSMLayerLambda/setCSMLayerLambda csmOptimizationMode/getCSMOptimizationMode/setCSMOptimizationMode shadowFixedArea/isShadowFixedArea shadowNear shadowFar shadowOrthoSize], @@ -127,7 +127,7 @@ field = Ambient::[SUN_ILLUM SKY_ILLUM], FogInfo::[_type _fogColor _isEnabled _fogDensity _fogStart _fogEnd _fogAtten _fogTop _fogRange _accurate], SkyboxInfo::[_envLightingType _envmapHDR _envmapLDR _diffuseMapHDR _diffuseMapLDR _enabled _useHDR _editableMaterial _reflectionHDR _reflectionLDR _rotationAngle], OctreeInfo::[_enabled _minPos _maxPos _depth], - Node::[_siblingIndex _parent _active$ _id] + Node::[_siblingIndex _parent _active$ _id _mobility] skip_public_fields = IMaterialInstanceInfo::[owner], diff --git a/scripts/build-engine/tests/stats-query/cc.config.json b/scripts/build-engine/tests/stats-query/cc.config.json index d4fb68f9fb3..7402dc9c7d5 100644 --- a/scripts/build-engine/tests/stats-query/cc.config.json +++ b/scripts/build-engine/tests/stats-query/cc.config.json @@ -96,7 +96,9 @@ "cocos/3d/models/morph-model.ts":"cocos/3d/models/morph-model.jsb.ts", "cocos/3d/models/skinning-model.ts":"cocos/3d/models/skinning-model.jsb.ts", "cocos/3d/models/baked-skinning-model.ts":"cocos/3d/models/baked-skinning-model.jsb.ts", - "cocos/3d/misc/create-mesh.ts":"cocos/3d/misc/create-mesh.jsb.ts" + "cocos/3d/misc/create-mesh.ts":"cocos/3d/misc/create-mesh.jsb.ts", + "cocos/gi/light-probe/light-probe.ts":"cocos/gi/light-probe/light-probe.jsb.ts", + "cocos/gi/light-probe/delaunay.ts":"cocos/gi/light-probe/delaunay.jsb.ts" } }, { diff --git a/tests/general/global-variable-cc.test.ts b/tests/general/global-variable-cc.test.ts index 1f30476a814..86c77b1fdb9 100644 --- a/tests/general/global-variable-cc.test.ts +++ b/tests/general/global-variable-cc.test.ts @@ -55,6 +55,8 @@ test('global variables are sealed', async () => { }, undefined, 4)); } else { const sealedGlobalVariables = (await fs.readJson(sealedGlobalVariablesFile)).variables as string[]; + console.log('sealed:', sealedGlobalVariables); + console.log('global:', globalVariables.sort()); expect(globalVariables.length === sealedGlobalVariables.length && globalVariables.every((v) => sealedGlobalVariables.includes(v))).toBeTruthy(); } diff --git a/tests/general/sealed-global-variables.json b/tests/general/sealed-global-variables.json index 86b73c89f78..b243a5cda17 100644 --- a/tests/general/sealed-global-variables.json +++ b/tests/general/sealed-global-variables.json @@ -1,14 +1,14 @@ { "thisFile": { - "stamp": "2022-02-14T08:48:35.364Z" + "stamp": "2022-10-19T14:04:52.759Z" }, "variables": [ "cc.AffineTransform", "cc.Ambient", "cc.AmbientInfo", "cc.AnimCurve", - "cc.AnimationClip", "cc.Animation", + "cc.AnimationClip", "cc.AnimationComponent", "cc.AnimationManager", "cc.AnimationState", @@ -124,8 +124,8 @@ "cc.ImageAsset", "cc.Integer", "cc.JsonAsset", - "cc.LabelAtlas", "cc.Label", + "cc.LabelAtlas", "cc.LabelComponent", "cc.LabelOutline", "cc.LabelOutlineComponent", @@ -146,6 +146,7 @@ "cc.NodeEventProcessor", "cc.NodePool", "cc.Object", + "cc.OctreeInfo", "cc.PageView", "cc.PageViewComponent", "cc.PageViewIndicator", @@ -202,8 +203,8 @@ "cc.SphereColliderComponent", "cc.SphereLightComponent", "cc.SpotLightComponent", - "cc.SpriteAtlas", "cc.Sprite", + "cc.SpriteAtlas", "cc.SpriteComponent", "cc.SpriteFrame", "cc.String", @@ -267,7 +268,6 @@ "cc.geometry", "cc.getTypedArrayConstructor", "cc.gfx", - "cc.rendering", "cc.instantiate", "cc.internal", "cc.isValid", @@ -288,9 +288,11 @@ "cc.quat", "cc.rect", "cc.renderer", + "cc.rendering", "cc.resources", "cc.sampleAnimationCurve", "cc.screen", + "cc.settings", "cc.size", "cc.sys", "cc.systemEvent", @@ -306,7 +308,6 @@ "cc.vmath", "cc.warn", "cc.warnID", - "cc.winSize", - "cc.settings" + "cc.winSize" ] } \ No newline at end of file From 55d86f904e3aa1ea153e5d0f7ae8988c177dbb0e Mon Sep 17 00:00:00 2001 From: Cocos Robot <48829427+cocos-robot@users.noreply.github.com> Date: Thu, 20 Oct 2022 10:22:43 +0800 Subject: [PATCH 046/829] [ci skip][AUTO]: Automated code generating update: 4b2d8e7bfc1f0607672d0953d063aac3836a4b84 (#13093) (#13099) Co-authored-by: cocos-robot --- native/cocos/core/builtin/DebugInfos.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/native/cocos/core/builtin/DebugInfos.cpp b/native/cocos/core/builtin/DebugInfos.cpp index 514f855ddb6..10c1c7edeb3 100644 --- a/native/cocos/core/builtin/DebugInfos.cpp +++ b/native/cocos/core/builtin/DebugInfos.cpp @@ -459,6 +459,5 @@ ccstd::unordered_map debugInfos = { { 16201, "The asset replacing failed, can not found override asset('%s') for '%s'" }, { 16301, "node '%s' doesn't have any ModelRenderer component, this component will not work. please add ModelRenderer component first" }, -{ 17000, "Less than 4 probes, can not tetrahedralize." }, }; }//namespace cc From e669808f3154b26c07cbda18d875a83d8dde88d2 Mon Sep 17 00:00:00 2001 From: Zeqiang Li Date: Thu, 20 Oct 2022 11:07:11 +0800 Subject: [PATCH 047/829] fix csm WGPU_CI_ON (#13098) * fix csm * layers index * update external config --- cocos/core/pipeline/shadow/shadow-stage.ts | 9 +- .../renderer/gfx-wgpu/WGPUCommandBuffer.cpp | 29 ++- .../renderer/gfx-wgpu/WGPUCommandBuffer.h | 3 + native/cocos/renderer/gfx-wgpu/WGPUDevice.cpp | 4 +- native/cocos/renderer/gfx-wgpu/WGPUUtils.cpp | 206 ++++++++++++++++++ native/cocos/renderer/gfx-wgpu/WGPUUtils.h | 10 +- native/external-config.json | 4 +- 7 files changed, 252 insertions(+), 13 deletions(-) diff --git a/cocos/core/pipeline/shadow/shadow-stage.ts b/cocos/core/pipeline/shadow/shadow-stage.ts index f4e768a0b07..48666dac6c5 100644 --- a/cocos/core/pipeline/shadow/shadow-stage.ts +++ b/cocos/core/pipeline/shadow/shadow-stage.ts @@ -110,6 +110,7 @@ export class ShadowStage extends RenderStage { const descriptorSet = this._globalDS!; const cmdBuff = pipeline.commandBuffers[0]; const level = this._level; + const device = pipeline.device; if (!this._light || !this._shadowFrameBuffer) { return; } this._pipeline.pipelineUBO.updateShadowUBOLight(descriptorSet, this._light, level); @@ -125,8 +126,13 @@ export class ShadowStage extends RenderStage { this._renderArea.width = shadowMapSize.x; this._renderArea.height = shadowMapSize.y; } else { + const screenSpaceSignY = device.capabilities.screenSpaceSignY; this._renderArea.x = level % 2 * 0.5 * shadowMapSize.x; - this._renderArea.y = (1 - Math.floor(level / 2)) * 0.5 * shadowMapSize.y; + if (screenSpaceSignY > 1.0) { + this._renderArea.y = (1 - Math.floor(level / 2)) * 0.5 * shadowMapSize.y; + } else { + this._renderArea.y = Math.floor(level / 2) * 0.5 * shadowMapSize.y; + } this._renderArea.width = 0.5 * shadowMapSize.x; this._renderArea.height = 0.5 * shadowMapSize.y; } @@ -142,7 +148,6 @@ export class ShadowStage extends RenderStage { default: } - const device = pipeline.device; const renderPass = this._shadowFrameBuffer.renderPass; cmdBuff.beginRenderPass(renderPass, this._shadowFrameBuffer, this._renderArea, diff --git a/native/cocos/renderer/gfx-wgpu/WGPUCommandBuffer.cpp b/native/cocos/renderer/gfx-wgpu/WGPUCommandBuffer.cpp index 3c3f53fd341..88a0b1a0183 100644 --- a/native/cocos/renderer/gfx-wgpu/WGPUCommandBuffer.cpp +++ b/native/cocos/renderer/gfx-wgpu/WGPUCommandBuffer.cpp @@ -87,6 +87,8 @@ void CCWGPUCommandBuffer::begin(RenderPass * /*renderPass*/, uint32_t /*subpass* _numInstances = 0; _gpuCommandBufferObj->wgpuCommandEncoder = wgpuDeviceCreateCommandEncoder(CCWGPUDevice::getInstance()->gpuDeviceObject()->wgpuDevice, nullptr); + + _attachmentSet.clear(); } void CCWGPUCommandBuffer::end() { @@ -113,13 +115,21 @@ void CCWGPUCommandBuffer::beginRenderPass(RenderPass *renderPass, Framebuffer *f _frameBuffer = fbo; CCWGPUFramebuffer *ccFrameBuffer = static_cast(fbo); - const ColorAttachmentList &colorConfigs = renderPass->getColorAttachments(); const DepthStencilAttachment &depthStencilConfig = renderPass->getDepthStencilAttachment(); const TextureList &textures = ccFrameBuffer->getColorTextures(); Texture *dsTexture = ccFrameBuffer->getDepthStencilTexture(); CCWGPUSwapchain *swapchain = ccFrameBuffer->swapchain(); + bool renderingFullScreen = true; + bool needPartialClear = false; + for (size_t i = 0; i < textures.size(); ++i) { + if (renderArea.x != 0 || renderArea.y != 0 || renderArea.width != textures[i]->getWidth() || renderArea.height != textures[i]->getHeight()) { + renderingFullScreen = false; + break; + } + } + WGPURenderPassDescriptor &renderPassDesc = _gpuCommandBufferObj->renderPassDescriptor; ccstd::vector colorAttachments; if (colorConfigs.empty()) { @@ -139,14 +149,19 @@ void CCWGPUCommandBuffer::beginRenderPass(RenderPass *renderPass, Framebuffer *f for (size_t i = 0; i < colorConfigs.size(); i++) { WGPURenderPassColorAttachment *colorAttchments = ccnew WGPURenderPassColorAttachment[colorConfigs.size()]; + auto loadOp = toWGPULoadOp(colorConfigs[i].loadOp); + if (!renderingFullScreen) { + loadOp = _attachmentSet.find(textures[i]) == _attachmentSet.end() ? loadOp : WGPULoadOp_Load; + } WGPURenderPassColorAttachment color = { .view = static_cast(textures[i])->gpuTextureObject()->selfView, .resolveTarget = nullptr, // TODO_Zeqiang: wgpu offscr msaa - .loadOp = toWGPULoadOp(colorConfigs[i].loadOp), + .loadOp = loadOp, .storeOp = toWGPUStoreOp(colorConfigs[i].storeOp), .clearValue = toWGPUColor(colors[i]), }; colorAttachments.emplace_back(color); + _attachmentSet.insert(textures[i]); } } @@ -154,7 +169,7 @@ void CCWGPUCommandBuffer::beginRenderPass(RenderPass *renderPass, Framebuffer *f if (dsTexture) { WGPURenderPassDepthStencilAttachment depthStencil = { .view = static_cast(dsTexture)->gpuTextureObject()->selfView, - .depthLoadOp = WGPULoadOp_Clear, // toWGPULoadOp(depthStencilConfig.depthLoadOp), + .depthLoadOp = toWGPULoadOp(depthStencilConfig.depthLoadOp), .depthStoreOp = toWGPUStoreOp(depthStencilConfig.depthStoreOp), .depthClearValue = depth, .depthReadOnly = false, @@ -170,7 +185,7 @@ void CCWGPUCommandBuffer::beginRenderPass(RenderPass *renderPass, Framebuffer *f } else { WGPURenderPassDepthStencilAttachment depthStencil = { .view = swapchain->gpuSwapchainObject()->swapchainDepthStencil->gpuTextureObject()->selfView, - .depthLoadOp = WGPULoadOp_Clear, // toWGPULoadOp(depthStencilConfig.depthLoadOp), + .depthLoadOp = toWGPULoadOp(depthStencilConfig.depthLoadOp), .depthStoreOp = toWGPUStoreOp(depthStencilConfig.depthStoreOp), .depthClearValue = depth, .depthReadOnly = false, @@ -186,6 +201,12 @@ void CCWGPUCommandBuffer::beginRenderPass(RenderPass *renderPass, Framebuffer *f setViewport({renderArea.x, renderArea.y, renderArea.width, renderArea.height, 0.0F, 1.0F}); setScissor(renderArea); + if (!renderingFullScreen && needPartialClear) { + for (size_t i = 0; i < textures.size(); ++i) { + clearRect(this, textures[i], renderArea.x, renderArea.y, renderArea.width, renderArea.height, colors[i]); + } + } + _gpuCommandBufferObj->renderPassBegan = true; renderPassDesc.colorAttachments = colorAttachments.data(); diff --git a/native/cocos/renderer/gfx-wgpu/WGPUCommandBuffer.h b/native/cocos/renderer/gfx-wgpu/WGPUCommandBuffer.h index 01e7dcff64b..63c43d81e7d 100644 --- a/native/cocos/renderer/gfx-wgpu/WGPUCommandBuffer.h +++ b/native/cocos/renderer/gfx-wgpu/WGPUCommandBuffer.h @@ -103,6 +103,9 @@ class CCWGPUCommandBuffer final : public CommandBuffer { RenderPass *_renderPass = nullptr; Framebuffer *_frameBuffer = nullptr; + // first meet? + std::set _attachmentSet; + // command buffer inner impl // std::queue _renderPassFuncQ; // std::queue _computeFuncQ; diff --git a/native/cocos/renderer/gfx-wgpu/WGPUDevice.cpp b/native/cocos/renderer/gfx-wgpu/WGPUDevice.cpp index 016d3edaccb..7d42799fd54 100644 --- a/native/cocos/renderer/gfx-wgpu/WGPUDevice.cpp +++ b/native/cocos/renderer/gfx-wgpu/WGPUDevice.cpp @@ -317,7 +317,7 @@ void CCWGPUDevice::copyBuffersToTexture(const uint8_t *const *buffers, Texture * .origin = WGPUOrigin3D{ static_cast(region.texOffset.x), static_cast(region.texOffset.y), - static_cast(d)}, + static_cast(l)}, .aspect = WGPUTextureAspect_All, }; @@ -338,7 +338,7 @@ void CCWGPUDevice::copyBuffersToTexture(const uint8_t *const *buffers, Texture * .origin = WGPUOrigin3D{ static_cast(region.texOffset.x), static_cast(h), - static_cast(d)}, + static_cast(l)}, .aspect = WGPUTextureAspect_All, }; diff --git a/native/cocos/renderer/gfx-wgpu/WGPUUtils.cpp b/native/cocos/renderer/gfx-wgpu/WGPUUtils.cpp index 42b888b61e5..6a49e36cd80 100644 --- a/native/cocos/renderer/gfx-wgpu/WGPUUtils.cpp +++ b/native/cocos/renderer/gfx-wgpu/WGPUUtils.cpp @@ -1,9 +1,11 @@ #include "WGPUUtils.h" +#include "WGPUCommandBuffer.h" #include "WGPUDescriptorSet.h" #include "WGPUDescriptorSetLayout.h" #include "WGPUDevice.h" #include "WGPUObject.h" #include "WGPUPipelineLayout.h" +#include "WGPUTexture.h" namespace cc::gfx { @@ -46,4 +48,208 @@ void createPipelineLayoutFallback(const ccstd::vector& descripto } ccPipelineLayout->_hash = hash; } + +namespace { +struct ClearPassData { + WGPUShaderModule vertShader = wgpuDefaultHandle; + WGPUShaderModule fragShader = wgpuDefaultHandle; + WGPUBindGroupLayout bindGroupLayout = wgpuDefaultHandle; + WGPUPipelineLayout pipelineLayout = wgpuDefaultHandle; + WGPURenderPipeline pipeline = wgpuDefaultHandle; +}; +thread_local ClearPassData clearPassData; +} // namespace + +void clearRect(CommandBuffer* cmdBuff, Texture* texture, uint32_t x, uint32_t y, uint32_t w, uint32_t h, const Color& color) { + auto wgpuDevice = CCWGPUDevice::getInstance()->gpuDeviceObject()->wgpuDevice; + auto* ccTexture = static_cast(texture); + auto format = toWGPUTextureFormat(ccTexture->getFormat()); + auto dimension = toWGPUTextureDimension(ccTexture->getTextureType()); + auto* wgpuTexture = ccTexture->gpuTextureObject()->wgpuTexture; + + if (!clearPassData.vertShader) { + const char* clearQuadVert = R"( +struct VertexOutput { + @builtin(position) Position : vec4, +} + +@vertex +fn vert_main(@builtin(vertex_index) VertexIndex : u32) -> VertexOutput { + var pos = array, 6>( + vec2( 1.0, 1.0), + vec2( 1.0, -1.0), + vec2(-1.0, -1.0), + vec2( 1.0, 1.0), + vec2(-1.0, -1.0), + vec2(-1.0, 1.0) + ); + + var output : VertexOutput; + output.Position = vec4(pos[VertexIndex], 0.0, 1.0); + return output; +} + )"; + + const char* clearQuadFrag = R"( +struct ClearColor { + color: vec4, +} + +@group(0) @binding(0) var clearColor : ClearColor; + +@fragment +fn frag_main(@location(0) fragUV : vec2) -> @location(0) vec4 { + return clearColor; +} + )"; + + WGPUShaderModuleWGSLDescriptor wgslShaderDescVert; + wgslShaderDescVert.source = clearQuadVert; + wgslShaderDescVert.chain.sType = WGPUSType_ShaderModuleWGSLDescriptor; + WGPUShaderModuleDescriptor shaderDescVert; + shaderDescVert.nextInChain = reinterpret_cast(&wgslShaderDescVert); + shaderDescVert.label = "clearQuadVert"; + clearPassData.vertShader = wgpuDeviceCreateShaderModule(wgpuDevice, &shaderDescVert); + + WGPUShaderModuleWGSLDescriptor wgslShaderDescFrag; + wgslShaderDescFrag.source = clearQuadFrag; + wgslShaderDescFrag.chain.sType = WGPUSType_ShaderModuleWGSLDescriptor; + WGPUShaderModuleDescriptor shaderDescFrag; + shaderDescFrag.nextInChain = reinterpret_cast(&wgslShaderDescFrag); + shaderDescFrag.label = "clearQuadFrag"; + clearPassData.fragShader = wgpuDeviceCreateShaderModule(wgpuDevice, &shaderDescFrag); + + WGPUBindGroupLayoutEntry textureEntry; + textureEntry.binding = 0; + textureEntry.visibility = WGPUShaderStage_Fragment; + textureEntry.texture.sampleType = WGPUTextureSampleType_Undefined; + textureEntry.texture.viewDimension = WGPUTextureViewDimension_2D; + textureEntry.texture.multisampled = false; + textureEntry.buffer.type = WGPUBufferBindingType_Uniform; + textureEntry.sampler.type = WGPUSamplerBindingType_Undefined; + textureEntry.storageTexture.access = WGPUStorageTextureAccess_Undefined; + + WGPUBindGroupLayoutDescriptor bgLayoutDesc; + bgLayoutDesc.label = "clearPassBGLayout"; + bgLayoutDesc.entryCount = 1; + bgLayoutDesc.entries = &textureEntry; + clearPassData.bindGroupLayout = wgpuDeviceCreateBindGroupLayout(wgpuDevice, &bgLayoutDesc); + + WGPUPipelineLayoutDescriptor pipelineLayoutDesc; + pipelineLayoutDesc.label = "clearPassPipelineLayout"; + pipelineLayoutDesc.bindGroupLayoutCount = 1; + pipelineLayoutDesc.bindGroupLayouts = &clearPassData.bindGroupLayout; + clearPassData.pipelineLayout = wgpuDeviceCreatePipelineLayout(wgpuDevice, &pipelineLayoutDesc); + + WGPUVertexState vertexState; + vertexState.module = clearPassData.vertShader; + vertexState.entryPoint = "vert_main"; + + WGPUPrimitiveState primitiveState; + primitiveState.topology = WGPUPrimitiveTopology_TriangleList; + primitiveState.stripIndexFormat = WGPUIndexFormat_Undefined; + primitiveState.frontFace = WGPUFrontFace_CCW; + primitiveState.cullMode = WGPUCullMode_None; + + WGPUColorTargetState colorState; + colorState.format = format; + colorState.writeMask = WGPUColorWriteMask_All; + + WGPUFragmentState fragState; + fragState.module = clearPassData.fragShader; + fragState.entryPoint = "frag_main"; + fragState.targetCount = 1; + fragState.targets = &colorState; + + WGPUMultisampleState multisample; + multisample.count = 1; + multisample.alphaToCoverageEnabled = false; + multisample.mask = 0xFFFFFFFF; + + WGPURenderPipelineDescriptor pipelineDesc; + pipelineDesc.label = "clearPassPipeline"; + pipelineDesc.layout = clearPassData.pipelineLayout; + pipelineDesc.vertex = vertexState; + pipelineDesc.primitive = primitiveState; + pipelineDesc.fragment = &fragState; + pipelineDesc.depthStencil = nullptr; + pipelineDesc.multisample = multisample; + clearPassData.pipeline = wgpuDeviceCreateRenderPipeline(wgpuDevice, &pipelineDesc); + } + + CC_ASSERT(i > 0); + auto cmdBuffCommandEncoder = static_cast(cmdBuff)->gpuCommandBufferObject()->wgpuCommandEncoder; + auto commandEncoder = cmdBuffCommandEncoder; + if (!cmdBuffCommandEncoder) { + commandEncoder = wgpuDeviceCreateCommandEncoder(wgpuDevice, nullptr); + } + WGPUTextureViewDescriptor desc; + desc.format = format; + desc.dimension = WGPUTextureViewDimension_2D; + desc.baseMipLevel = 0; + desc.mipLevelCount = 1; + desc.baseArrayLayer = 0; + desc.arrayLayerCount = 1; + desc.aspect = WGPUTextureAspect_All; + auto dstView = wgpuTextureCreateView(wgpuTexture, &desc); + + WGPUBufferDescriptor bufferDesc; + bufferDesc.usage = WGPUBufferUsage_Vertex; + bufferDesc.size = 16; + bufferDesc.mappedAtCreation = true; + auto uniformBuffer = wgpuDeviceCreateBuffer(wgpuDevice, &bufferDesc); + + float colorArr[4] = {color.x, color.y, color.z, color.w}; + auto* mappedBuffer = wgpuBufferGetMappedRange(uniformBuffer, 0, 16); + memcpy(mappedBuffer, colorArr, 16); + wgpuBufferUnmap(uniformBuffer); + + WGPUBindGroupEntry entry; + entry.nextInChain = nullptr; + entry.binding = 0; + entry.sampler = wgpuDefaultHandle; + entry.buffer = uniformBuffer; + entry.textureView = wgpuDefaultHandle; + + WGPUBindGroupDescriptor bindgroupDesc; + bindgroupDesc.layout = clearPassData.bindGroupLayout; + bindgroupDesc.entryCount = 1; + bindgroupDesc.entries = &entry; + auto bindGroup = wgpuDeviceCreateBindGroup(wgpuDevice, &bindgroupDesc); + + WGPURenderPassColorAttachment colorAttachment; + colorAttachment.view = dstView; + colorAttachment.resolveTarget = wgpuDefaultHandle; + colorAttachment.loadOp = WGPULoadOp_Load; + colorAttachment.storeOp = WGPUStoreOp_Store; + // colorAttachment.clearValue = {0.88, 0.88, 0.88, 1.0}; + + WGPURenderPassDescriptor rpDesc; + rpDesc.nextInChain = nullptr; + rpDesc.label = nullptr; + rpDesc.colorAttachmentCount = 1; + rpDesc.colorAttachments = &colorAttachment; + rpDesc.depthStencilAttachment = nullptr; + rpDesc.occlusionQuerySet = nullptr; + rpDesc.timestampWriteCount = 0; + rpDesc.timestampWrites = nullptr; + auto renderPassEncoder = wgpuCommandEncoderBeginRenderPass(commandEncoder, &rpDesc); + + wgpuRenderPassEncoderSetPipeline(renderPassEncoder, clearPassData.pipeline); + wgpuRenderPassEncoderSetBindGroup(renderPassEncoder, 0, bindGroup, 0, nullptr); + wgpuRenderPassEncoderDraw(renderPassEncoder, 6, 1, 0, 0); + wgpuRenderPassEncoderEnd(renderPassEncoder); + wgpuRenderPassEncoderRelease(renderPassEncoder); + wgpuBindGroupRelease(bindGroup); + wgpuTextureViewRelease(dstView); + wgpuBufferRelease(uniformBuffer); + + if (!cmdBuffCommandEncoder) { + auto commandBuffer = wgpuCommandEncoderFinish(commandEncoder, nullptr); + wgpuQueueSubmit(CCWGPUDevice::getInstance()->gpuDeviceObject()->wgpuQueue, 1, &commandBuffer); + wgpuCommandEncoderRelease(commandEncoder); + wgpuCommandBufferRelease(commandBuffer); + } +} + } // namespace cc::gfx diff --git a/native/cocos/renderer/gfx-wgpu/WGPUUtils.h b/native/cocos/renderer/gfx-wgpu/WGPUUtils.h index 9a73bb79461..d53ba3fab7e 100644 --- a/native/cocos/renderer/gfx-wgpu/WGPUUtils.h +++ b/native/cocos/renderer/gfx-wgpu/WGPUUtils.h @@ -589,7 +589,7 @@ static WGPUFlags toWGPUColorWriteMask(ColorMask mask) { } static ccstd::string getAdapterTypeName(WGPUAdapterType type) { - switch(type) { + switch (type) { case WGPUAdapterType_DiscreteGPU: return "WGPUAdapterType_DiscreteGPU"; case WGPUAdapterType_IntegratedGPU: @@ -597,14 +597,14 @@ static ccstd::string getAdapterTypeName(WGPUAdapterType type) { case WGPUAdapterType_CPU: return "WGPUAdapterType_CPU"; case WGPUAdapterType_Unknown: - return "WGPUAdapterType_Unknown"; + return "WGPUAdapterType_Unknown"; default: return "unknown adapter by cc.gfx!"; } } static ccstd::string getBackendTypeName(WGPUBackendType type) { - switch(type) { + switch (type) { case WGPUBackendType_Null: return "WGPUBackendType_Null"; case WGPUBackendType_WebGPU: @@ -631,6 +631,10 @@ class PipelineLayout; // descriptor set layout in descriptor set not consistent with the binding in pipeline layout. void createPipelineLayoutFallback(const ccstd::vector& descriptorSets, PipelineLayout* pipelineLayout); +class Texture; +class CommandBuffer; +void clearRect(CommandBuffer* cmdBuffer, Texture* texture, uint32_t x, uint32_t y, uint32_t w, uint32_t h, const Color& color); + static constexpr WGPUColor defaultClearColor{0.2, 0.2, 0.2, 1.0}; static constexpr float defaultClearDepth = 1.0f; diff --git a/native/external-config.json b/native/external-config.json index 6a54257f4e4..33b5a243f50 100644 --- a/native/external-config.json +++ b/native/external-config.json @@ -3,6 +3,6 @@ "type": "github", "owner": "cocos-creator", "name": "engine-native-external", - "checkout": "v3.6.2-4" + "checkout": "v3.6.2-5" } -} +} \ No newline at end of file From e6636e599098499f7d5a12c3a29012fe36161e3e Mon Sep 17 00:00:00 2001 From: PP Date: Thu, 20 Oct 2022 14:42:20 +0800 Subject: [PATCH 048/829] upgrade: node version 14 on CI (#13106) * fix node version on web-build ci * fix: node version on Interface Check worker flow * fix: npm version on npm test workflow --- .github/workflows/web-build.yml | 2 +- .github/workflows/web-interface-check.yml | 4 ++++ .github/workflows/web-npm_test.yml | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/web-build.yml b/.github/workflows/web-build.yml index ca410269a77..17112e9b1c8 100644 --- a/.github/workflows/web-build.yml +++ b/.github/workflows/web-build.yml @@ -18,7 +18,7 @@ jobs: (! contains(github.event.pull_request.body, '[X] does not change any runtime related code or build configuration')) strategy: matrix: - node-version: [12.x] + node-version: [14.x] # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ steps: diff --git a/.github/workflows/web-interface-check.yml b/.github/workflows/web-interface-check.yml index 979b53ff413..bf1176314fc 100644 --- a/.github/workflows/web-interface-check.yml +++ b/.github/workflows/web-interface-check.yml @@ -14,6 +14,10 @@ jobs: (! contains(github.event.pull_request.body, '[X] does not change any runtime related code or build configuration')) runs-on: ubuntu-latest steps: + - uses: actions/setup-node@v2 + with: + node-version: '14.19' + - name: clone REPO run: | git config --global user.name "test" diff --git a/.github/workflows/web-npm_test.yml b/.github/workflows/web-npm_test.yml index e745221ac54..0adc0bdaac4 100644 --- a/.github/workflows/web-npm_test.yml +++ b/.github/workflows/web-npm_test.yml @@ -17,7 +17,7 @@ jobs: - uses: actions/setup-node@v2 with: - node-version: '12.13' + node-version: '14.19' - name: install gulp run: | From 23909e68b0a7dead9af573b10f50ddede93342aa Mon Sep 17 00:00:00 2001 From: hyde zhou Date: Thu, 20 Oct 2022 14:52:27 +0800 Subject: [PATCH 049/829] [develop] added ts/c++ binary archive (#13090) --- cocos/rendering/custom/binary-archive.ts | 73 +++++++++++++++++++ cocos/rendering/custom/index.jsb.ts | 1 + cocos/rendering/custom/index.ts | 2 + native/CMakeLists.txt | 1 + .../renderer/pipeline/custom/BinaryArchive.h | 69 ++++++++++++++++++ 5 files changed, 146 insertions(+) create mode 100644 cocos/rendering/custom/binary-archive.ts create mode 100644 native/cocos/renderer/pipeline/custom/BinaryArchive.h diff --git a/cocos/rendering/custom/binary-archive.ts b/cocos/rendering/custom/binary-archive.ts new file mode 100644 index 00000000000..ec827871cac --- /dev/null +++ b/cocos/rendering/custom/binary-archive.ts @@ -0,0 +1,73 @@ +import { OutputArchive, InputArchive } from './archive'; + +export class BinaryOutputArchive implements OutputArchive { + constructor () { + this.capacity = 4096; + this.buffer = new Uint8Array(this.capacity); + this.dataView = new DataView(this.buffer); + } + writeBool (value: boolean): void { + const newSize = this.size + 1; + if (newSize > this.capacity) { + this.reserve(newSize); + } + this.dataView.setUint8(this.size, value ? 1 : 0); + this.size = newSize; + } + writeNumber (value: number): void { + const newSize = this.size + 8; + if (newSize > this.capacity) { + this.reserve(newSize); + } + this.dataView.setFloat64(this.size, value, true); + this.size = newSize; + } + writeString (value: string): void { + this.writeNumber(value.length); + const newSize = this.size + value.length; + if (newSize > this.capacity) { + this.reserve(newSize); + } + for (let i = 0; i < value.length; i++) { + this.dataView.setUint8(this.size + i, value.charCodeAt(i)); + } + this.size = newSize; + } + reserve (requiredSize: number): void { + const newCapacity = Math.max(requiredSize, this.capacity * 2); + const prevBuffer = this.buffer; + this.buffer = new Uint8Array(newCapacity); + this.buffer.set(prevBuffer); + this.dataView = new DataView(this.buffer); + this.capacity = newCapacity; + } + get data (): ArrayBuffer { + return this.buffer.buffer.slice(0, this.size); + } + capacity = 0; + size = 0; + buffer: Uint8Array; + dataView: DataView; +} + +export class BinaryInputArchive implements InputArchive { + constructor (data: ArrayBuffer) { + this.dataView = new DataView(data); + } + readBool (): boolean { + return this.dataView.getUint8(this.offset++) !== 0; + } + readNumber (): number { + const value = this.dataView.getFloat64(this.offset, true); + this.offset += 8; + return value; + } + readString (): string { + const length = this.readNumber(); + const value = new Uint8Array(this.dataView.buffer, this.offset, length).toString(); + this.offset += length; + return value; + } + offset = 0; + dataView: DataView; +} diff --git a/cocos/rendering/custom/index.jsb.ts b/cocos/rendering/custom/index.jsb.ts index 1eb1236a995..e768435fa62 100644 --- a/cocos/rendering/custom/index.jsb.ts +++ b/cocos/rendering/custom/index.jsb.ts @@ -33,6 +33,7 @@ import { CustomPipelineBuilder } from './custom-pipeline'; export * from './types'; export * from './pipeline'; +export * from './archive'; export function createCustomPipeline (): Pipeline { const ppl = render.Factory.createPipeline(); diff --git a/cocos/rendering/custom/index.ts b/cocos/rendering/custom/index.ts index 82f290ecb31..1707f5064c0 100644 --- a/cocos/rendering/custom/index.ts +++ b/cocos/rendering/custom/index.ts @@ -34,6 +34,8 @@ let _pipeline: WebPipeline | null = null; export * from './types'; export * from './pipeline'; +export * from './archive'; +export * from './binary-archive'; export function createCustomPipeline (): Pipeline { const ppl = new WebPipeline(); diff --git a/native/CMakeLists.txt b/native/CMakeLists.txt index 43f38139096..096083c5ac2 100644 --- a/native/CMakeLists.txt +++ b/native/CMakeLists.txt @@ -1274,6 +1274,7 @@ cocos_source_files( cocos/renderer/pipeline/UIPhase.h cocos/renderer/pipeline/helper/Utils.h cocos/renderer/pipeline/helper/Utils.cpp + cocos/renderer/pipeline/custom/BinaryArchive.h cocos/renderer/pipeline/custom/FrameGraphDispatcher.cpp cocos/renderer/pipeline/custom/SerializationUtils.h cocos/renderer/pipeline/custom/test/test.h diff --git a/native/cocos/renderer/pipeline/custom/BinaryArchive.h b/native/cocos/renderer/pipeline/custom/BinaryArchive.h new file mode 100644 index 00000000000..1089bf9548a --- /dev/null +++ b/native/cocos/renderer/pipeline/custom/BinaryArchive.h @@ -0,0 +1,69 @@ +#pragma once +#include +#include +#include +#include "cocos/base/std/container/string.h" +#include "cocos/renderer/pipeline/custom/ArchiveTypes.h" + +namespace cc { + +namespace render { + +class BinaryOutputArchive final : public OutputArchive { +public: + BinaryOutputArchive(std::ostream& os, boost::container::pmr::memory_resource* scratch) + : _os(os), _scratch(scratch) {} + + void writeBool(bool value) override { + uint8_t v = value ? 1 : 0; + _os.write(reinterpret_cast(&v), sizeof(v)); + } + void writeNumber(double value) override { + _os.write(reinterpret_cast(&value), sizeof(value)); + } + void writeString(std::string_view value) override { + writeNumber(static_cast(value.size())); + _os.write(value.data(), static_cast(value.size())); + } + boost::container::pmr::memory_resource* scratch() const noexcept override { + return _scratch; + } + +private: + std::ostream& _os; + boost::container::pmr::memory_resource* _scratch; +}; + +class BinaryInputArchive final : public InputArchive { +public: + BinaryInputArchive(std::istream& is, boost::container::pmr::memory_resource* scratch) + : _is(is), _temp(scratch) {} + + bool readBool() override { + uint8_t v; + _is.read(reinterpret_cast(&v), sizeof(v)); + return v != 0; + } + double readNumber() override { + double v; + _is.read(reinterpret_cast(&v), sizeof(v)); + return v; + } + std::string_view readString() override { + double size = readNumber(); + _temp.resize(static_cast(size)); + _is.read(_temp.data(), static_cast(size)); + return _temp; + } + boost::container::pmr::memory_resource* scratch() const noexcept override { + return _temp.get_allocator().resource(); + } + +private: + std::istream& _is; + ccstd::pmr::string _temp; +}; + +} // namespace render + +} // namespace cc From 351f8201db70db6fc39bd84db8306496ecf6ca07 Mon Sep 17 00:00:00 2001 From: PP Date: Thu, 20 Oct 2022 15:54:16 +0800 Subject: [PATCH 050/829] fix: interface-check (#13109) --- .github/workflows/web-interface-check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/web-interface-check.yml b/.github/workflows/web-interface-check.yml index bf1176314fc..390d9f8a4d9 100644 --- a/.github/workflows/web-interface-check.yml +++ b/.github/workflows/web-interface-check.yml @@ -16,7 +16,7 @@ jobs: steps: - uses: actions/setup-node@v2 with: - node-version: '14.19' + node-version: '14.19' - name: clone REPO run: | From b5804b58c8baaa63955a7f5d3b66295f56c09400 Mon Sep 17 00:00:00 2001 From: minggo Date: Thu, 20 Oct 2022 16:35:23 +0800 Subject: [PATCH 051/829] Hide destructor (#13105) * hide Image destructor * hide HttpRequest destructor * hide TextureBufferPool destructor * hide gfx::Buffer destructor --- native/cocos/2d/renderer/RenderDrawInfo.cpp | 6 +++--- native/cocos/2d/renderer/UIMeshBuffer.cpp | 12 +++++++++--- .../skeletal-animation/SkeletalAnimationUtils.cpp | 4 ++-- native/cocos/base/memory/Memory.h | 13 +++++++++++++ native/cocos/bindings/manual/jsb_global.cpp | 6 +++--- native/cocos/core/assets/BitmapFont.cpp | 6 +++--- native/cocos/network/HttpRequest.h | 6 +++--- native/cocos/platform/Image.h | 2 +- native/cocos/profiler/DebugRenderer.cpp | 2 +- native/cocos/renderer/core/TextureBufferPool.h | 2 +- native/cocos/renderer/gfx-agent/BufferAgent.cpp | 5 ++--- native/cocos/renderer/gfx-base/GFXBuffer.h | 8 ++++---- .../renderer/gfx-validator/BufferValidator.cpp | 3 +-- native/cocos/renderer/pipeline/BatchedBuffer.cpp | 8 ++++---- native/cocos/renderer/pipeline/GeometryRenderer.cpp | 2 +- native/cocos/renderer/pipeline/InstancedBuffer.cpp | 2 +- native/cocos/renderer/pipeline/PipelineUBO.cpp | 4 ++-- native/cocos/renderer/pipeline/RenderPipeline.cpp | 6 +++--- .../cocos/renderer/pipeline/deferred/BloomStage.cpp | 9 ++++----- .../renderer/pipeline/deferred/LightingStage.cpp | 4 ++-- .../renderer/pipeline/deferred/ReflectionComp.cpp | 2 +- 21 files changed, 64 insertions(+), 48 deletions(-) diff --git a/native/cocos/2d/renderer/RenderDrawInfo.cpp b/native/cocos/2d/renderer/RenderDrawInfo.cpp index 413217d8181..54441c12639 100644 --- a/native/cocos/2d/renderer/RenderDrawInfo.cpp +++ b/native/cocos/2d/renderer/RenderDrawInfo.cpp @@ -85,10 +85,10 @@ void RenderDrawInfo::resetMeshIA() { void RenderDrawInfo::destroy() { _nextFreeIAHandle = 0; if (_iaInfo) { - CC_SAFE_DELETE(_iaInfo->indexBuffer); + CC_SAFE_RELEASE_NULL(_iaInfo->indexBuffer); if (!_iaInfo->vertexBuffers.empty()) { // only one vb - CC_SAFE_DELETE(_iaInfo->vertexBuffers[0]); + CC_SAFE_RELEASE_NULL(_iaInfo->vertexBuffers[0]); _iaInfo->vertexBuffers.clear(); } CC_SAFE_DELETE(_iaInfo); @@ -104,7 +104,7 @@ void RenderDrawInfo::destroy() { if (_localDSBF) { CC_SAFE_DELETE(_localDSBF->ds); - CC_SAFE_DELETE(_localDSBF->uboBuf); + CC_SAFE_RELEASE_NULL(_localDSBF->uboBuf); CC_SAFE_DELETE(_localDSBF); } } diff --git a/native/cocos/2d/renderer/UIMeshBuffer.cpp b/native/cocos/2d/renderer/UIMeshBuffer.cpp index 2bf6dc4901a..83aeb5e0124 100644 --- a/native/cocos/2d/renderer/UIMeshBuffer.cpp +++ b/native/cocos/2d/renderer/UIMeshBuffer.cpp @@ -49,7 +49,7 @@ void UIMeshBuffer::setIData(uint16_t* iData) { _iData = iData; } -void UIMeshBuffer::initialize(ccstd::vector &&attrs, bool needCreateLayout) { +void UIMeshBuffer::initialize(ccstd::vector&& attrs, bool needCreateLayout) { _attributes = attrs; _vertexFormatBytes = getAttributesStride(attrs); if (needCreateLayout) { @@ -74,23 +74,29 @@ void UIMeshBuffer::resetIA() { void UIMeshBuffer::destroy() { reset(); _attributes.clear(); + for (auto* vb : _iaInfo.vertexBuffers) { - delete vb; + vb->release(); } _iaInfo.vertexBuffers.clear(); - CC_SAFE_DELETE(_iaInfo.indexBuffer); + + CC_SAFE_RELEASE_NULL(_iaInfo.indexBuffer); + if (_needDeleteVData) { delete _vData; delete _iData; } + _vData = nullptr; _iData = nullptr; + // Destroy InputAssemblers for (auto* ia : _iaPool) { ia->destroy(); delete ia; } _iaPool.clear(); + if (_needDeleteLayout) { CC_SAFE_DELETE(_meshBufferLayout); } diff --git a/native/cocos/3d/skeletal-animation/SkeletalAnimationUtils.cpp b/native/cocos/3d/skeletal-animation/SkeletalAnimationUtils.cpp index ca9f6212527..75d7fe5b780 100644 --- a/native/cocos/3d/skeletal-animation/SkeletalAnimationUtils.cpp +++ b/native/cocos/3d/skeletal-animation/SkeletalAnimationUtils.cpp @@ -488,7 +488,7 @@ IAnimInfo JointAnimationInfo::getData(const ccstd::string &nodeID) { void JointAnimationInfo::destroy(const ccstd::string &nodeID) { if (_pool.find(nodeID) != _pool.end()) { - CC_SAFE_DESTROY_AND_DELETE(_pool[nodeID].buffer); + CC_SAFE_DESTROY_AND_RELEASE_NULL(_pool[nodeID].buffer); _pool.erase(nodeID); } } @@ -503,7 +503,7 @@ const IAnimInfo &JointAnimationInfo::switchClip(IAnimInfo &info /*, AnimationCli void JointAnimationInfo::clear() { for (auto pool : _pool) { - CC_SAFE_DESTROY_AND_DELETE(pool.second.buffer); + CC_SAFE_DESTROY_AND_RELEASE_NULL(pool.second.buffer); } _pool.clear(); } diff --git a/native/cocos/base/memory/Memory.h b/native/cocos/base/memory/Memory.h index ae9407437c8..7866e066775 100644 --- a/native/cocos/base/memory/Memory.h +++ b/native/cocos/base/memory/Memory.h @@ -103,6 +103,19 @@ class MemoryAllocDealloc final { (ptr) = nullptr; \ } +#define CC_SAFE_DESTROY_AND_RELEASE(ptr) \ + if (ptr) { \ + (ptr)->destroy(); \ + (ptr)->release(); \ + } + +#define CC_SAFE_DESTROY_AND_RELEASE_NULL(ptr) \ + if (ptr) { \ + (ptr)->destroy(); \ + (ptr)->release(); \ + (ptr) = nullptr; \ + } + #define CC_SAFE_DESTROY_NULL(ptr) \ if (ptr) { \ (ptr)->destroy(); \ diff --git a/native/cocos/bindings/manual/jsb_global.cpp b/native/cocos/bindings/manual/jsb_global.cpp index 69be4ead7fa..94ff162a4b2 100644 --- a/native/cocos/bindings/manual/jsb_global.cpp +++ b/native/cocos/bindings/manual/jsb_global.cpp @@ -581,7 +581,7 @@ bool jsb_global_load_image(const ccstd::string &path, const se::Value &callbackV auto app = CC_CURRENT_APPLICATION(); if (!app) { delete imgInfo; - delete img; + img->release(); return; } auto engine = app->getEngine(); @@ -606,7 +606,7 @@ bool jsb_global_load_image(const ccstd::string &path, const se::Value &callbackV SE_REPORT_ERROR("initWithImageFile: %s failed!", path.c_str()); } callbackPtr->toObject()->call(seArgs, nullptr); - delete img; + img->release(); }); }); }; @@ -712,7 +712,7 @@ static bool js_saveImageData(se::State &s) { // NOLINT } uint8ArrayObj->unroot(); uint8ArrayObj->decRef(); - delete img; + img->release(); }); }); return true; diff --git a/native/cocos/core/assets/BitmapFont.cpp b/native/cocos/core/assets/BitmapFont.cpp index 4c7af37cd18..509099ddd38 100644 --- a/native/cocos/core/assets/BitmapFont.cpp +++ b/native/cocos/core/assets/BitmapFont.cpp @@ -152,13 +152,13 @@ gfx::Texture *BitmapFontFace::loadTexture(const ccstd::string &path) { bool success = image->initWithImageFile(path); if (!success) { CC_LOG_WARNING("BitmapFontFace initWithImageFile failed, path: %s.", path.c_str()); - delete image; + image->release(); return nullptr; } if (image->getRenderFormat() != gfx::Format::R8 && image->getRenderFormat() != gfx::Format::L8) { CC_LOG_WARNING("BitmapFontFace loadTexture with invalid format, path: %s.", path.c_str()); - delete image; + image->release(); return nullptr; } @@ -181,7 +181,7 @@ gfx::Texture *BitmapFontFace::loadTexture(const ccstd::string &path) { {0U, 0U, 1U}}}; device->copyBuffersToTexture(buffers, texture, regions); - delete image; + image->release(); return texture; } diff --git a/native/cocos/network/HttpRequest.h b/native/cocos/network/HttpRequest.h index 8180cb7d56b..2ed0a83d2b8 100644 --- a/native/cocos/network/HttpRequest.h +++ b/native/cocos/network/HttpRequest.h @@ -86,9 +86,6 @@ class CC_DLL HttpRequest : public RefCounted { HttpRequest() : _callback(nullptr) {} - /** Destructor. */ - ~HttpRequest() override = default; - // setter/getters for properties /** @@ -247,6 +244,9 @@ class CC_DLL HttpRequest : public RefCounted { } protected: + /** Destructor. */ + ~HttpRequest() override = default; + // properties Type _requestType{Type::UNKNOWN}; /// kHttpRequestGet, kHttpRequestPost or other enums ccstd::string _url; /// target url that this request is sent to diff --git a/native/cocos/platform/Image.h b/native/cocos/platform/Image.h index d4937a08cb5..0bbb935a0a0 100644 --- a/native/cocos/platform/Image.h +++ b/native/cocos/platform/Image.h @@ -36,7 +36,6 @@ namespace cc { class Image : public RefCounted { public: Image(); - ~Image() override; /** Supported formats for Image */ enum class Format { @@ -90,6 +89,7 @@ class Image : public RefCounted { bool saveToFile(const std::string &filename, bool isToRGB = true); protected: + ~Image() override; bool initWithJpgData(const unsigned char *data, uint32_t dataLen); bool initWithPngData(const unsigned char *data, uint32_t dataLen); #if CC_USE_WEBP diff --git a/native/cocos/profiler/DebugRenderer.cpp b/native/cocos/profiler/DebugRenderer.cpp index 4cb6b1abf3f..fbd4030792a 100644 --- a/native/cocos/profiler/DebugRenderer.cpp +++ b/native/cocos/profiler/DebugRenderer.cpp @@ -164,7 +164,7 @@ class DebugVertexBuffer { CC_SAFE_DELETE(batch); } - CC_SAFE_DESTROY_AND_DELETE(_buffer); + CC_SAFE_DESTROY_AND_RELEASE_NULL(_buffer); CC_SAFE_DESTROY_AND_DELETE(_inputAssembler); CC_PROFILE_MEMORY_DEC(DebugVertexBuffer, static_cast(_maxVertices * sizeof(DebugVertex))); } diff --git a/native/cocos/renderer/core/TextureBufferPool.h b/native/cocos/renderer/core/TextureBufferPool.h index 87390c3c178..ba914bccf4f 100644 --- a/native/cocos/renderer/core/TextureBufferPool.h +++ b/native/cocos/renderer/core/TextureBufferPool.h @@ -62,7 +62,6 @@ class TextureBufferPool : public RefCounted { public: TextureBufferPool(); explicit TextureBufferPool(gfx::Device *device); - ~TextureBufferPool() override; void initialize(const ITextureBufferPoolInfo &info); void destroy(); @@ -74,6 +73,7 @@ class TextureBufferPool : public RefCounted { void update(const ITextureBufferHandle &handle, ArrayBuffer *buffer); private: + ~TextureBufferPool() override; index_t findAvailableSpace(uint32_t size, index_t chunkIdx) const; // [McDonald 12] Efficient Buffer Management diff --git a/native/cocos/renderer/gfx-agent/BufferAgent.cpp b/native/cocos/renderer/gfx-agent/BufferAgent.cpp index ac056400836..6be2cbcd32d 100644 --- a/native/cocos/renderer/gfx-agent/BufferAgent.cpp +++ b/native/cocos/renderer/gfx-agent/BufferAgent.cpp @@ -44,7 +44,7 @@ BufferAgent::~BufferAgent() { actor, _actor, stagingBuffer, std::move(_stagingBuffer), { - CC_SAFE_DELETE(actor); + CC_SAFE_RELEASE(actor); }); } @@ -87,8 +87,7 @@ void BufferAgent::doResize(uint32_t size, uint32_t /*count*/) { ENQUEUE_MESSAGE_1( mq, BufferFreeStagingBuffer, stagingBuffer, std::move(_stagingBuffer), - { - }); + {}); } if (hasFlag(_flags, BufferFlagBit::ENABLE_STAGING_WRITE) || (size > STAGING_BUFFER_THRESHOLD && hasFlag(_memUsage, MemoryUsageBit::HOST))) { diff --git a/native/cocos/renderer/gfx-base/GFXBuffer.h b/native/cocos/renderer/gfx-base/GFXBuffer.h index 7cbe2045782..04b3984e7b8 100644 --- a/native/cocos/renderer/gfx-base/GFXBuffer.h +++ b/native/cocos/renderer/gfx-base/GFXBuffer.h @@ -34,7 +34,6 @@ namespace gfx { class CC_DLL Buffer : public GFXObject, public RefCounted { public: Buffer(); - ~Buffer() override; static ccstd::hash_t computeHash(const BufferInfo &info); @@ -44,8 +43,8 @@ class CC_DLL Buffer : public GFXObject, public RefCounted { void destroy(); template - void write(const T& value, uint32_t offset) const { - write(reinterpret_cast(&value), offset, sizeof(T)); + void write(const T &value, uint32_t offset) const { + write(reinterpret_cast(&value), offset, sizeof(T)); } void write(const uint8_t *value, uint32_t offset, uint32_t size) const; @@ -65,6 +64,7 @@ class CC_DLL Buffer : public GFXObject, public RefCounted { inline bool isBufferView() const { return _isBufferView; } protected: + ~Buffer() override; virtual void doInit(const BufferInfo &info) = 0; virtual void doInit(const BufferViewInfo &info) = 0; virtual void doResize(uint32_t size, uint32_t count) = 0; @@ -73,7 +73,7 @@ class CC_DLL Buffer : public GFXObject, public RefCounted { static uint8_t *getBufferStagingAddress(Buffer *buffer); static void flushBuffer(Buffer *buffer, const uint8_t *data); - virtual void flush(const uint8_t *data) { update(reinterpret_cast(data), _size); } + virtual void flush(const uint8_t *data) { update(reinterpret_cast(data), _size); } virtual uint8_t *getStagingAddress() const { return _data.get(); } BufferUsage _usage = BufferUsageBit::NONE; diff --git a/native/cocos/renderer/gfx-validator/BufferValidator.cpp b/native/cocos/renderer/gfx-validator/BufferValidator.cpp index 7b1512b47ca..567fc194fa6 100644 --- a/native/cocos/renderer/gfx-validator/BufferValidator.cpp +++ b/native/cocos/renderer/gfx-validator/BufferValidator.cpp @@ -49,7 +49,7 @@ BufferValidator::~BufferValidator() { view->onExpire(); } - CC_SAFE_DELETE(_actor); + CC_SAFE_RELEASE_NULL(_actor); uint64_t lifeTime = DeviceValidator::getInstance()->currentFrame() - _creationFrame; // skip those that have never been updated @@ -205,6 +205,5 @@ uint8_t *BufferValidator::getStagingAddress() const { return Buffer::getBufferStagingAddress(_actor); } - } // namespace gfx } // namespace cc diff --git a/native/cocos/renderer/pipeline/BatchedBuffer.cpp b/native/cocos/renderer/pipeline/BatchedBuffer.cpp index 468f5f6e319..a2f0992edcc 100644 --- a/native/cocos/renderer/pipeline/BatchedBuffer.cpp +++ b/native/cocos/renderer/pipeline/BatchedBuffer.cpp @@ -45,16 +45,16 @@ BatchedBuffer::~BatchedBuffer() = default; void BatchedBuffer::destroy() { for (auto &batch : _batches) { for (auto *vb : batch.vbs) { - CC_SAFE_DESTROY_AND_DELETE(vb); + CC_SAFE_DESTROY_AND_RELEASE(vb); } for (auto *data : batch.vbDatas) { CC_FREE(data); } - CC_SAFE_DESTROY_AND_DELETE(batch.indexBuffer); - CC_SAFE_DESTROY_AND_DELETE(batch.ia); - CC_SAFE_DESTROY_AND_DELETE(batch.ubo); + CC_SAFE_DESTROY_AND_RELEASE_NULL(batch.indexBuffer); + CC_SAFE_DESTROY_AND_RELEASE_NULL(batch.ia); + CC_SAFE_DESTROY_AND_RELEASE_NULL(batch.ubo); CC_FREE(batch.indexData); } diff --git a/native/cocos/renderer/pipeline/GeometryRenderer.cpp b/native/cocos/renderer/pipeline/GeometryRenderer.cpp index 2c1dffd8822..29fa2e08482 100644 --- a/native/cocos/renderer/pipeline/GeometryRenderer.cpp +++ b/native/cocos/renderer/pipeline/GeometryRenderer.cpp @@ -115,7 +115,7 @@ class GeometryVertexBuffer { inline void destroy() { _vertices.clear(); - CC_SAFE_DESTROY_AND_DELETE(_buffer); + CC_SAFE_DESTROY_AND_RELEASE_NULL(_buffer); CC_SAFE_DESTROY_AND_DELETE(_inputAssembler); CC_PROFILE_MEMORY_DEC(GeometryVertexBuffer, static_cast(_maxVertices * sizeof(T))); } diff --git a/native/cocos/renderer/pipeline/InstancedBuffer.cpp b/native/cocos/renderer/pipeline/InstancedBuffer.cpp index 1f7083b9614..9049f0a6b71 100644 --- a/native/cocos/renderer/pipeline/InstancedBuffer.cpp +++ b/native/cocos/renderer/pipeline/InstancedBuffer.cpp @@ -43,7 +43,7 @@ InstancedBuffer::~InstancedBuffer() = default; void InstancedBuffer::destroy() { for (auto &instance : _instances) { - CC_SAFE_DESTROY_AND_DELETE(instance.vb); + CC_SAFE_DESTROY_AND_RELEASE_NULL(instance.vb); CC_SAFE_DESTROY_AND_DELETE(instance.ia); CC_FREE(instance.data); } diff --git a/native/cocos/renderer/pipeline/PipelineUBO.cpp b/native/cocos/renderer/pipeline/PipelineUBO.cpp index cf1667fe494..6b1eec1ab2c 100644 --- a/native/cocos/renderer/pipeline/PipelineUBO.cpp +++ b/native/cocos/renderer/pipeline/PipelineUBO.cpp @@ -474,7 +474,7 @@ void PipelineUBO::activate(gfx::Device *device, RenderPipeline *pipeline) { void PipelineUBO::destroy() { for (auto &ubo : _ubos) { - CC_SAFE_DELETE(ubo) + CC_SAFE_RELEASE(ubo) } _ubos.clear(); } @@ -506,7 +506,7 @@ void PipelineUBO::updateMultiCameraUBO(GlobalDSManager *globalDSMgr, const ccstd if (_cameraBufferView != nullptr) { _ubos.erase(std::remove(_ubos.begin(), _ubos.end(), _cameraBufferView), _ubos.end()); - CC_SAFE_DELETE(_cameraBufferView); + CC_SAFE_RELEASE_NULL(_cameraBufferView); } _cameraBufferView = _device->createBuffer({ _cameraBuffer, diff --git a/native/cocos/renderer/pipeline/RenderPipeline.cpp b/native/cocos/renderer/pipeline/RenderPipeline.cpp index 6997bbd2d28..5a2d5e46519 100644 --- a/native/cocos/renderer/pipeline/RenderPipeline.cpp +++ b/native/cocos/renderer/pipeline/RenderPipeline.cpp @@ -118,14 +118,14 @@ void RenderPipeline::onGlobalPipelineStateChanged() { } void RenderPipeline::destroyQuadInputAssembler() { - CC_SAFE_DESTROY_AND_DELETE(_quadIB); + CC_SAFE_DESTROY_AND_RELEASE_NULL(_quadIB); for (auto *node : _quadVB) { - CC_SAFE_DESTROY_AND_DELETE(node); + CC_SAFE_DESTROY_AND_RELEASE(node); } for (auto node : _quadIA) { - CC_SAFE_DESTROY_AND_DELETE(node.second); + CC_SAFE_DESTROY_AND_RELEASE(node.second); } _quadVB.clear(); _quadIA.clear(); diff --git a/native/cocos/renderer/pipeline/deferred/BloomStage.cpp b/native/cocos/renderer/pipeline/deferred/BloomStage.cpp index 7e718496f61..ea8af3f3338 100644 --- a/native/cocos/renderer/pipeline/deferred/BloomStage.cpp +++ b/native/cocos/renderer/pipeline/deferred/BloomStage.cpp @@ -106,12 +106,11 @@ void BloomStage::activate(RenderPipeline *pipeline, RenderFlow *flow) { } void BloomStage::destroy() { - CC_SAFE_DELETE(_prefilterUBO); - CC_SAFE_DELETE(_combineUBO); + CC_SAFE_RELEASE_NULL(_prefilterUBO); + CC_SAFE_RELEASE_NULL(_combineUBO); for (int i = 0; i < MAX_BLOOM_FILTER_PASS_NUM; ++i) { - CC_SAFE_DELETE(_downsampleUBO[i]); - - CC_SAFE_DELETE(_upsampleUBO[i]); + CC_SAFE_RELEASE_NULL(_downsampleUBO[i]); + CC_SAFE_RELEASE_NULL(_upsampleUBO[i]); } } diff --git a/native/cocos/renderer/pipeline/deferred/LightingStage.cpp b/native/cocos/renderer/pipeline/deferred/LightingStage.cpp index 895d12252de..221d0ac7822 100644 --- a/native/cocos/renderer/pipeline/deferred/LightingStage.cpp +++ b/native/cocos/renderer/pipeline/deferred/LightingStage.cpp @@ -98,8 +98,8 @@ const RenderStageInfo &LightingStage::getInitializeInfo() { return LightingStage LightingStage::LightingStage() = default; LightingStage::~LightingStage() { - CC_SAFE_DESTROY_AND_DELETE(_deferredLitsBufs); - CC_SAFE_DESTROY_AND_DELETE(_deferredLitsBufView); + CC_SAFE_DESTROY_AND_RELEASE_NULL(_deferredLitsBufs); + CC_SAFE_DESTROY_AND_RELEASE_NULL(_deferredLitsBufView); } bool LightingStage::initialize(const RenderStageInfo &info) { diff --git a/native/cocos/renderer/pipeline/deferred/ReflectionComp.cpp b/native/cocos/renderer/pipeline/deferred/ReflectionComp.cpp index 2178cf48008..f51382aa0bb 100644 --- a/native/cocos/renderer/pipeline/deferred/ReflectionComp.cpp +++ b/native/cocos/renderer/pipeline/deferred/ReflectionComp.cpp @@ -24,7 +24,7 @@ ReflectionComp::~ReflectionComp() { CC_SAFE_DESTROY_AND_DELETE(_localDescriptorSetLayout); - CC_SAFE_DESTROY_AND_DELETE(_compConstantsBuffer); + CC_SAFE_DESTROY_AND_RELEASE_NULL(_compConstantsBuffer); } namespace { From b595f636c47c25b2640836a13ed771dbd0cfb536 Mon Sep 17 00:00:00 2001 From: mmyduckx <308303735@qq.com> Date: Thu, 20 Oct 2022 16:35:56 +0800 Subject: [PATCH 052/829] update network.i (#13108) --- native/tools/swig-config/network.i | 1 - 1 file changed, 1 deletion(-) diff --git a/native/tools/swig-config/network.i b/native/tools/swig-config/network.i index 962fb13dc06..ef1bd3d0ff9 100644 --- a/native/tools/swig-config/network.i +++ b/native/tools/swig-config/network.i @@ -32,7 +32,6 @@ // %ignore cc::network::Downloader::createDataTask; %ignore cc::network::Downloader::createDownloadTask; -%ignore cc::network::Downloader::abort; %ignore cc::network::Downloader::setOnError; %ignore cc::network::Downloader::setOnSuccess; From f8ee62645acffd496e2fc135dda293873fcca3fb Mon Sep 17 00:00:00 2001 From: Cocos Robot <48829427+cocos-robot@users.noreply.github.com> Date: Thu, 20 Oct 2022 16:42:42 +0800 Subject: [PATCH 053/829] [ci skip][AUTO]: Automated code generating update: 0812e8562797b7ac0a429960cd3f0df6d36fe7ac (#13108) (#13112) Co-authored-by: cocos-robot --- native/cocos/bindings/auto/jsb_gfx_auto.cpp | 10 ------- .../cocos/bindings/auto/jsb_network_auto.cpp | 30 +++++++++++++++++++ 2 files changed, 30 insertions(+), 10 deletions(-) diff --git a/native/cocos/bindings/auto/jsb_gfx_auto.cpp b/native/cocos/bindings/auto/jsb_gfx_auto.cpp index 7a04e03f684..372b596efc9 100644 --- a/native/cocos/bindings/auto/jsb_gfx_auto.cpp +++ b/native/cocos/bindings/auto/jsb_gfx_auto.cpp @@ -21637,13 +21637,6 @@ se::Class* __jsb_cc_gfx_Buffer_class = nullptr; se::Object* __jsb_cc_gfx_Buffer_proto = nullptr; SE_DECLARE_FINALIZE_FUNC(js_delete_cc_gfx_Buffer) -static bool js_delete_cc_gfx_Buffer(se::State& s) -{ - // js_dtoroverride - return true; -} -SE_BIND_FINALIZE_FUNC(js_delete_cc_gfx_Buffer) - static bool js_cc_gfx_Buffer_computeHash_static(se::State& s) { // js_function @@ -21883,9 +21876,6 @@ bool js_register_cc_gfx_Buffer(se::Object* obj) { cls->defineStaticFunction("computeHash", _SE(js_cc_gfx_Buffer_computeHash_static)); - cls->defineFinalizeFunction(_SE(js_delete_cc_gfx_Buffer)); - - cls->install(); JSBClassType::registerClass(cls); diff --git a/native/cocos/bindings/auto/jsb_network_auto.cpp b/native/cocos/bindings/auto/jsb_network_auto.cpp index fdfffe6cece..36fa39a17c5 100644 --- a/native/cocos/bindings/auto/jsb_network_auto.cpp +++ b/native/cocos/bindings/auto/jsb_network_auto.cpp @@ -739,6 +739,35 @@ static bool js_cc_network_Downloader_setOnTaskProgress(se::State& s) } SE_BIND_FUNC(js_cc_network_Downloader_setOnTaskProgress) +static bool js_cc_network_Downloader_abort(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::network::Downloader *arg1 = (cc::network::Downloader *) NULL ; + std::shared_ptr< cc::network::DownloadTask const > *arg2 = 0 ; + std::shared_ptr< cc::network::DownloadTask const > temp2 ; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "Downloader_abort,2,SWIGTYPE_p_std__shared_ptrT_cc__network__DownloadTask_const_t"); + arg2 = &temp2; + + (arg1)->abort((std::shared_ptr< cc::network::DownloadTask const > const &)*arg2); + + + return true; +} +SE_BIND_FUNC(js_cc_network_Downloader_abort) + static bool js_cc_network_Downloader_onProgress_set(se::State& s) { CC_UNUSED bool ok = true; @@ -772,6 +801,7 @@ bool js_register_cc_network_Downloader(se::Object* obj) { cls->defineProperty("onProgress", nullptr, _SE(js_cc_network_Downloader_onProgress_set)); cls->defineFunction("setOnTaskProgress", _SE(js_cc_network_Downloader_setOnTaskProgress)); + cls->defineFunction("abort", _SE(js_cc_network_Downloader_abort)); From 2696288b3f301f1490cbc444f39da735a8cfb82c Mon Sep 17 00:00:00 2001 From: ycg <1670543365@qq.com> Date: Thu, 20 Oct 2022 16:50:29 +0800 Subject: [PATCH 054/829] Fix: Left mouse button swipe on WeChat PC is invalid (#13110) --- pal/input/minigame/touch-input.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pal/input/minigame/touch-input.ts b/pal/input/minigame/touch-input.ts index 5971cc5c502..66944b774fb 100644 --- a/pal/input/minigame/touch-input.ts +++ b/pal/input/minigame/touch-input.ts @@ -1,6 +1,7 @@ import { TouchCallback } from 'pal/input'; import { minigame } from 'pal/minigame'; import { screenAdapter } from 'pal/screen-adapter'; +import { systemInfo } from 'pal/system-info'; import { ALIPAY, VIVO } from 'internal:constants'; import { Size, Vec2 } from '../../../cocos/core/math'; import { EventTarget } from '../../../cocos/core/event'; @@ -8,12 +9,15 @@ import { EventTouch, Touch } from '../../../cocos/input/types'; import { touchManager } from '../touch-manager'; import { macro } from '../../../cocos/core/platform/macro'; import { InputEventType } from '../../../cocos/input/types/event-enum'; +import { Feature } from '../../system-info/enum-type'; export class TouchInputSource { private _eventTarget: EventTarget = new EventTarget(); constructor () { - this._registerEvent(); + if (systemInfo.hasFeature(Feature.INPUT_TOUCH)) { + this._registerEvent(); + } } private _registerEvent () { From e31abca22895defee007fc31f75d7771f3bb5c58 Mon Sep 17 00:00:00 2001 From: ycg <1670543365@qq.com> Date: Thu, 20 Oct 2022 17:59:37 +0800 Subject: [PATCH 055/829] Wrong mouse wheel direction on PCWechat (#13101) --- pal/input/minigame/mouse-input.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pal/input/minigame/mouse-input.ts b/pal/input/minigame/mouse-input.ts index a15a9499d56..52b177b40ba 100644 --- a/pal/input/minigame/mouse-input.ts +++ b/pal/input/minigame/mouse-input.ts @@ -77,7 +77,7 @@ export class MouseInputSource { eventMouse.movementX = location.x - this._preMousePos.x; eventMouse.movementY = this._preMousePos.y - location.y; - eventMouse.setScrollData(event.deltaX, event.deltaY); + eventMouse.setScrollData(event.deltaX, -event.deltaY); // update previous mouse position. this._preMousePos.set(location.x, location.y); this._eventTarget.emit(InputEventType.MOUSE_WHEEL, eventMouse); From 45fe6f6cf9a8d8395e93714abe633c48674196d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E6=A3=AE=E6=96=8C?= Date: Thu, 20 Oct 2022 18:11:45 +0800 Subject: [PATCH 056/829] temporary hide mobility prop of node editing (#13113) --- editor/inspector/contributions/node.js | 2 +- editor/inspector/contributions/utils.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/editor/inspector/contributions/node.js b/editor/inspector/contributions/node.js index 625b134ccfe..f99a17f1eb8 100644 --- a/editor/inspector/contributions/node.js +++ b/editor/inspector/contributions/node.js @@ -910,7 +910,7 @@ const Elements = { panel.$.nodePosition.render(panel.dump.position); panel.$.nodeRotation.render(panel.dump.rotation); panel.$.nodeScale.render(panel.dump.scale); - panel.$.nodeMobility.render(panel.dump.mobility); + // panel.$.nodeMobility.render(panel.dump.mobility); panel.$.nodeLayer.render(panel.dump.layer); // 查找需要渲染的 component 列表 diff --git a/editor/inspector/contributions/utils.js b/editor/inspector/contributions/utils.js index 97ab77479b1..463e569db74 100644 --- a/editor/inspector/contributions/utils.js +++ b/editor/inspector/contributions/utils.js @@ -137,7 +137,7 @@ function translationDump(dump, dumps, assets) { dump.position.path = 'position'; dump.rotation.path = 'rotation'; dump.scale.path = 'scale'; - dump.mobility.path = 'mobility'; + // dump.mobility.path = 'mobility'; dump.layer.path = 'layer'; if (dumps) { dump.active.values = dumps.map((dump) => dump.active.value); @@ -145,7 +145,7 @@ function translationDump(dump, dumps, assets) { dump.position.values = dumps.map((dump) => dump.position.value); dump.rotation.values = dumps.map((dump) => dump.rotation.value); dump.scale.values = dumps.map((dump) => dump.scale.value); - dump.mobility.values = dumps.map((dump) => dump.mobility.value); + // dump.mobility.values = dumps.map((dump) => dump.mobility.value); dump.layer.values = dumps.map((dump) => dump.layer.value); } for (let i = 0; i < dump.__comps__.length; i++) { From ea74a3a758b4709688bcd9f81109adfb38bc876c Mon Sep 17 00:00:00 2001 From: Zeqiang Li Date: Fri, 21 Oct 2022 09:41:20 +0800 Subject: [PATCH 057/829] bug fix (#13114) --- cocos/core/pipeline/shadow/shadow-stage.ts | 2 +- .../renderer/gfx-wgpu/WGPUCommandBuffer.cpp | 20 +- native/cocos/renderer/gfx-wgpu/WGPUDevice.cpp | 3 + .../renderer/gfx-wgpu/WGPUPipelineState.cpp | 2 +- native/cocos/renderer/gfx-wgpu/WGPUShader.cpp | 8 +- .../cocos/renderer/gfx-wgpu/WGPUTexture.cpp | 4 + native/cocos/renderer/gfx-wgpu/WGPUUtils.cpp | 278 ++++++++++++++++-- native/cocos/renderer/gfx-wgpu/WGPUUtils.h | 3 +- 8 files changed, 291 insertions(+), 29 deletions(-) diff --git a/cocos/core/pipeline/shadow/shadow-stage.ts b/cocos/core/pipeline/shadow/shadow-stage.ts index 48666dac6c5..dfc0f61003e 100644 --- a/cocos/core/pipeline/shadow/shadow-stage.ts +++ b/cocos/core/pipeline/shadow/shadow-stage.ts @@ -128,7 +128,7 @@ export class ShadowStage extends RenderStage { } else { const screenSpaceSignY = device.capabilities.screenSpaceSignY; this._renderArea.x = level % 2 * 0.5 * shadowMapSize.x; - if (screenSpaceSignY > 1.0) { + if (screenSpaceSignY > 0.0) { this._renderArea.y = (1 - Math.floor(level / 2)) * 0.5 * shadowMapSize.y; } else { this._renderArea.y = Math.floor(level / 2) * 0.5 * shadowMapSize.y; diff --git a/native/cocos/renderer/gfx-wgpu/WGPUCommandBuffer.cpp b/native/cocos/renderer/gfx-wgpu/WGPUCommandBuffer.cpp index 88a0b1a0183..627706a41a5 100644 --- a/native/cocos/renderer/gfx-wgpu/WGPUCommandBuffer.cpp +++ b/native/cocos/renderer/gfx-wgpu/WGPUCommandBuffer.cpp @@ -135,11 +135,15 @@ void CCWGPUCommandBuffer::beginRenderPass(RenderPass *renderPass, Framebuffer *f if (colorConfigs.empty()) { renderPassDesc.nextInChain = nullptr; renderPassDesc.label = "swapchain"; + auto *targetTex = swapchain->gpuSwapchainObject()->swapchainColor; + auto loadOp = WGPULoadOp_Clear; + loadOp = _attachmentSet.find(targetTex) == _attachmentSet.end() ? loadOp : WGPULoadOp_Load; + needPartialClear = !renderingFullScreen; WGPURenderPassColorAttachment color = { .view = swapchain->gpuSwapchainObject()->swapchainColor->gpuTextureObject()->selfView, - .resolveTarget = nullptr, // TODO_Zeqiang: wgpu offscr msaa - .loadOp = WGPULoadOp_Clear, // toWGPULoadOp(colorConfigs[0].loadOp), - .storeOp = WGPUStoreOp_Discard, // toWGPUStoreOp(colorConfigs[0].storeOp), + .resolveTarget = nullptr, // TODO_Zeqiang: wgpu offscr msaa + .loadOp = loadOp, + .storeOp = toWGPUStoreOp(colorConfigs[0].storeOp), .clearValue = WGPUColor{0.2, 0.2, 0.2, 1.0}, }; colorAttachments.emplace_back(color); @@ -151,6 +155,7 @@ void CCWGPUCommandBuffer::beginRenderPass(RenderPass *renderPass, Framebuffer *f WGPURenderPassColorAttachment *colorAttchments = ccnew WGPURenderPassColorAttachment[colorConfigs.size()]; auto loadOp = toWGPULoadOp(colorConfigs[i].loadOp); if (!renderingFullScreen) { + needPartialClear = loadOp == WGPULoadOp_Clear; loadOp = _attachmentSet.find(textures[i]) == _attachmentSet.end() ? loadOp : WGPULoadOp_Load; } WGPURenderPassColorAttachment color = { @@ -202,8 +207,13 @@ void CCWGPUCommandBuffer::beginRenderPass(RenderPass *renderPass, Framebuffer *f setScissor(renderArea); if (!renderingFullScreen && needPartialClear) { - for (size_t i = 0; i < textures.size(); ++i) { - clearRect(this, textures[i], renderArea.x, renderArea.y, renderArea.width, renderArea.height, colors[i]); + if (textures.size()) { + for (size_t i = 0; i < textures.size(); ++i) { + clearRect(this, textures[i], renderArea, colors[i]); + } + } else { + auto *swapchainTex = swapchain->gpuSwapchainObject()->swapchainColor; + clearRect(this, swapchainTex, renderArea, colors[0]); } } diff --git a/native/cocos/renderer/gfx-wgpu/WGPUDevice.cpp b/native/cocos/renderer/gfx-wgpu/WGPUDevice.cpp index 7d42799fd54..f0fc0d43d29 100644 --- a/native/cocos/renderer/gfx-wgpu/WGPUDevice.cpp +++ b/native/cocos/renderer/gfx-wgpu/WGPUDevice.cpp @@ -352,6 +352,9 @@ void CCWGPUDevice::copyBuffersToTexture(const uint8_t *const *buffers, Texture * } } } + if (hasFlag(ccTexture->getInfo().flags, TextureFlags::GEN_MIPMAP)) { + genMipMap(ccTexture, 1, ccTexture->getInfo().levelCount - 1, l, _cmdBuff); + } } } } diff --git a/native/cocos/renderer/gfx-wgpu/WGPUPipelineState.cpp b/native/cocos/renderer/gfx-wgpu/WGPUPipelineState.cpp index ef40d51c5d9..8f3466cc33f 100644 --- a/native/cocos/renderer/gfx-wgpu/WGPUPipelineState.cpp +++ b/native/cocos/renderer/gfx-wgpu/WGPUPipelineState.cpp @@ -335,7 +335,7 @@ void CCWGPUPipelineState::prepare(const ccstd::set &setInUse) { .dstFactor = toWGPUBlendFactor(alphaBO == BlendOp::MAX ? BlendFactor::ONE : _blendState.targets[targetIndex].blendDstAlpha), }; // only textureSampleType with float can be blended. - colorTargetStates[i].blend = textureSampleTypeTrait(colors[i].format) == WGPUTextureSampleType_Float ? &blendState[i] : nullptr; + colorTargetStates[i].blend = (_blendState.targets[targetIndex].blend && (textureSampleTypeTrait(colors[i].format) == WGPUTextureSampleType_Float)) ? &blendState[i] : nullptr; colorTargetStates[i].writeMask = toWGPUColorWriteMask(_blendState.targets[targetIndex].blendColorMask); if (targetIndex < _blendState.targets.size() - 1) { ++targetIndex; diff --git a/native/cocos/renderer/gfx-wgpu/WGPUShader.cpp b/native/cocos/renderer/gfx-wgpu/WGPUShader.cpp index 43d7cf09c02..596d80d45bb 100644 --- a/native/cocos/renderer/gfx-wgpu/WGPUShader.cpp +++ b/native/cocos/renderer/gfx-wgpu/WGPUShader.cpp @@ -28,8 +28,8 @@ #include "WGPUDevice.h" #include "WGPUObject.h" #include "WGPUUtils.h" -#define USE_NATRIVE_SPIRV 0 -#if USE_NATRIVE_SPIRV +#define USE_NATIVE_SPIRV 0 +#if USE_NATIVE_SPIRV #include "gfx-base/SPIRVUtils.h" #ifndef SPIRV_CROSS_EXCEPTIONS_TO_ASSERTIONS #define SPIRV_CROSS_EXCEPTIONS_TO_ASSERTIONS @@ -89,7 +89,7 @@ void CCWGPUShader::initialize(const ShaderInfo &info, const std::vectorwgpuTexture = wgpuDeviceCreateTexture(CCWGPUDevice::getInstance()->gpuDeviceObject()->wgpuDevice, &descriptor); CCWGPUDevice::getInstance()->getMemoryStatus().textureSize += _size; diff --git a/native/cocos/renderer/gfx-wgpu/WGPUUtils.cpp b/native/cocos/renderer/gfx-wgpu/WGPUUtils.cpp index 6a49e36cd80..f4bd4f63b8f 100644 --- a/native/cocos/renderer/gfx-wgpu/WGPUUtils.cpp +++ b/native/cocos/renderer/gfx-wgpu/WGPUUtils.cpp @@ -57,15 +57,28 @@ struct ClearPassData { WGPUPipelineLayout pipelineLayout = wgpuDefaultHandle; WGPURenderPipeline pipeline = wgpuDefaultHandle; }; + +struct MipmapPassData { + WGPUShaderModule vertShader = wgpuDefaultHandle; + WGPUShaderModule fragShader = wgpuDefaultHandle; + WGPUSampler sampler = wgpuDefaultHandle; + WGPUBindGroupLayout bindGroupLayout = wgpuDefaultHandle; + WGPUPipelineLayout pipelineLayout = wgpuDefaultHandle; + WGPURenderPipeline pipeline = wgpuDefaultHandle; +}; + +// no need to release +thread_local MipmapPassData mipmapData; thread_local ClearPassData clearPassData; } // namespace -void clearRect(CommandBuffer* cmdBuff, Texture* texture, uint32_t x, uint32_t y, uint32_t w, uint32_t h, const Color& color) { +#pragma region FIXED_PIPELINE +void clearRect(CommandBuffer* cmdBuff, Texture* texture, const Rect& renderArea, const Color& color) { auto wgpuDevice = CCWGPUDevice::getInstance()->gpuDeviceObject()->wgpuDevice; auto* ccTexture = static_cast(texture); auto format = toWGPUTextureFormat(ccTexture->getFormat()); auto dimension = toWGPUTextureDimension(ccTexture->getTextureType()); - auto* wgpuTexture = ccTexture->gpuTextureObject()->wgpuTexture; + auto wgpuTextureView = ccTexture->gpuTextureObject()->selfView; if (!clearPassData.vertShader) { const char* clearQuadVert = R"( @@ -95,11 +108,11 @@ struct ClearColor { color: vec4, } -@group(0) @binding(0) var clearColor : ClearColor; +@group(0) @binding(0) var clearColor : ClearColor; @fragment -fn frag_main(@location(0) fragUV : vec2) -> @location(0) vec4 { - return clearColor; +fn frag_main() -> @location(0) vec4 { + return clearColor.color; } )"; @@ -183,18 +196,11 @@ fn frag_main(@location(0) fragUV : vec2) -> @location(0) vec4 { if (!cmdBuffCommandEncoder) { commandEncoder = wgpuDeviceCreateCommandEncoder(wgpuDevice, nullptr); } - WGPUTextureViewDescriptor desc; - desc.format = format; - desc.dimension = WGPUTextureViewDimension_2D; - desc.baseMipLevel = 0; - desc.mipLevelCount = 1; - desc.baseArrayLayer = 0; - desc.arrayLayerCount = 1; - desc.aspect = WGPUTextureAspect_All; - auto dstView = wgpuTextureCreateView(wgpuTexture, &desc); + + auto dstView = wgpuTextureView; WGPUBufferDescriptor bufferDesc; - bufferDesc.usage = WGPUBufferUsage_Vertex; + bufferDesc.usage = WGPUBufferUsage_Uniform; bufferDesc.size = 16; bufferDesc.mappedAtCreation = true; auto uniformBuffer = wgpuDeviceCreateBuffer(wgpuDevice, &bufferDesc); @@ -209,6 +215,8 @@ fn frag_main(@location(0) fragUV : vec2) -> @location(0) vec4 { entry.binding = 0; entry.sampler = wgpuDefaultHandle; entry.buffer = uniformBuffer; + entry.offset = 0; + entry.size = 16; entry.textureView = wgpuDefaultHandle; WGPUBindGroupDescriptor bindgroupDesc; @@ -222,7 +230,7 @@ fn frag_main(@location(0) fragUV : vec2) -> @location(0) vec4 { colorAttachment.resolveTarget = wgpuDefaultHandle; colorAttachment.loadOp = WGPULoadOp_Load; colorAttachment.storeOp = WGPUStoreOp_Store; - // colorAttachment.clearValue = {0.88, 0.88, 0.88, 1.0}; + colorAttachment.clearValue = {0.88, 0.88, 0.88, 1.0}; WGPURenderPassDescriptor rpDesc; rpDesc.nextInChain = nullptr; @@ -237,11 +245,12 @@ fn frag_main(@location(0) fragUV : vec2) -> @location(0) vec4 { wgpuRenderPassEncoderSetPipeline(renderPassEncoder, clearPassData.pipeline); wgpuRenderPassEncoderSetBindGroup(renderPassEncoder, 0, bindGroup, 0, nullptr); + wgpuRenderPassEncoderSetViewport(renderPassEncoder, renderArea.x, renderArea.y, renderArea.width, renderArea.height, 0.0F, 1.0F); + wgpuRenderPassEncoderSetScissorRect(renderPassEncoder, renderArea.x, renderArea.y, renderArea.width, renderArea.height); wgpuRenderPassEncoderDraw(renderPassEncoder, 6, 1, 0, 0); wgpuRenderPassEncoderEnd(renderPassEncoder); wgpuRenderPassEncoderRelease(renderPassEncoder); wgpuBindGroupRelease(bindGroup); - wgpuTextureViewRelease(dstView); wgpuBufferRelease(uniformBuffer); if (!cmdBuffCommandEncoder) { @@ -252,4 +261,239 @@ fn frag_main(@location(0) fragUV : vec2) -> @location(0) vec4 { } } +void genMipMap(Texture* texture, uint8_t fromLevel, uint8_t levelCount, uint32_t baseLayer, CommandBuffer* cmdBuff) { + auto wgpuDevice = CCWGPUDevice::getInstance()->gpuDeviceObject()->wgpuDevice; + auto* ccTexture = static_cast(texture); + auto format = toWGPUTextureFormat(ccTexture->getFormat()); + auto dimension = toWGPUTextureDimension(ccTexture->getTextureType()); + auto* wgpuTexture = ccTexture->gpuTextureObject()->wgpuTexture; + + if (!mipmapData.vertShader) { + // WGPUBufferDescriptor bufferDesc; + // bufferDesc.usage = WGPUBufferUsage_Vertex; + // bufferDesc.size = 120; + // bufferDesc.mappedAtCreation = true; + // mipmapData.vertexBuffer = wgpuDeviceCreateBuffer(wgpuDevice, &bufferDesc); + + // auto* mappedBuffer = wgpuBufferGetMappedRange(mipmapData.vertexBuffer, 0, 120); + // memcpy(mappedBuffer, quadVert, 120); + // wgpuBufferUnmap(mipmapData.vertexBuffer); + + // https://github.com/austinEng/webgpu-samples/blob/main/src/shaders/fullscreenTexturedQuad.wgsl + const char* textureQuadVert = R"( +struct VertexOutput { + @builtin(position) Position : vec4, + @location(0) fragUV : vec2, +} +@vertex +fn vert_main(@builtin(vertex_index) VertexIndex : u32) -> VertexOutput { + var pos = array, 6>( + vec2( 1.0, 1.0), + vec2( 1.0, -1.0), + vec2(-1.0, -1.0), + vec2( 1.0, 1.0), + vec2(-1.0, -1.0), + vec2(-1.0, 1.0) + ); + var uv = array, 6>( + vec2(1.0, 0.0), + vec2(1.0, 1.0), + vec2(0.0, 1.0), + vec2(1.0, 0.0), + vec2(0.0, 1.0), + vec2(0.0, 0.0) + ); + var output : VertexOutput; + output.Position = vec4(pos[VertexIndex], 0.0, 1.0); + output.fragUV = uv[VertexIndex]; + return output; +} + )"; + + const char* textureQuadFrag = R"( +@group(0) @binding(0) var mySampler : sampler; +@group(0) @binding(1) var myTexture : texture_2d; +@fragment +fn frag_main(@location(0) fragUV : vec2) -> @location(0) vec4 { + return textureSample(myTexture, mySampler, fragUV); +} + )"; + + WGPUSamplerDescriptor samplerDesc; + samplerDesc.label = "filterSampler"; + samplerDesc.addressModeU = WGPUAddressMode_MirrorRepeat; + samplerDesc.addressModeV = WGPUAddressMode_MirrorRepeat; + samplerDesc.addressModeW = WGPUAddressMode_MirrorRepeat; + samplerDesc.magFilter = WGPUFilterMode_Linear; + samplerDesc.minFilter = WGPUFilterMode_Linear; + samplerDesc.mipmapFilter = WGPUFilterMode_Linear; + samplerDesc.lodMinClamp = 0.0; + samplerDesc.lodMaxClamp = 32.0; + samplerDesc.compare = WGPUCompareFunction_Undefined; + samplerDesc.maxAnisotropy = 1; + mipmapData.sampler = wgpuDeviceCreateSampler(wgpuDevice, &samplerDesc); + + WGPUShaderModuleWGSLDescriptor wgslShaderDescVert; + wgslShaderDescVert.source = textureQuadVert; + wgslShaderDescVert.chain.sType = WGPUSType_ShaderModuleWGSLDescriptor; + WGPUShaderModuleDescriptor shaderDescVert; + shaderDescVert.nextInChain = reinterpret_cast(&wgslShaderDescVert); + shaderDescVert.label = "textureQuadVert"; + mipmapData.vertShader = wgpuDeviceCreateShaderModule(wgpuDevice, &shaderDescVert); + + WGPUShaderModuleWGSLDescriptor wgslShaderDescFrag; + wgslShaderDescFrag.source = textureQuadFrag; + wgslShaderDescFrag.chain.sType = WGPUSType_ShaderModuleWGSLDescriptor; + WGPUShaderModuleDescriptor shaderDescFrag; + shaderDescFrag.nextInChain = reinterpret_cast(&wgslShaderDescFrag); + shaderDescFrag.label = "textureQuadFrag"; + mipmapData.fragShader = wgpuDeviceCreateShaderModule(wgpuDevice, &shaderDescFrag); + + WGPUBindGroupLayoutEntry samplerEntry; + samplerEntry.binding = 0; + samplerEntry.visibility = WGPUShaderStage_Fragment; + samplerEntry.sampler.type = WGPUSamplerBindingType_Filtering; + samplerEntry.buffer.type = WGPUBufferBindingType_Undefined; + samplerEntry.texture.sampleType = WGPUTextureSampleType_Undefined; + samplerEntry.storageTexture.access = WGPUStorageTextureAccess_Undefined; + + WGPUBindGroupLayoutEntry textureEntry; + textureEntry.binding = 1; + textureEntry.visibility = WGPUShaderStage_Fragment; + textureEntry.texture.sampleType = textureSampleTypeTrait(ccTexture->getFormat()); + textureEntry.texture.viewDimension = WGPUTextureViewDimension_2D; + textureEntry.texture.multisampled = false; + textureEntry.buffer.type = WGPUBufferBindingType_Undefined; + textureEntry.sampler.type = WGPUSamplerBindingType_Undefined; + textureEntry.storageTexture.access = WGPUStorageTextureAccess_Undefined; + WGPUBindGroupLayoutEntry entries[2] = {samplerEntry, textureEntry}; + + WGPUBindGroupLayoutDescriptor bgLayoutDesc; + bgLayoutDesc.label = "fullscreenTexturedQuadBGLayout"; + bgLayoutDesc.entryCount = 2; + bgLayoutDesc.entries = entries; + mipmapData.bindGroupLayout = wgpuDeviceCreateBindGroupLayout(wgpuDevice, &bgLayoutDesc); + + WGPUPipelineLayoutDescriptor pipelineLayoutDesc; + pipelineLayoutDesc.label = "fullscreenTexturedQuadPipelineLayout"; + pipelineLayoutDesc.bindGroupLayoutCount = 1; + pipelineLayoutDesc.bindGroupLayouts = &mipmapData.bindGroupLayout; + mipmapData.pipelineLayout = wgpuDeviceCreatePipelineLayout(wgpuDevice, &pipelineLayoutDesc); + + WGPUVertexState vertexState; + vertexState.module = mipmapData.vertShader; + vertexState.entryPoint = "vert_main"; + + WGPUPrimitiveState primitiveState; + primitiveState.topology = WGPUPrimitiveTopology_TriangleList; + primitiveState.stripIndexFormat = WGPUIndexFormat_Undefined; + primitiveState.frontFace = WGPUFrontFace_CCW; + primitiveState.cullMode = WGPUCullMode_None; + + WGPUColorTargetState colorState; + colorState.format = format; + colorState.writeMask = WGPUColorWriteMask_All; + + WGPUFragmentState fragState; + fragState.module = mipmapData.fragShader; + fragState.entryPoint = "frag_main"; + fragState.targetCount = 1; + fragState.targets = &colorState; + + WGPUMultisampleState multisample; + multisample.count = 1; + multisample.alphaToCoverageEnabled = false; + multisample.mask = 0xFFFFFFFF; + + WGPURenderPipelineDescriptor pipelineDesc; + pipelineDesc.label = "fullscreenTexturedQuadPipeline"; + pipelineDesc.layout = mipmapData.pipelineLayout; + pipelineDesc.vertex = vertexState; + pipelineDesc.primitive = primitiveState; + pipelineDesc.fragment = &fragState; + pipelineDesc.depthStencil = nullptr; + pipelineDesc.multisample = multisample; + mipmapData.pipeline = wgpuDeviceCreateRenderPipeline(wgpuDevice, &pipelineDesc); + } + + WGPUTextureViewDescriptor desc; + desc.format = format; + desc.dimension = WGPUTextureViewDimension_2D; + desc.baseMipLevel = fromLevel; + desc.mipLevelCount = 1; + desc.baseArrayLayer = baseLayer; + desc.arrayLayerCount = 1; + desc.aspect = WGPUTextureAspect_All; + + CC_ASSERT(i > 0); + auto cmdBuffCommandEncoder = static_cast(cmdBuff)->gpuCommandBufferObject()->wgpuCommandEncoder; + auto commandEncoder = cmdBuffCommandEncoder; + if (!cmdBuffCommandEncoder) { + commandEncoder = wgpuDeviceCreateCommandEncoder(wgpuDevice, nullptr); + } + + for (uint8_t i = fromLevel; i < fromLevel + levelCount; ++i) { + desc.baseMipLevel = i - 1; + auto srcView = wgpuTextureCreateView(wgpuTexture, &desc); + desc.baseMipLevel = i; + desc.baseArrayLayer = baseLayer; + desc.arrayLayerCount = 1; + auto dstView = wgpuTextureCreateView(wgpuTexture, &desc); + + WGPUBindGroupEntry entries[2]; + entries[0].nextInChain = nullptr; + entries[0].binding = 0; + entries[0].sampler = mipmapData.sampler; + entries[0].buffer = wgpuDefaultHandle; + entries[0].textureView = wgpuDefaultHandle; + + entries[1].nextInChain = nullptr; + entries[1].binding = 1; + entries[1].textureView = srcView; + entries[1].buffer = wgpuDefaultHandle; + entries[1].sampler = wgpuDefaultHandle; + + WGPUBindGroupDescriptor bindgroupDesc; + bindgroupDesc.layout = mipmapData.bindGroupLayout; + bindgroupDesc.entryCount = 2; + bindgroupDesc.entries = entries; + auto bindGroup = wgpuDeviceCreateBindGroup(wgpuDevice, &bindgroupDesc); + + WGPURenderPassColorAttachment colorAttachment; + colorAttachment.view = dstView; + colorAttachment.resolveTarget = wgpuDefaultHandle; + colorAttachment.loadOp = WGPULoadOp_Clear; + colorAttachment.storeOp = WGPUStoreOp_Store; + colorAttachment.clearValue = {0.88, 0.88, 0.88, 1.0}; + + WGPURenderPassDescriptor rpDesc; + rpDesc.nextInChain = nullptr; + rpDesc.label = nullptr; + rpDesc.colorAttachmentCount = 1; + rpDesc.colorAttachments = &colorAttachment; + rpDesc.depthStencilAttachment = nullptr; + rpDesc.occlusionQuerySet = nullptr; + rpDesc.timestampWriteCount = 0; + rpDesc.timestampWrites = nullptr; + auto renderPassEncoder = wgpuCommandEncoderBeginRenderPass(commandEncoder, &rpDesc); + + wgpuRenderPassEncoderSetPipeline(renderPassEncoder, mipmapData.pipeline); + wgpuRenderPassEncoderSetBindGroup(renderPassEncoder, 0, bindGroup, 0, nullptr); + wgpuRenderPassEncoderDraw(renderPassEncoder, 6, 1, 0, 0); + wgpuRenderPassEncoderEnd(renderPassEncoder); + wgpuRenderPassEncoderRelease(renderPassEncoder); + wgpuBindGroupRelease(bindGroup); + wgpuTextureViewRelease(srcView); + wgpuTextureViewRelease(dstView); + } + + if (!cmdBuffCommandEncoder) { + auto commandBuffer = wgpuCommandEncoderFinish(commandEncoder, nullptr); + wgpuQueueSubmit(CCWGPUDevice::getInstance()->gpuDeviceObject()->wgpuQueue, 1, &commandBuffer); + wgpuCommandEncoderRelease(commandEncoder); + wgpuCommandBufferRelease(commandBuffer); + } +} +#pragma endregion FIXED_PIPELINE + } // namespace cc::gfx diff --git a/native/cocos/renderer/gfx-wgpu/WGPUUtils.h b/native/cocos/renderer/gfx-wgpu/WGPUUtils.h index d53ba3fab7e..3207afcc49c 100644 --- a/native/cocos/renderer/gfx-wgpu/WGPUUtils.h +++ b/native/cocos/renderer/gfx-wgpu/WGPUUtils.h @@ -633,7 +633,8 @@ void createPipelineLayoutFallback(const ccstd::vector& descripto class Texture; class CommandBuffer; -void clearRect(CommandBuffer* cmdBuffer, Texture* texture, uint32_t x, uint32_t y, uint32_t w, uint32_t h, const Color& color); +void clearRect(CommandBuffer* cmdBuffer, Texture* texture, const Rect& renderArea, const Color& color); +void genMipMap(Texture* texture, uint8_t fromLevel, uint8_t levelCount, uint32_t baseLayer, CommandBuffer* cmdBuffer); static constexpr WGPUColor defaultClearColor{0.2, 0.2, 0.2, 1.0}; From 55fc0319d6600c4bdd4225f3f116c375eabc9f21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=90=89=E6=9E=97?= <798080536@qq.com> Date: Fri, 21 Oct 2022 10:17:09 +0800 Subject: [PATCH 058/829] export light probe symbols (#13116) --- cc.config.json | 4 +++- exports/light-probe.ts | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/cc.config.json b/cc.config.json index 0b4acf4c0d4..a5adbd6b43c 100644 --- a/cc.config.json +++ b/cc.config.json @@ -131,9 +131,11 @@ "modules": ["audio"] }, "video": { - "light-probe": { "modules": [ "light-probe" ] }, "modules": ["video"] }, + "light-probe": { + "modules": [ "light-probe" ] + }, "terrain": { "modules": ["terrain"], "dependentAssets": ["1d08ef62-a503-4ce2-8b9a-46c90873f7d3"] diff --git a/exports/light-probe.ts b/exports/light-probe.ts index 624e3e27da4..2ae77deb210 100644 --- a/exports/light-probe.ts +++ b/exports/light-probe.ts @@ -1 +1 @@ -import * as gi from '../cocos/gi/light-probe'; +export * from '../cocos/gi/light-probe'; From b88622bd08a516a07ca2a2619777e130a58e1a91 Mon Sep 17 00:00:00 2001 From: Zeqiang Li Date: Fri, 21 Oct 2022 15:43:20 +0800 Subject: [PATCH 059/829] wgpu particle draw indirect support (#13117) * bug fix * draw indirect support * swapchain typo fix --- cocos/core/gfx/webgpu/webgpu-define.ts | 32 ++++--- native/cocos/renderer/gfx-wgpu/WGPUBuffer.cpp | 20 ++-- .../renderer/gfx-wgpu/WGPUCommandBuffer.cpp | 92 ++++++++++++------- .../renderer/gfx-wgpu/WGPUCommandBuffer.h | 4 +- native/cocos/renderer/gfx-wgpu/WGPUExports.h | 1 + .../cocos/renderer/gfx-wgpu/WGPUSwapchain.cpp | 2 +- 6 files changed, 96 insertions(+), 55 deletions(-) diff --git a/cocos/core/gfx/webgpu/webgpu-define.ts b/cocos/core/gfx/webgpu/webgpu-define.ts index be6f5ca7e50..66bf94b79f4 100644 --- a/cocos/core/gfx/webgpu/webgpu-define.ts +++ b/cocos/core/gfx/webgpu/webgpu-define.ts @@ -33,7 +33,7 @@ import { Texture, CommandBuffer, DescriptorSet, Device, InputAssembler, Buffer, Shader } from './override'; import { - DeviceInfo, BufferTextureCopy, ShaderInfo, ShaderStageFlagBit, TextureViewInfo, TextureInfo, DrawInfo, BufferViewInfo, BufferInfo, + DeviceInfo, BufferTextureCopy, ShaderInfo, ShaderStageFlagBit, TextureViewInfo, TextureInfo, DrawInfo, BufferViewInfo, BufferInfo, BufferUsageBit, IndirectBuffer, } from '../base/define'; WEBGPU && promiseForWebGPUInstantiation.then(() => { @@ -85,22 +85,30 @@ WEBGPU && promiseForWebGPUInstantiation.then(() => { const oldUpdateBuffer = Buffer.prototype.update; Buffer.prototype.update = function (data: BufferSource, size?: number) { - const updateSize = size === undefined ? data.byteLength : size; - if ('buffer' in data) { - oldUpdateBuffer.call(this, new Uint8Array(data.buffer, data.byteOffset, data.byteLength), updateSize); + if (this.usage & BufferUsageBit.INDIRECT) { + this.updateIndirect(((data as unknown) as IndirectBuffer).drawInfos); } else { - oldUpdateBuffer.call(this, new Uint8Array(data), updateSize); + const updateSize = size === undefined ? data.byteLength : size; + if ('buffer' in data) { + oldUpdateBuffer.call(this, new Uint8Array(data.buffer, data.byteOffset, data.byteLength), updateSize); + } else { + oldUpdateBuffer.call(this, new Uint8Array(data), updateSize); + } } + }; const oldCmdUpdateBuffer = CommandBuffer.prototype.updateBuffer; CommandBuffer.prototype.updateBuffer = function (buffer: typeof Buffer, data: BufferSource, size?: number) { - const updateSize = size === undefined ? data.byteLength : size; - - if ('buffer' in data) { - oldCmdUpdateBuffer.call(this, buffer, new Uint8Array(data.buffer, data.byteOffset, data.byteLength), updateSize); + if (this.usage & BufferUsageBit.INDIRECT) { + this.updateIndirect(buffer, ((data as unknown) as IndirectBuffer).drawInfos); } else { - oldCmdUpdateBuffer.call(this, buffer, new Uint8Array(data), updateSize); + const updateSize = size === undefined ? data.byteLength : size; + if ('buffer' in data) { + oldCmdUpdateBuffer.call(this, buffer, new Uint8Array(data.buffer, data.byteOffset, data.byteLength), updateSize); + } else { + oldCmdUpdateBuffer.call(this, buffer, new Uint8Array(data), updateSize); + } } }; @@ -200,7 +208,7 @@ WEBGPU && promiseForWebGPUInstantiation.then(() => { // let textureName = str.match(/(?<=uniform(.*?)sampler\w* )(\w+)(?=;)/g)!.toString(); const textureNameRegExpStr = '(?<=uniform(.*?)sampler\\w* )(\\w+)(?=;)'; let textureName = (new RegExp(textureNameRegExpStr, 'g')).exec(str)![0]; - + let samplerStr = str.replace(textureName, `${textureName}Sampler`); // let samplerFunc = samplerStr.match(/(?<=uniform(.*?))sampler(\w*)/g)!.toString(); @@ -221,7 +229,7 @@ WEBGPU && promiseForWebGPUInstantiation.then(() => { const samplerBindingStr = samplerReg.exec(str)![0]; const samplerBinding = Number(samplerBindingStr) + 16; samplerStr = samplerStr.replace(samplerReg, samplerBinding.toString()); - + const textureReg = new RegExp('(?<=uniform(.*?))(sampler)(?=\\w*)', 'g'); const textureStr = str.replace(textureReg, 'texture'); code = code.replace(str, `${textureStr}\n${samplerStr}`); diff --git a/native/cocos/renderer/gfx-wgpu/WGPUBuffer.cpp b/native/cocos/renderer/gfx-wgpu/WGPUBuffer.cpp index 5a6d5f4d1ec..a65e3945d28 100644 --- a/native/cocos/renderer/gfx-wgpu/WGPUBuffer.cpp +++ b/native/cocos/renderer/gfx-wgpu/WGPUBuffer.cpp @@ -166,11 +166,17 @@ void CCWGPUBuffer::update(const void *buffer, uint32_t size) { // wgpuCommandEncoderRelease(cmdEncoder); // wgpuCommandBufferRelease(commandBuffer); - size_t offset = _isBufferView ? _offset : 0; - uint32_t alignedSize = ceil(size / 4.0) * 4; - size_t buffSize = alignedSize; - wgpuQueueWriteBuffer(CCWGPUDevice::getInstance()->gpuDeviceObject()->wgpuQueue, _gpuBufferObject->wgpuBuffer, offset, buffer, buffSize); - // wgpuBufferUnmap(_gpuBufferObject->wgpuBuffer); + if (hasFlag(_usage, BufferUsageBit::INDIRECT)) { + size_t drawInfoCount = size / sizeof(DrawInfo); + const auto *drawInfo = static_cast(buffer); + size_t offset = _isBufferView ? _offset : 0; + update(drawInfo, drawInfoCount); + } else { + size_t offset = _isBufferView ? _offset : 0; + uint32_t alignedSize = ceil(size / 4.0) * 4; + size_t buffSize = alignedSize; + wgpuQueueWriteBuffer(CCWGPUDevice::getInstance()->gpuDeviceObject()->wgpuQueue, _gpuBufferObject->wgpuBuffer, offset, buffer, buffSize); + } } void CCWGPUBuffer::update(const DrawInfoList &drawInfos) { @@ -184,7 +190,7 @@ void CCWGPUBuffer::update(const DrawInfoList &drawInfos) { auto &indexedIndirectObjs = _gpuBufferObject->indexedIndirectObjs; for (size_t i = 0; i < drawInfoCount; i++) { indexedIndirectObjs[i].indexCount = drawInfos[i].indexCount; - indexedIndirectObjs[i].instanceCount = drawInfos[i].instanceCount /* ? drawInfos[i]->instanceCoun : 1 */; + indexedIndirectObjs[i].instanceCount = drawInfos[i].instanceCount ? drawInfos[i].instanceCount : 1; indexedIndirectObjs[i].firstIndex = drawInfos[i].firstIndex; indexedIndirectObjs[i].baseVertex = drawInfos[i].vertexOffset; indexedIndirectObjs[i].firstInstance = 0; // check definition of indexedIndirectObj; @@ -195,7 +201,7 @@ void CCWGPUBuffer::update(const DrawInfoList &drawInfos) { auto &indirectObjs = _gpuBufferObject->indirectObjs; for (size_t i = 0; i < drawInfoCount; i++) { indirectObjs[i].vertexCount = drawInfos[i].vertexCount; - indirectObjs[i].instanceCount = drawInfos[i].instanceCount; + indirectObjs[i].instanceCount = drawInfos[i].instanceCount ? drawInfos[i].instanceCount : 1; indirectObjs[i].firstIndex = drawInfos[i].firstIndex; indirectObjs[i].firstInstance = 0; // check definition of indirectObj; } diff --git a/native/cocos/renderer/gfx-wgpu/WGPUCommandBuffer.cpp b/native/cocos/renderer/gfx-wgpu/WGPUCommandBuffer.cpp index 627706a41a5..c469d6bda48 100644 --- a/native/cocos/renderer/gfx-wgpu/WGPUCommandBuffer.cpp +++ b/native/cocos/renderer/gfx-wgpu/WGPUCommandBuffer.cpp @@ -519,18 +519,11 @@ void CCWGPUCommandBuffer::draw(const DrawInfo &info) { if (info.indexCount) { // indexedIndirect not supported, emsdk 2.0.26 uint32_t drawInfoCount = indirectBuffer->getCount(); - // for (size_t i = 0; i < drawInfoCount; i++) { - // wgpuRenderPassEncoderDrawIndexedIndirect(_gpuCommandBufferObj->wgpuRenderPassEncoder, - // indirectBuffer->gpuBufferObject()->wgpuBuffer, - // indirectBuffer->getOffset() + i * sizeof(CCWGPUDrawIndexedIndirectObject)); - // } - - wgpuRenderPassEncoderDrawIndexed(_gpuCommandBufferObj->wgpuRenderPassEncoder, - info.indexCount, - info.instanceCount > 1 ? info.instanceCount : 1, - info.firstIndex, - info.vertexOffset, - info.firstInstance); + for (size_t i = 0; i < drawInfoCount; i++) { + wgpuRenderPassEncoderDrawIndexedIndirect(_gpuCommandBufferObj->wgpuRenderPassEncoder, + indirectBuffer->gpuBufferObject()->wgpuBuffer, + indirectBuffer->getOffset() + i * sizeof(CCWGPUDrawIndexedIndirectObject)); + } } else { uint32_t drawInfoCount = indirectBuffer->getCount(); for (size_t i = 0; i < drawInfoCount; i++) { @@ -578,33 +571,30 @@ void CCWGPUCommandBuffer::draw(const DrawInfo &info) { } } -void CCWGPUCommandBuffer::updateBuffer(Buffer *buff, const void *data, uint32_t size) { - uint32_t alignedSize = ceil(size / 4.0) * 4; - size_t buffSize = alignedSize; - +namespace { +void updatBuffer(CCWGPUCommandBuffer *cmdBuffer, CCWGPUBuffer *buffer, const void *data, uint32_t buffSize) { WGPUBufferDescriptor descriptor = { .nextInChain = nullptr, .label = nullptr, .usage = WGPUBufferUsage_MapWrite | WGPUBufferUsage_CopySrc, - .size = alignedSize, + .size = buffSize, .mappedAtCreation = true, }; - WGPUBuffer stagingBuffer = wgpuDeviceCreateBuffer(CCWGPUDevice::getInstance()->gpuDeviceObject()->wgpuDevice, &descriptor); - auto *mappedBuffer = wgpuBufferGetMappedRange(stagingBuffer, 0, alignedSize); - memcpy(mappedBuffer, data, size); + WGPUBuffer stagingBuffer = wgpuDeviceCreateBuffer(CCWGPUDevice::getInstance()->gpuDeviceObject()->wgpuDevice, &descriptor); + auto *mappedBuffer = wgpuBufferGetMappedRange(stagingBuffer, 0, buffSize); + memcpy(mappedBuffer, data, buffSize); wgpuBufferUnmap(static_cast(stagingBuffer)); - auto *ccBuffer = static_cast(buff); - size_t offset = ccBuffer->getOffset(); - - CCWGPUBufferObject *bufferObj = ccBuffer->gpuBufferObject(); + auto *bufferObj = buffer->gpuBufferObject(); + auto *commandBufferObj = cmdBuffer->gpuCommandBufferObject(); + size_t offset = buffer->isBufferView() ? buffer->getOffset() : 0; - if (_gpuCommandBufferObj->wgpuCommandEncoder) { - wgpuCommandEncoderCopyBufferToBuffer(_gpuCommandBufferObj->wgpuCommandEncoder, stagingBuffer, 0, bufferObj->wgpuBuffer, offset, alignedSize); + if (commandBufferObj->wgpuCommandEncoder) { + wgpuCommandEncoderCopyBufferToBuffer(commandBufferObj->wgpuCommandEncoder, stagingBuffer, 0, bufferObj->wgpuBuffer, offset, buffSize); } else { WGPUCommandEncoder cmdEncoder = wgpuDeviceCreateCommandEncoder(CCWGPUDevice::getInstance()->gpuDeviceObject()->wgpuDevice, nullptr); - wgpuCommandEncoderCopyBufferToBuffer(cmdEncoder, stagingBuffer, 0, bufferObj->wgpuBuffer, offset, alignedSize); + wgpuCommandEncoderCopyBufferToBuffer(cmdEncoder, stagingBuffer, 0, bufferObj->wgpuBuffer, offset, buffSize); WGPUCommandBuffer commandBuffer = wgpuCommandEncoderFinish(cmdEncoder, nullptr); wgpuQueueSubmit(CCWGPUDevice::getInstance()->gpuDeviceObject()->wgpuQueue, 1, &commandBuffer); wgpuCommandEncoderRelease(cmdEncoder); @@ -612,6 +602,48 @@ void CCWGPUCommandBuffer::updateBuffer(Buffer *buff, const void *data, uint32_t } CCWGPUDevice::getInstance()->moveToTrash(stagingBuffer); } +} // namespace + +void CCWGPUCommandBuffer::updateIndirectBuffer(Buffer *buff, const DrawInfoList &drawInfos) { + auto *ccBuffer = static_cast(buff); + size_t drawInfoCount = drawInfos.size(); + + if (drawInfoCount > 0) { + auto *ccBuffer = static_cast(buff); + void *data = nullptr; + uint32_t buffSize = 0; + if (drawInfos[0].indexCount) { + auto &indexedIndirectObjs = ccBuffer->gpuBufferObject()->indexedIndirectObjs; + for (size_t i = 0; i < drawInfoCount; i++) { + indexedIndirectObjs[i].indexCount = drawInfos[i].indexCount; + indexedIndirectObjs[i].instanceCount = drawInfos[i].instanceCount ? drawInfos[i].instanceCount : 1; + indexedIndirectObjs[i].firstIndex = drawInfos[i].firstIndex; + indexedIndirectObjs[i].baseVertex = drawInfos[i].vertexOffset; + indexedIndirectObjs[i].firstInstance = 0; // check definition of indexedIndirectObj; + } + data = indexedIndirectObjs.data(); + buffSize = indexedIndirectObjs.size() * sizeof(CCWGPUDrawIndexedIndirectObject); + } else { + auto &indirectObjs = ccBuffer->gpuBufferObject()->indirectObjs; + for (size_t i = 0; i < drawInfoCount; i++) { + indirectObjs[i].vertexCount = drawInfos[i].vertexCount; + indirectObjs[i].instanceCount = drawInfos[i].instanceCount ? drawInfos[i].instanceCount : 1; + indirectObjs[i].firstIndex = drawInfos[i].firstIndex; + indirectObjs[i].firstInstance = 0; // check definition of indirectObj; + } + data = indirectObjs.data(); + buffSize = indirectObjs.size() * sizeof(CCWGPUDrawIndirectObject); + } + updatBuffer(this, ccBuffer, data, buffSize); + } +} + +void CCWGPUCommandBuffer::updateBuffer(Buffer *buff, const void *data, uint32_t size) { + uint32_t alignedSize = ceil(size / 4.0) * 4; + size_t buffSize = alignedSize; + auto *ccBuffer = static_cast(buff); + updatBuffer(this, ccBuffer, data, buffSize); +} // WGPU_EXPORT void wgpuCommandEncoderCopyBufferToTexture(WGPUCommandEncoder commandEncoder, WGPUImageCopyBuffer const * source, WGPUImageCopyTexture const * destination, WGPUExtent3D const * copySize); void CCWGPUCommandBuffer::copyBuffersToTexture(const uint8_t *const *buffers, Texture *texture, const BufferTextureCopy *regions, uint32_t count) { auto encoder = _gpuCommandBufferObj->wgpuCommandEncoder; @@ -803,13 +835,7 @@ void CCWGPUCommandBuffer::dispatch(const DispatchInfo &info) { void CCWGPUCommandBuffer::pipelineBarrier(const GeneralBarrier *barrier, const BufferBarrier *const *bufferBarriers, const Buffer *const *buffers, uint32_t bufferBarrierCount, const TextureBarrier *const *textureBarriers, const Texture *const *textures, uint32_t textureBarrierCount) { } -void CCWGPUCommandBuffer::updateIndirectBuffer(Buffer *buffer, const DrawInfoList &list) { - buffer->update(list.data(), 0); // indirectBuffer calc size inside. -} - void CCWGPUCommandBuffer::reset() { - _gpuCommandBufferObj->renderPassBegan = false; - _gpuCommandBufferObj->wgpuCommandBuffer = wgpuDefaultHandle; _gpuCommandBufferObj->wgpuCommandEncoder = wgpuDefaultHandle; _gpuCommandBufferObj->wgpuRenderPassEncoder = wgpuDefaultHandle; diff --git a/native/cocos/renderer/gfx-wgpu/WGPUCommandBuffer.h b/native/cocos/renderer/gfx-wgpu/WGPUCommandBuffer.h index 63c43d81e7d..d6f3c2ea3d6 100644 --- a/native/cocos/renderer/gfx-wgpu/WGPUCommandBuffer.h +++ b/native/cocos/renderer/gfx-wgpu/WGPUCommandBuffer.h @@ -67,6 +67,8 @@ class CCWGPUCommandBuffer final : public CommandBuffer { void dispatch(const DispatchInfo &info) override; void pipelineBarrier(const GeneralBarrier *barrier, const BufferBarrier *const *bufferBarriers, const Buffer *const *buffers, uint32_t bufferBarrierCount, const TextureBarrier *const *textureBarriers, const Texture *const *textures, uint32_t textureBarrierCount) override; + void updateIndirectBuffer(Buffer *buff, const DrawInfoList &info); + // TODO_Zeqiang: wgpu query pool void beginQuery(QueryPool *queryPool, uint32_t id) override{}; void endQuery(QueryPool *queryPool, uint32_t id) override{}; @@ -75,8 +77,6 @@ class CCWGPUCommandBuffer final : public CommandBuffer { inline CCWGPUCommandBufferObject *gpuCommandBufferObject() const { return _gpuCommandBufferObj; } - void updateIndirectBuffer(Buffer *buffer, const DrawInfoList &list); - void beginRenderPass(RenderPass *renderPass, Framebuffer *fbo, const Rect &renderArea, const ColorList &colors, float depth, uint32_t stencil) { this->CommandBuffer::beginRenderPass(renderPass, fbo, renderArea, colors.data(), depth, stencil); } diff --git a/native/cocos/renderer/gfx-wgpu/WGPUExports.h b/native/cocos/renderer/gfx-wgpu/WGPUExports.h index 81bdbe6ded8..3d72da3dce0 100644 --- a/native/cocos/renderer/gfx-wgpu/WGPUExports.h +++ b/native/cocos/renderer/gfx-wgpu/WGPUExports.h @@ -244,6 +244,7 @@ EMSCRIPTEN_BINDINGS(WEBGPU_DEVICE_WASM_EXPORT) { .property("objectID", &Buffer::getObjectID); class_>("CCWGPUBuffer") // .function("update", select_overload(&CCWGPUBuffer::update), allow_raw_pointer>()) + .function("updateIndirect", select_overload(&CCWGPUBuffer::update)) .function("update", select_overload(&CCWGPUBuffer::update)) .constructor<>(); diff --git a/native/cocos/renderer/gfx-wgpu/WGPUSwapchain.cpp b/native/cocos/renderer/gfx-wgpu/WGPUSwapchain.cpp index d35e75249bf..011b2b1059d 100644 --- a/native/cocos/renderer/gfx-wgpu/WGPUSwapchain.cpp +++ b/native/cocos/renderer/gfx-wgpu/WGPUSwapchain.cpp @@ -125,7 +125,7 @@ void CCWGPUSwapchain::doDestroy() { void CCWGPUSwapchain::doResize(uint32_t width, uint32_t height, SurfaceTransform transform) { _colorTexture->resize(width, height); - _depthStencilTexture->resize(height, height); + _depthStencilTexture->resize(width, height); } void CCWGPUSwapchain::update() { From 0da4451100a6325fe8a3d265b3e8062e768b783f Mon Sep 17 00:00:00 2001 From: troublemaker52025 Date: Fri, 21 Oct 2022 16:09:36 +0800 Subject: [PATCH 060/829] [fix] shadow map use packing mode in webgl and lightmap texture undefined (#13118) --- cocos/core/pipeline/define.ts | 5 +++-- cocos/core/renderer/scene/model.ts | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/cocos/core/pipeline/define.ts b/cocos/core/pipeline/define.ts index 8f5ad4464d2..e187e2ee5b7 100644 --- a/cocos/core/pipeline/define.ts +++ b/cocos/core/pipeline/define.ts @@ -29,7 +29,7 @@ import { SubModel } from '../renderer/scene/submodel'; import { Layers } from '../scene-graph/layers'; import { legacyCC } from '../global-exports'; import { BindingMappingInfo, DescriptorType, Type, ShaderStageFlagBit, UniformStorageBuffer, DescriptorSetLayoutBinding, - Uniform, UniformBlock, UniformSamplerTexture, UniformStorageImage, Device, FormatFeatureBit, Format, + Uniform, UniformBlock, UniformSamplerTexture, UniformStorageImage, Device, FormatFeatureBit, Format, API, } from '../gfx'; export const PIPELINE_FLOW_MAIN = 'MainFlow'; @@ -691,7 +691,8 @@ export function supportsR16HalfFloatTexture (device: Device) { */ export function supportsR32FloatTexture (device: Device) { return (device.getFormatFeatures(Format.R32F) & (FormatFeatureBit.RENDER_TARGET | FormatFeatureBit.SAMPLED_TEXTURE)) - === (FormatFeatureBit.RENDER_TARGET | FormatFeatureBit.SAMPLED_TEXTURE); + === (FormatFeatureBit.RENDER_TARGET | FormatFeatureBit.SAMPLED_TEXTURE) + && !(device.gfxAPI === API.WEBGL); // wegl 1 Single-channel float type is not supported under webgl1, so it is excluded } /* eslint-enable max-len */ diff --git a/cocos/core/renderer/scene/model.ts b/cocos/core/renderer/scene/model.ts index 371a022bd7e..b7977031b84 100644 --- a/cocos/core/renderer/scene/model.ts +++ b/cocos/core/renderer/scene/model.ts @@ -663,7 +663,7 @@ export class Model { this.onMacroPatchesStateChanged(); - if (texture === null) { + if (!texture) { texture = builtinResMgr.get('empty-texture'); } From d77afc3f0658aacb73ec25855f83cfffe6c2ca71 Mon Sep 17 00:00:00 2001 From: minggo Date: Fri, 21 Oct 2022 18:55:32 +0800 Subject: [PATCH 061/829] Revert "Hide destructor (#13105)" (#13121) This reverts commit b5804b58c8baaa63955a7f5d3b66295f56c09400. --- native/cocos/2d/renderer/RenderDrawInfo.cpp | 6 +++--- native/cocos/2d/renderer/UIMeshBuffer.cpp | 12 +++--------- .../skeletal-animation/SkeletalAnimationUtils.cpp | 4 ++-- native/cocos/base/memory/Memory.h | 13 ------------- native/cocos/bindings/manual/jsb_global.cpp | 6 +++--- native/cocos/core/assets/BitmapFont.cpp | 6 +++--- native/cocos/network/HttpRequest.h | 6 +++--- native/cocos/platform/Image.h | 2 +- native/cocos/profiler/DebugRenderer.cpp | 2 +- native/cocos/renderer/core/TextureBufferPool.h | 2 +- native/cocos/renderer/gfx-agent/BufferAgent.cpp | 5 +++-- native/cocos/renderer/gfx-base/GFXBuffer.h | 8 ++++---- .../renderer/gfx-validator/BufferValidator.cpp | 3 ++- native/cocos/renderer/pipeline/BatchedBuffer.cpp | 8 ++++---- native/cocos/renderer/pipeline/GeometryRenderer.cpp | 2 +- native/cocos/renderer/pipeline/InstancedBuffer.cpp | 2 +- native/cocos/renderer/pipeline/PipelineUBO.cpp | 4 ++-- native/cocos/renderer/pipeline/RenderPipeline.cpp | 6 +++--- .../cocos/renderer/pipeline/deferred/BloomStage.cpp | 9 +++++---- .../renderer/pipeline/deferred/LightingStage.cpp | 4 ++-- .../renderer/pipeline/deferred/ReflectionComp.cpp | 2 +- 21 files changed, 48 insertions(+), 64 deletions(-) diff --git a/native/cocos/2d/renderer/RenderDrawInfo.cpp b/native/cocos/2d/renderer/RenderDrawInfo.cpp index 54441c12639..413217d8181 100644 --- a/native/cocos/2d/renderer/RenderDrawInfo.cpp +++ b/native/cocos/2d/renderer/RenderDrawInfo.cpp @@ -85,10 +85,10 @@ void RenderDrawInfo::resetMeshIA() { void RenderDrawInfo::destroy() { _nextFreeIAHandle = 0; if (_iaInfo) { - CC_SAFE_RELEASE_NULL(_iaInfo->indexBuffer); + CC_SAFE_DELETE(_iaInfo->indexBuffer); if (!_iaInfo->vertexBuffers.empty()) { // only one vb - CC_SAFE_RELEASE_NULL(_iaInfo->vertexBuffers[0]); + CC_SAFE_DELETE(_iaInfo->vertexBuffers[0]); _iaInfo->vertexBuffers.clear(); } CC_SAFE_DELETE(_iaInfo); @@ -104,7 +104,7 @@ void RenderDrawInfo::destroy() { if (_localDSBF) { CC_SAFE_DELETE(_localDSBF->ds); - CC_SAFE_RELEASE_NULL(_localDSBF->uboBuf); + CC_SAFE_DELETE(_localDSBF->uboBuf); CC_SAFE_DELETE(_localDSBF); } } diff --git a/native/cocos/2d/renderer/UIMeshBuffer.cpp b/native/cocos/2d/renderer/UIMeshBuffer.cpp index 83aeb5e0124..2bf6dc4901a 100644 --- a/native/cocos/2d/renderer/UIMeshBuffer.cpp +++ b/native/cocos/2d/renderer/UIMeshBuffer.cpp @@ -49,7 +49,7 @@ void UIMeshBuffer::setIData(uint16_t* iData) { _iData = iData; } -void UIMeshBuffer::initialize(ccstd::vector&& attrs, bool needCreateLayout) { +void UIMeshBuffer::initialize(ccstd::vector &&attrs, bool needCreateLayout) { _attributes = attrs; _vertexFormatBytes = getAttributesStride(attrs); if (needCreateLayout) { @@ -74,29 +74,23 @@ void UIMeshBuffer::resetIA() { void UIMeshBuffer::destroy() { reset(); _attributes.clear(); - for (auto* vb : _iaInfo.vertexBuffers) { - vb->release(); + delete vb; } _iaInfo.vertexBuffers.clear(); - - CC_SAFE_RELEASE_NULL(_iaInfo.indexBuffer); - + CC_SAFE_DELETE(_iaInfo.indexBuffer); if (_needDeleteVData) { delete _vData; delete _iData; } - _vData = nullptr; _iData = nullptr; - // Destroy InputAssemblers for (auto* ia : _iaPool) { ia->destroy(); delete ia; } _iaPool.clear(); - if (_needDeleteLayout) { CC_SAFE_DELETE(_meshBufferLayout); } diff --git a/native/cocos/3d/skeletal-animation/SkeletalAnimationUtils.cpp b/native/cocos/3d/skeletal-animation/SkeletalAnimationUtils.cpp index 75d7fe5b780..ca9f6212527 100644 --- a/native/cocos/3d/skeletal-animation/SkeletalAnimationUtils.cpp +++ b/native/cocos/3d/skeletal-animation/SkeletalAnimationUtils.cpp @@ -488,7 +488,7 @@ IAnimInfo JointAnimationInfo::getData(const ccstd::string &nodeID) { void JointAnimationInfo::destroy(const ccstd::string &nodeID) { if (_pool.find(nodeID) != _pool.end()) { - CC_SAFE_DESTROY_AND_RELEASE_NULL(_pool[nodeID].buffer); + CC_SAFE_DESTROY_AND_DELETE(_pool[nodeID].buffer); _pool.erase(nodeID); } } @@ -503,7 +503,7 @@ const IAnimInfo &JointAnimationInfo::switchClip(IAnimInfo &info /*, AnimationCli void JointAnimationInfo::clear() { for (auto pool : _pool) { - CC_SAFE_DESTROY_AND_RELEASE_NULL(pool.second.buffer); + CC_SAFE_DESTROY_AND_DELETE(pool.second.buffer); } _pool.clear(); } diff --git a/native/cocos/base/memory/Memory.h b/native/cocos/base/memory/Memory.h index 7866e066775..ae9407437c8 100644 --- a/native/cocos/base/memory/Memory.h +++ b/native/cocos/base/memory/Memory.h @@ -103,19 +103,6 @@ class MemoryAllocDealloc final { (ptr) = nullptr; \ } -#define CC_SAFE_DESTROY_AND_RELEASE(ptr) \ - if (ptr) { \ - (ptr)->destroy(); \ - (ptr)->release(); \ - } - -#define CC_SAFE_DESTROY_AND_RELEASE_NULL(ptr) \ - if (ptr) { \ - (ptr)->destroy(); \ - (ptr)->release(); \ - (ptr) = nullptr; \ - } - #define CC_SAFE_DESTROY_NULL(ptr) \ if (ptr) { \ (ptr)->destroy(); \ diff --git a/native/cocos/bindings/manual/jsb_global.cpp b/native/cocos/bindings/manual/jsb_global.cpp index 94ff162a4b2..69be4ead7fa 100644 --- a/native/cocos/bindings/manual/jsb_global.cpp +++ b/native/cocos/bindings/manual/jsb_global.cpp @@ -581,7 +581,7 @@ bool jsb_global_load_image(const ccstd::string &path, const se::Value &callbackV auto app = CC_CURRENT_APPLICATION(); if (!app) { delete imgInfo; - img->release(); + delete img; return; } auto engine = app->getEngine(); @@ -606,7 +606,7 @@ bool jsb_global_load_image(const ccstd::string &path, const se::Value &callbackV SE_REPORT_ERROR("initWithImageFile: %s failed!", path.c_str()); } callbackPtr->toObject()->call(seArgs, nullptr); - img->release(); + delete img; }); }); }; @@ -712,7 +712,7 @@ static bool js_saveImageData(se::State &s) { // NOLINT } uint8ArrayObj->unroot(); uint8ArrayObj->decRef(); - img->release(); + delete img; }); }); return true; diff --git a/native/cocos/core/assets/BitmapFont.cpp b/native/cocos/core/assets/BitmapFont.cpp index 509099ddd38..4c7af37cd18 100644 --- a/native/cocos/core/assets/BitmapFont.cpp +++ b/native/cocos/core/assets/BitmapFont.cpp @@ -152,13 +152,13 @@ gfx::Texture *BitmapFontFace::loadTexture(const ccstd::string &path) { bool success = image->initWithImageFile(path); if (!success) { CC_LOG_WARNING("BitmapFontFace initWithImageFile failed, path: %s.", path.c_str()); - image->release(); + delete image; return nullptr; } if (image->getRenderFormat() != gfx::Format::R8 && image->getRenderFormat() != gfx::Format::L8) { CC_LOG_WARNING("BitmapFontFace loadTexture with invalid format, path: %s.", path.c_str()); - image->release(); + delete image; return nullptr; } @@ -181,7 +181,7 @@ gfx::Texture *BitmapFontFace::loadTexture(const ccstd::string &path) { {0U, 0U, 1U}}}; device->copyBuffersToTexture(buffers, texture, regions); - image->release(); + delete image; return texture; } diff --git a/native/cocos/network/HttpRequest.h b/native/cocos/network/HttpRequest.h index 2ed0a83d2b8..8180cb7d56b 100644 --- a/native/cocos/network/HttpRequest.h +++ b/native/cocos/network/HttpRequest.h @@ -86,6 +86,9 @@ class CC_DLL HttpRequest : public RefCounted { HttpRequest() : _callback(nullptr) {} + /** Destructor. */ + ~HttpRequest() override = default; + // setter/getters for properties /** @@ -244,9 +247,6 @@ class CC_DLL HttpRequest : public RefCounted { } protected: - /** Destructor. */ - ~HttpRequest() override = default; - // properties Type _requestType{Type::UNKNOWN}; /// kHttpRequestGet, kHttpRequestPost or other enums ccstd::string _url; /// target url that this request is sent to diff --git a/native/cocos/platform/Image.h b/native/cocos/platform/Image.h index 0bbb935a0a0..d4937a08cb5 100644 --- a/native/cocos/platform/Image.h +++ b/native/cocos/platform/Image.h @@ -36,6 +36,7 @@ namespace cc { class Image : public RefCounted { public: Image(); + ~Image() override; /** Supported formats for Image */ enum class Format { @@ -89,7 +90,6 @@ class Image : public RefCounted { bool saveToFile(const std::string &filename, bool isToRGB = true); protected: - ~Image() override; bool initWithJpgData(const unsigned char *data, uint32_t dataLen); bool initWithPngData(const unsigned char *data, uint32_t dataLen); #if CC_USE_WEBP diff --git a/native/cocos/profiler/DebugRenderer.cpp b/native/cocos/profiler/DebugRenderer.cpp index fbd4030792a..4cb6b1abf3f 100644 --- a/native/cocos/profiler/DebugRenderer.cpp +++ b/native/cocos/profiler/DebugRenderer.cpp @@ -164,7 +164,7 @@ class DebugVertexBuffer { CC_SAFE_DELETE(batch); } - CC_SAFE_DESTROY_AND_RELEASE_NULL(_buffer); + CC_SAFE_DESTROY_AND_DELETE(_buffer); CC_SAFE_DESTROY_AND_DELETE(_inputAssembler); CC_PROFILE_MEMORY_DEC(DebugVertexBuffer, static_cast(_maxVertices * sizeof(DebugVertex))); } diff --git a/native/cocos/renderer/core/TextureBufferPool.h b/native/cocos/renderer/core/TextureBufferPool.h index ba914bccf4f..87390c3c178 100644 --- a/native/cocos/renderer/core/TextureBufferPool.h +++ b/native/cocos/renderer/core/TextureBufferPool.h @@ -62,6 +62,7 @@ class TextureBufferPool : public RefCounted { public: TextureBufferPool(); explicit TextureBufferPool(gfx::Device *device); + ~TextureBufferPool() override; void initialize(const ITextureBufferPoolInfo &info); void destroy(); @@ -73,7 +74,6 @@ class TextureBufferPool : public RefCounted { void update(const ITextureBufferHandle &handle, ArrayBuffer *buffer); private: - ~TextureBufferPool() override; index_t findAvailableSpace(uint32_t size, index_t chunkIdx) const; // [McDonald 12] Efficient Buffer Management diff --git a/native/cocos/renderer/gfx-agent/BufferAgent.cpp b/native/cocos/renderer/gfx-agent/BufferAgent.cpp index 6be2cbcd32d..ac056400836 100644 --- a/native/cocos/renderer/gfx-agent/BufferAgent.cpp +++ b/native/cocos/renderer/gfx-agent/BufferAgent.cpp @@ -44,7 +44,7 @@ BufferAgent::~BufferAgent() { actor, _actor, stagingBuffer, std::move(_stagingBuffer), { - CC_SAFE_RELEASE(actor); + CC_SAFE_DELETE(actor); }); } @@ -87,7 +87,8 @@ void BufferAgent::doResize(uint32_t size, uint32_t /*count*/) { ENQUEUE_MESSAGE_1( mq, BufferFreeStagingBuffer, stagingBuffer, std::move(_stagingBuffer), - {}); + { + }); } if (hasFlag(_flags, BufferFlagBit::ENABLE_STAGING_WRITE) || (size > STAGING_BUFFER_THRESHOLD && hasFlag(_memUsage, MemoryUsageBit::HOST))) { diff --git a/native/cocos/renderer/gfx-base/GFXBuffer.h b/native/cocos/renderer/gfx-base/GFXBuffer.h index 04b3984e7b8..7cbe2045782 100644 --- a/native/cocos/renderer/gfx-base/GFXBuffer.h +++ b/native/cocos/renderer/gfx-base/GFXBuffer.h @@ -34,6 +34,7 @@ namespace gfx { class CC_DLL Buffer : public GFXObject, public RefCounted { public: Buffer(); + ~Buffer() override; static ccstd::hash_t computeHash(const BufferInfo &info); @@ -43,8 +44,8 @@ class CC_DLL Buffer : public GFXObject, public RefCounted { void destroy(); template - void write(const T &value, uint32_t offset) const { - write(reinterpret_cast(&value), offset, sizeof(T)); + void write(const T& value, uint32_t offset) const { + write(reinterpret_cast(&value), offset, sizeof(T)); } void write(const uint8_t *value, uint32_t offset, uint32_t size) const; @@ -64,7 +65,6 @@ class CC_DLL Buffer : public GFXObject, public RefCounted { inline bool isBufferView() const { return _isBufferView; } protected: - ~Buffer() override; virtual void doInit(const BufferInfo &info) = 0; virtual void doInit(const BufferViewInfo &info) = 0; virtual void doResize(uint32_t size, uint32_t count) = 0; @@ -73,7 +73,7 @@ class CC_DLL Buffer : public GFXObject, public RefCounted { static uint8_t *getBufferStagingAddress(Buffer *buffer); static void flushBuffer(Buffer *buffer, const uint8_t *data); - virtual void flush(const uint8_t *data) { update(reinterpret_cast(data), _size); } + virtual void flush(const uint8_t *data) { update(reinterpret_cast(data), _size); } virtual uint8_t *getStagingAddress() const { return _data.get(); } BufferUsage _usage = BufferUsageBit::NONE; diff --git a/native/cocos/renderer/gfx-validator/BufferValidator.cpp b/native/cocos/renderer/gfx-validator/BufferValidator.cpp index 567fc194fa6..7b1512b47ca 100644 --- a/native/cocos/renderer/gfx-validator/BufferValidator.cpp +++ b/native/cocos/renderer/gfx-validator/BufferValidator.cpp @@ -49,7 +49,7 @@ BufferValidator::~BufferValidator() { view->onExpire(); } - CC_SAFE_RELEASE_NULL(_actor); + CC_SAFE_DELETE(_actor); uint64_t lifeTime = DeviceValidator::getInstance()->currentFrame() - _creationFrame; // skip those that have never been updated @@ -205,5 +205,6 @@ uint8_t *BufferValidator::getStagingAddress() const { return Buffer::getBufferStagingAddress(_actor); } + } // namespace gfx } // namespace cc diff --git a/native/cocos/renderer/pipeline/BatchedBuffer.cpp b/native/cocos/renderer/pipeline/BatchedBuffer.cpp index a2f0992edcc..468f5f6e319 100644 --- a/native/cocos/renderer/pipeline/BatchedBuffer.cpp +++ b/native/cocos/renderer/pipeline/BatchedBuffer.cpp @@ -45,16 +45,16 @@ BatchedBuffer::~BatchedBuffer() = default; void BatchedBuffer::destroy() { for (auto &batch : _batches) { for (auto *vb : batch.vbs) { - CC_SAFE_DESTROY_AND_RELEASE(vb); + CC_SAFE_DESTROY_AND_DELETE(vb); } for (auto *data : batch.vbDatas) { CC_FREE(data); } - CC_SAFE_DESTROY_AND_RELEASE_NULL(batch.indexBuffer); - CC_SAFE_DESTROY_AND_RELEASE_NULL(batch.ia); - CC_SAFE_DESTROY_AND_RELEASE_NULL(batch.ubo); + CC_SAFE_DESTROY_AND_DELETE(batch.indexBuffer); + CC_SAFE_DESTROY_AND_DELETE(batch.ia); + CC_SAFE_DESTROY_AND_DELETE(batch.ubo); CC_FREE(batch.indexData); } diff --git a/native/cocos/renderer/pipeline/GeometryRenderer.cpp b/native/cocos/renderer/pipeline/GeometryRenderer.cpp index 29fa2e08482..2c1dffd8822 100644 --- a/native/cocos/renderer/pipeline/GeometryRenderer.cpp +++ b/native/cocos/renderer/pipeline/GeometryRenderer.cpp @@ -115,7 +115,7 @@ class GeometryVertexBuffer { inline void destroy() { _vertices.clear(); - CC_SAFE_DESTROY_AND_RELEASE_NULL(_buffer); + CC_SAFE_DESTROY_AND_DELETE(_buffer); CC_SAFE_DESTROY_AND_DELETE(_inputAssembler); CC_PROFILE_MEMORY_DEC(GeometryVertexBuffer, static_cast(_maxVertices * sizeof(T))); } diff --git a/native/cocos/renderer/pipeline/InstancedBuffer.cpp b/native/cocos/renderer/pipeline/InstancedBuffer.cpp index 9049f0a6b71..1f7083b9614 100644 --- a/native/cocos/renderer/pipeline/InstancedBuffer.cpp +++ b/native/cocos/renderer/pipeline/InstancedBuffer.cpp @@ -43,7 +43,7 @@ InstancedBuffer::~InstancedBuffer() = default; void InstancedBuffer::destroy() { for (auto &instance : _instances) { - CC_SAFE_DESTROY_AND_RELEASE_NULL(instance.vb); + CC_SAFE_DESTROY_AND_DELETE(instance.vb); CC_SAFE_DESTROY_AND_DELETE(instance.ia); CC_FREE(instance.data); } diff --git a/native/cocos/renderer/pipeline/PipelineUBO.cpp b/native/cocos/renderer/pipeline/PipelineUBO.cpp index 6b1eec1ab2c..cf1667fe494 100644 --- a/native/cocos/renderer/pipeline/PipelineUBO.cpp +++ b/native/cocos/renderer/pipeline/PipelineUBO.cpp @@ -474,7 +474,7 @@ void PipelineUBO::activate(gfx::Device *device, RenderPipeline *pipeline) { void PipelineUBO::destroy() { for (auto &ubo : _ubos) { - CC_SAFE_RELEASE(ubo) + CC_SAFE_DELETE(ubo) } _ubos.clear(); } @@ -506,7 +506,7 @@ void PipelineUBO::updateMultiCameraUBO(GlobalDSManager *globalDSMgr, const ccstd if (_cameraBufferView != nullptr) { _ubos.erase(std::remove(_ubos.begin(), _ubos.end(), _cameraBufferView), _ubos.end()); - CC_SAFE_RELEASE_NULL(_cameraBufferView); + CC_SAFE_DELETE(_cameraBufferView); } _cameraBufferView = _device->createBuffer({ _cameraBuffer, diff --git a/native/cocos/renderer/pipeline/RenderPipeline.cpp b/native/cocos/renderer/pipeline/RenderPipeline.cpp index 5a2d5e46519..6997bbd2d28 100644 --- a/native/cocos/renderer/pipeline/RenderPipeline.cpp +++ b/native/cocos/renderer/pipeline/RenderPipeline.cpp @@ -118,14 +118,14 @@ void RenderPipeline::onGlobalPipelineStateChanged() { } void RenderPipeline::destroyQuadInputAssembler() { - CC_SAFE_DESTROY_AND_RELEASE_NULL(_quadIB); + CC_SAFE_DESTROY_AND_DELETE(_quadIB); for (auto *node : _quadVB) { - CC_SAFE_DESTROY_AND_RELEASE(node); + CC_SAFE_DESTROY_AND_DELETE(node); } for (auto node : _quadIA) { - CC_SAFE_DESTROY_AND_RELEASE(node.second); + CC_SAFE_DESTROY_AND_DELETE(node.second); } _quadVB.clear(); _quadIA.clear(); diff --git a/native/cocos/renderer/pipeline/deferred/BloomStage.cpp b/native/cocos/renderer/pipeline/deferred/BloomStage.cpp index ea8af3f3338..7e718496f61 100644 --- a/native/cocos/renderer/pipeline/deferred/BloomStage.cpp +++ b/native/cocos/renderer/pipeline/deferred/BloomStage.cpp @@ -106,11 +106,12 @@ void BloomStage::activate(RenderPipeline *pipeline, RenderFlow *flow) { } void BloomStage::destroy() { - CC_SAFE_RELEASE_NULL(_prefilterUBO); - CC_SAFE_RELEASE_NULL(_combineUBO); + CC_SAFE_DELETE(_prefilterUBO); + CC_SAFE_DELETE(_combineUBO); for (int i = 0; i < MAX_BLOOM_FILTER_PASS_NUM; ++i) { - CC_SAFE_RELEASE_NULL(_downsampleUBO[i]); - CC_SAFE_RELEASE_NULL(_upsampleUBO[i]); + CC_SAFE_DELETE(_downsampleUBO[i]); + + CC_SAFE_DELETE(_upsampleUBO[i]); } } diff --git a/native/cocos/renderer/pipeline/deferred/LightingStage.cpp b/native/cocos/renderer/pipeline/deferred/LightingStage.cpp index 221d0ac7822..895d12252de 100644 --- a/native/cocos/renderer/pipeline/deferred/LightingStage.cpp +++ b/native/cocos/renderer/pipeline/deferred/LightingStage.cpp @@ -98,8 +98,8 @@ const RenderStageInfo &LightingStage::getInitializeInfo() { return LightingStage LightingStage::LightingStage() = default; LightingStage::~LightingStage() { - CC_SAFE_DESTROY_AND_RELEASE_NULL(_deferredLitsBufs); - CC_SAFE_DESTROY_AND_RELEASE_NULL(_deferredLitsBufView); + CC_SAFE_DESTROY_AND_DELETE(_deferredLitsBufs); + CC_SAFE_DESTROY_AND_DELETE(_deferredLitsBufView); } bool LightingStage::initialize(const RenderStageInfo &info) { diff --git a/native/cocos/renderer/pipeline/deferred/ReflectionComp.cpp b/native/cocos/renderer/pipeline/deferred/ReflectionComp.cpp index f51382aa0bb..2178cf48008 100644 --- a/native/cocos/renderer/pipeline/deferred/ReflectionComp.cpp +++ b/native/cocos/renderer/pipeline/deferred/ReflectionComp.cpp @@ -24,7 +24,7 @@ ReflectionComp::~ReflectionComp() { CC_SAFE_DESTROY_AND_DELETE(_localDescriptorSetLayout); - CC_SAFE_DESTROY_AND_RELEASE_NULL(_compConstantsBuffer); + CC_SAFE_DESTROY_AND_DELETE(_compConstantsBuffer); } namespace { From 4162c33638f459a6a6d88ba09f61911029d2c38d Mon Sep 17 00:00:00 2001 From: qiuguohua Date: Fri, 21 Oct 2022 19:09:02 +0800 Subject: [PATCH 062/829] Add force stop and resume force stop application (#13061) --- cocos/game/game.ts | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/cocos/game/game.ts b/cocos/game/game.ts index b88c8e3d582..bdb053177de 100644 --- a/cocos/game/game.ts +++ b/cocos/game/game.ts @@ -432,6 +432,7 @@ export class Game extends EventTarget { private _engineInited = false; // whether the engine has inited private _rendererInitialized = false; private _paused = true; + private _pausedByEngine = false; // frame control private _frameRate = 60; private _pacer: Pacer | null = null; @@ -518,6 +519,27 @@ export class Game extends EventTarget { director.tick(this.frameTime / 1000); } + /** + * @en Called by the engine to pause the game. + * @zh 提供给引擎调用暂停游戏接口。 + */ + private pauseByEngine () { + if (this._paused) { return; } + this._pausedByEngine = true; + this.pause(); + } + + /** + * @en Resume paused game by engine call. + * @zh 提供给引擎调用恢复暂停游戏接口。 + */ + private resumeByEngine () { + if (this._pausedByEngine) { + this.resume(); + this._pausedByEngine = false; + } + } + /** * @en Pause the game main loop. This will pause: * - game logic execution @@ -963,12 +985,12 @@ export class Game extends EventTarget { private _onHide () { this.emit(Game.EVENT_HIDE); - this.pause(); + this.pauseByEngine(); } private _onShow () { this.emit(Game.EVENT_SHOW); - this.resume(); + this.resumeByEngine(); } // @ Persist root node section From c292cf6e6542e2566a9e8de0b752a6abaac6c01d Mon Sep 17 00:00:00 2001 From: Cocos Robot <48829427+cocos-robot@users.noreply.github.com> Date: Fri, 21 Oct 2022 19:11:43 +0800 Subject: [PATCH 063/829] [ci skip][AUTO]: Automated code generating update: fb36ddff33d2301a1b29ce7b12fba7bcd3418325 (#13121) (#13123) Co-authored-by: cocos-robot --- native/cocos/bindings/auto/jsb_gfx_auto.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/native/cocos/bindings/auto/jsb_gfx_auto.cpp b/native/cocos/bindings/auto/jsb_gfx_auto.cpp index 372b596efc9..7a04e03f684 100644 --- a/native/cocos/bindings/auto/jsb_gfx_auto.cpp +++ b/native/cocos/bindings/auto/jsb_gfx_auto.cpp @@ -21637,6 +21637,13 @@ se::Class* __jsb_cc_gfx_Buffer_class = nullptr; se::Object* __jsb_cc_gfx_Buffer_proto = nullptr; SE_DECLARE_FINALIZE_FUNC(js_delete_cc_gfx_Buffer) +static bool js_delete_cc_gfx_Buffer(se::State& s) +{ + // js_dtoroverride + return true; +} +SE_BIND_FINALIZE_FUNC(js_delete_cc_gfx_Buffer) + static bool js_cc_gfx_Buffer_computeHash_static(se::State& s) { // js_function @@ -21876,6 +21883,9 @@ bool js_register_cc_gfx_Buffer(se::Object* obj) { cls->defineStaticFunction("computeHash", _SE(js_cc_gfx_Buffer_computeHash_static)); + cls->defineFinalizeFunction(_SE(js_delete_cc_gfx_Buffer)); + + cls->install(); JSBClassType::registerClass(cls); From 089d78776637edb07b971402e9a50a368783cff8 Mon Sep 17 00:00:00 2001 From: zhakesi Date: Mon, 24 Oct 2022 10:03:04 +0800 Subject: [PATCH 064/829] fix spine cached mode (#13107) --- cocos/spine/assembler/simple.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/cocos/spine/assembler/simple.ts b/cocos/spine/assembler/simple.ts index 0e5fe7bc0ac..4fd2ec9bbfc 100644 --- a/cocos/spine/assembler/simple.ts +++ b/cocos/spine/assembler/simple.ts @@ -764,6 +764,7 @@ function cacheTraverse (worldMat: Mat4 | null) { let prevDrawIndexOffset = 0; const rd = _renderData!; const vbuf = rd.chunk.vb; + _vUintBuf = new Uint32Array(vbuf.buffer, vbuf.byteOffset, vbuf.length); const ibuf = rd.indices!; for (let i = 0, n = segments.length; i < n; i++) { const segInfo = segments[i]; From 30afbee1497aeaeee1648658ef2f9009419ecd2f Mon Sep 17 00:00:00 2001 From: mmyduckx <308303735@qq.com> Date: Mon, 24 Oct 2022 10:26:49 +0800 Subject: [PATCH 065/829] fix native node targetOff (#13122) --- cocos/core/scene-graph/node.jsb.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/cocos/core/scene-graph/node.jsb.ts b/cocos/core/scene-graph/node.jsb.ts index a09e80863a5..5c37ec8cef9 100644 --- a/cocos/core/scene-graph/node.jsb.ts +++ b/cocos/core/scene-graph/node.jsb.ts @@ -318,6 +318,7 @@ nodeProto.hasEventListener = function (type: string, callback?, target?: unknown }; nodeProto.targetOff = function (target: string | unknown) { + this._eventProcessor.targetOff(target); // Check for event mask reset if ((this._eventMask & TRANSFORM_ON) && !this._eventProcessor.hasEventListener(NodeEventType.TRANSFORM_CHANGED)) { this._eventMask &= ~TRANSFORM_ON; From 35ef49868bd859cccea72242227db2d7fd6a85cd Mon Sep 17 00:00:00 2001 From: jk20012001 Date: Mon, 24 Oct 2022 11:38:50 +0800 Subject: [PATCH 066/829] add Transmittence and TRT for surface shader (#13127) --- .../builtin/functionalities/shadow-map.chunk | 58 +++++++++--- .../chunks/common/shadow/native-pcf.chunk | 9 ++ .../lighting-intermediate-data.chunk | 8 +- .../data-structures/lighting-result.chunk | 8 +- .../lighting-flow/common-flow.chunk | 42 +++++++-- .../model-functions/standard.chunk | 92 +++++++++++++++---- .../model-functions/toon.chunk | 6 +- .../surfaces/data-structures/standard.chunk | 7 +- .../default-functions/standard-fs.chunk | 18 ++++ .../effect-macros/common-macros.chunk | 6 ++ .../module-functions/standard-fs.chunk | 30 +++++- 11 files changed, 240 insertions(+), 44 deletions(-) diff --git a/editor/assets/chunks/builtin/functionalities/shadow-map.chunk b/editor/assets/chunks/builtin/functionalities/shadow-map.chunk index bce1a85732d..15ab192ff89 100644 --- a/editor/assets/chunks/builtin/functionalities/shadow-map.chunk +++ b/editor/assets/chunks/builtin/functionalities/shadow-map.chunk @@ -76,12 +76,21 @@ float CCGetLinearDepth(vec3 worldPos) { return newShadowPos; } + float GetViewSpaceDepthFromNDCDepth_Orthgraphic(float NDCDepth, float projScaleZ, float projBiasZ) + { + return (NDCDepth - projBiasZ) / projScaleZ; + } + float GetViewSpaceDepthFromNDCDepth_Perspective(float NDCDepth, float homogenousDividW, float invProjScaleZ, float invProjBiasZ) + { + return NDCDepth * invProjScaleZ + homogenousDividW * invProjBiasZ; + } + vec4 ApplyShadowDepthBias_Perspective(vec4 shadowPos, float viewspaceDepthBias) { // Recover the coord in view space: cc_matLightInvProj * shadowPos vec3 viewSpacePos; viewSpacePos.xy = shadowPos.xy * cc_shadowProjInfo.zw; - viewSpacePos.z = shadowPos.z * cc_shadowInvProjDepthInfo.x + shadowPos.w * cc_shadowInvProjDepthInfo.y; + viewSpacePos.z = GetViewSpaceDepthFromNDCDepth_Perspective(shadowPos.z, shadowPos.w, cc_shadowInvProjDepthInfo.x, cc_shadowInvProjDepthInfo.y); // Apply bias viewSpacePos.xyz += cc_shadowProjDepthInfo.z * normalize(viewSpacePos.xyz) * viewspaceDepthBias; @@ -107,7 +116,7 @@ float CCGetLinearDepth(vec3 worldPos) { float coeffB = projBiasZ; // Recover the Z distance in view space: - float viewSpacePos_z = (shadowPos.z - coeffB) / coeffA; + float viewSpacePos_z = GetViewSpaceDepthFromNDCDepth_Orthgraphic(shadowPos.z, projScaleZ, projBiasZ); // Apply bias viewSpacePos_z += viewspaceDepthBias; @@ -195,7 +204,7 @@ float CCGetLinearDepth(vec3 worldPos) { //////////////////////////////////////////////////////////Main Functions - float CCSpotShadowFactorBase(vec4 shadowPos, vec3 worldPos, vec2 shadowBias) + float CCSpotShadowFactorBase(out vec4 shadowNDCPosWithBias, vec4 shadowPos, vec3 worldPos, vec2 shadowBias) { float pcf = cc_shadowWHPBInfo.z; vec4 pos = vec4(1.0); @@ -205,18 +214,22 @@ float CCGetLinearDepth(vec3 worldPos) { pos = ApplyShadowDepthBias_Perspective(shadowPos, shadowBias.x); #endif + float realtimeShadow = 1.0; if (pcf > 2.9) { - return CCGetSpotLightShadowFactorSoft5X(pos, worldPos); + realtimeShadow = CCGetSpotLightShadowFactorSoft5X(pos, worldPos); }else if (pcf > 1.9) { - return CCGetSpotLightShadowFactorSoft3X(pos, worldPos); + realtimeShadow = CCGetSpotLightShadowFactorSoft3X(pos, worldPos); }else if (pcf > 0.9) { - return CCGetSpotLightShadowFactorSoft(pos, worldPos); + realtimeShadow = CCGetSpotLightShadowFactorSoft(pos, worldPos); }else { - return CCGetSpotLightShadowFactorHard(pos, worldPos); + realtimeShadow = CCGetSpotLightShadowFactorHard(pos, worldPos); } + + shadowNDCPosWithBias = pos; + return mix(realtimeShadow, 1.0, cc_shadowNFLSInfo.w); } - float CCShadowFactorBase(vec4 shadowPos, vec3 N, vec2 shadowBias) + float CCShadowFactorBase(out vec4 shadowNDCPosWithBias, vec4 shadowPos, vec3 N, vec2 shadowBias) { vec4 pos = ApplyShadowDepthBias_FaceNormal(shadowPos, N, shadowBias.y, cc_matLightView, cc_shadowProjInfo.xy); pos = ApplyShadowDepthBias_Orthographic(pos, shadowBias.x, cc_shadowProjDepthInfo.x, cc_shadowProjDepthInfo.y); @@ -235,6 +248,7 @@ float CCGetLinearDepth(vec3 worldPos) { realtimeShadow = CCGetDirLightShadowFactorHard(pos); #endif + shadowNDCPosWithBias = pos; return mix(realtimeShadow, 1.0, cc_shadowNFLSInfo.w); } @@ -261,9 +275,10 @@ float CCGetLinearDepth(vec3 worldPos) { return layer; } - float CCCSMFactorBase(vec3 worldPos, vec3 N, vec2 shadowBias) + // output csmPos is non-biased position that can be used for sampling shadow map after homogeneous divid + float CCCSMFactorBase(out vec4 csmPos, out vec4 csmNDCPosWithBias, vec3 worldPos, vec3 N, vec2 shadowBias) { - vec4 csmPos = vec4(1.0); + csmPos = vec4(1.0); vec4 shadowProjDepthInfo, shadowProjInfo; vec3 shadowViewDir0, shadowViewDir1, shadowViewDir2; int level = CCGetCSMLevel(csmPos, shadowProjDepthInfo, shadowProjInfo, shadowViewDir0, shadowViewDir1, shadowViewDir2, worldPos); @@ -286,6 +301,7 @@ float CCGetLinearDepth(vec3 worldPos) { realtimeShadow = CCGetDirLightShadowFactorHard(pos); #endif + csmNDCPosWithBias = pos; return mix(realtimeShadow, 1.0, cc_shadowNFLSInfo.w); } #else @@ -293,10 +309,26 @@ float CCGetLinearDepth(vec3 worldPos) { return -1; } - float CCCSMFactorBase(vec3 worldPos, vec3 N, vec2 shadowBias) { - vec4 shadowPos = cc_matLightViewProj * vec4(worldPos, 1.0); - return CCShadowFactorBase(shadowPos, N, shadowBias); + float CCCSMFactorBase(out vec4 csmPos, out vec4 csmNDCPosWithBias, vec3 worldPos, vec3 N, vec2 shadowBias) { + csmPos = cc_matLightViewProj * vec4(worldPos, 1.0); + return CCShadowFactorBase(csmNDCPosWithBias, csmPos, N, shadowBias); } #endif + // compatible version + float CCShadowFactorBase(vec4 shadowPos, vec3 N, vec2 shadowBias) { + vec4 shadowNDCPosWithBias; + return CCShadowFactorBase(shadowNDCPosWithBias, shadowPos, N, shadowBias); + } + + float CCCSMFactorBase(vec3 worldPos, vec3 N, vec2 shadowBias) { + vec4 csmPos, csmNDCPosWithBias; + return CCCSMFactorBase(csmPos, csmNDCPosWithBias, worldPos, N, shadowBias); + } + + float CCSpotShadowFactorBase(vec4 shadowPos, vec3 worldPos, vec2 shadowBias) + { + vec4 shadowNDCPosWithBias; + return CCSpotShadowFactorBase(shadowNDCPosWithBias, shadowPos, worldPos, shadowBias); + } #endif diff --git a/editor/assets/chunks/common/shadow/native-pcf.chunk b/editor/assets/chunks/common/shadow/native-pcf.chunk index bc0e41a15d4..3b5ecd413af 100644 --- a/editor/assets/chunks/common/shadow/native-pcf.chunk +++ b/editor/assets/chunks/common/shadow/native-pcf.chunk @@ -5,6 +5,15 @@ #pragma define CC_SHADOW_PCF_SOFT_3X 2 #pragma define CC_SHADOW_PCF_SOFT_5X 3 +float SampleShadowMap (vec3 shadowNDCPos, sampler2D shadowMap) +{ + #if CC_SHADOWMAP_FORMAT == SHADOWMAP_FORMAT_RGBA8 + return unpackRGBAToDepth(texture(shadowMap, shadowNDCPos.xy)); + #else + return texture(shadowMap, shadowNDCPos.xy).x; + #endif +} + float NativePCFShadowFactorHard (vec3 shadowNDCPos, sampler2D shadowMap, vec2 shadowMapResolution) { #if CC_SHADOWMAP_FORMAT == SHADOWMAP_FORMAT_RGBA8 diff --git a/editor/assets/chunks/lighting-models/data-structures/lighting-intermediate-data.chunk b/editor/assets/chunks/lighting-models/data-structures/lighting-intermediate-data.chunk index 1da0b3f96dc..2a53a8a63ab 100644 --- a/editor/assets/chunks/lighting-models/data-structures/lighting-intermediate-data.chunk +++ b/editor/assets/chunks/lighting-models/data-structures/lighting-intermediate-data.chunk @@ -16,7 +16,10 @@ struct LightingIntermediateData #if CC_SURFACES_LIGHTING_ANISOTROPIC float anisotropyShape; #endif - +#if CC_SURFACES_LIGHTING_TRANSMITTENCE + vec4 shadowPosAndDepth; //xy: shadowmap uv, z: camera depth from pixel LVP, w: camera depth from shadowmap + vec4 transmittenceParams; //zw: min/max DepthWS for shadowmap and 0 means disable shadow transmit, x: transmit coef, y: additional transmit depth mask, 可补充shadowmap cover不到的地方,也可以在minmax屏蔽掉shadowmap之后给专门的薄片穿透 +#endif // #if CC_SURFACES_LIGHTING_SPECULAR_2ND // float specularParam2nd, specularIntensity2nd, specularRotation2nd; // for hair // vec3 specularColor2nd; @@ -52,6 +55,9 @@ void CCSurfacesLightingGetIntermediateData_PerPixel(inout LightingIntermediateDa #if CC_SURFACES_LIGHTING_ANISOTROPIC data.anisotropyShape = anisotropyShape; #endif +#if CC_SURFACES_LIGHTING_TRANSMITTENCE + data.shadowPosAndDepth = vec4(0.0, 0.0, 999999.0, 999999.0); +#endif } void CCSurfacesLightingGetIntermediateData_PerLight(inout LightingIntermediateData data, vec3 lightDirWithDist) diff --git a/editor/assets/chunks/lighting-models/data-structures/lighting-result.chunk b/editor/assets/chunks/lighting-models/data-structures/lighting-result.chunk index 97fdda2eb76..6547ad57f78 100644 --- a/editor/assets/chunks/lighting-models/data-structures/lighting-result.chunk +++ b/editor/assets/chunks/lighting-models/data-structures/lighting-result.chunk @@ -9,5 +9,11 @@ struct LightingResult float shadow, ao; vec3 lightmapColor; vec3 emissive; - //vec3 transmittance, scattered; +#if CC_SURFACES_LIGHTING_TRANSMITTENCE + vec3 transmittence; +#endif +#if CC_SURFACES_LIGHTING_TRT + vec3 directTRT, environmentTRT; +#endif + //vec3 scattered; }; diff --git a/editor/assets/chunks/lighting-models/lighting-flow/common-flow.chunk b/editor/assets/chunks/lighting-models/lighting-flow/common-flow.chunk index 2d95d922994..d735959bed3 100644 --- a/editor/assets/chunks/lighting-models/lighting-flow/common-flow.chunk +++ b/editor/assets/chunks/lighting-models/lighting-flow/common-flow.chunk @@ -25,10 +25,16 @@ float shadow = 1.0; #if CC_RECEIVE_SHADOW && CC_SHADOW_TYPE == CC_SHADOW_MAP if (cc_lightPos[i].w > 0.0 && cc_lightSizeRangeAngle[i].w > 0.0) { + vec4 shadowPos = vec4(0.0), shadowNDCPosWithBias = vec4(0.0); if (CCSurfacesLightingEnableShadow(lightingData.NoL)) { - vec4 shadowPos = cc_matLightViewProj * vec4(surfaceData.worldPos, 1.0); - shadow = CCSpotShadowFactorBase(shadowPos, worldPos, shadowBias); + shadowPos = cc_matLightViewProj * vec4(surfaceData.worldPos, 1.0); + shadow = CCSpotShadowFactorBase(shadowNDCPosWithBias, shadowPos, worldPos, shadowBias); } + #if CC_SURFACES_LIGHTING_TRANSMITTENCE + lightingData.shadowPosAndDepth.xy = shadowNDCPosWithBias.xy; + lightingData.shadowPosAndDepth.z = shadowPos.z; + lightingData.shadowPosAndDepth.w = GetViewSpaceDepthFromNDCDepth_Perspective(SampleShadowMap(shadowNDCPosWithBias.xyz, cc_spotShadowMap), shadowNDCPosWithBias.w, cc_shadowInvProjDepthInfo.x, cc_shadowInvProjDepthInfo.y); + #endif } #endif @@ -49,6 +55,13 @@ lightingResult.directDiffuse += diffuseLighting * multiplier; lightingResult.directSpecular += specularLighting * multiplier; + + #if CC_SURFACES_LIGHTING_TRANSMITTENCE + lightingResult.transmittence = CCSurfacesLightingCalculateDirectTransmittence(lightingResult, lightingData, cc_lightColor[i]); + #endif + #if CC_SURFACES_LIGHTING_TRT + CCSurfacesLightingCalculateDirectTRT(lightingResult.directTRT, lightingData, cc_lightColor[i]); + #endif } } #else @@ -66,18 +79,24 @@ lightingResult.shadow = 1.0; #if CC_RECEIVE_SHADOW && CC_SHADOW_TYPE == CC_SHADOW_MAP if (cc_mainLitDir.w > 0.0) { + vec4 shadowPos = vec4(0.0), shadowNDCPosWithBias = vec4(0.0); if (CCSurfacesLightingEnableShadow(lightingData.NoL)) { if (cc_shadowLPNNInfo.w > 0.0) { #if CC_DIR_LIGHT_SHADOW_TYPE == CC_DIR_LIGHT_SHADOW_CASCADED - lightingResult.shadow = CCCSMFactorBase(surfaceData.worldPos, lightingData.N, shadowBias); + lightingResult.shadow = CCCSMFactorBase(shadowPos, shadowNDCPosWithBias, surfaceData.worldPos, lightingData.N, shadowBias); #endif } else { #if CC_DIR_LIGHT_SHADOW_TYPE == CC_DIR_LIGHT_SHADOW_UNIFORM - vec4 shadowPos = cc_matLightViewProj * vec4(surfaceData.worldPos, 1.0); - lightingResult.shadow = CCShadowFactorBase(shadowPos, lightingData.N, shadowBias); + shadowPos = cc_matLightViewProj * vec4(surfaceData.worldPos, 1.0); + lightingResult.shadow = CCShadowFactorBase(shadowPos, shadowNDCPosWithBias, lightingData.N, shadowBias); #endif } } + #if CC_SURFACES_LIGHTING_TRANSMITTENCE + lightingData.shadowPosAndDepth.xy = shadowNDCPosWithBias.xy; + lightingData.shadowPosAndDepth.z = shadowPos.z; + lightingData.shadowPosAndDepth.w = GetViewSpaceDepthFromNDCDepth_Orthgraphic(SampleShadowMap(shadowNDCPosWithBias.xyz, cc_shadowMap), cc_shadowProjDepthInfo.x, cc_shadowProjDepthInfo.y); + #endif } #endif @@ -98,9 +117,18 @@ #endif // apply SSR, local probe & global probe - CCSurfacesLightingCalculateEnvironment(lightingResult, lightingData); + CCSurfacesLightingCalculateEnvironment(lightingResult.environmentDiffuse, lightingResult.environmentSpecular, lightingData, cc_ambientSky.w); - // CCSurfacesLightingCalculateTransmittence(lightingResult, lightingData, shadowPos); + #if CC_SURFACES_LIGHTING_TRANSMITTENCE + lightingResult.transmittence = CCSurfacesLightingCalculateDirectTransmittence(lightingResult, lightingData, cc_mainLitColor); + lightingResult.transmittence += CCSurfacesLightingCalculateEnvironmentTransmittence(lightingResult, lightingData, cc_ambientSky.w); + #endif + #if CC_SURFACES_LIGHTING_TRT + LightingIntermediateData lightingDataTRT; + CCSurfacesGetLightingIntermediateDataTRT(lightingDataTRT, lightingData, surfaceData); + CCSurfacesLightingCalculateDirectTRT(lightingResult.directTRT, lightingDataTRT, cc_mainLitColor); + CCSurfacesLightingCalculateEnvironmentTRT(lightingResult.environmentTRT, lightingDataTRT, cc_ambientSky.w); + #endif // apply screen-space shadow and ao // lightingResult.shadow/ao *= XXX; diff --git a/editor/assets/chunks/lighting-models/model-functions/standard.chunk b/editor/assets/chunks/lighting-models/model-functions/standard.chunk index ee705dcd3d1..bd8655dd3f3 100644 --- a/editor/assets/chunks/lighting-models/model-functions/standard.chunk +++ b/editor/assets/chunks/lighting-models/model-functions/standard.chunk @@ -1,7 +1,7 @@ #include #include #if CC_LIGHT_PROBE_ENABLED && CC_USE_LIGHT_PROBE -#include + #include #endif bool CCSurfacesLightingEnableShadow(in float NoL) @@ -76,14 +76,18 @@ void CCSurfacesLightingCalculateDirect(out vec3 lightingDiffuse, out vec3 lighti } #endif - -void CCSurfacesLightingCalculateEnvironment(inout LightingResult lightingResult, in LightingIntermediateData lightingData) +vec3 CalculateEnvironmentDiffuse(in LightingIntermediateData lightingData, float lightIntensity) { - float roughness = lightingData.specularParam; + // Probe + #if CC_LIGHT_PROBE_ENABLED && CC_USE_LIGHT_PROBE + return SHEvaluate(lightingData.N); + #endif + + // Hemisphere Lighting float fAmb = 0.5 - lightingData.N.y * 0.5; vec3 ambDiff = mix(cc_ambientSky.rgb, cc_ambientGround.rgb, fAmb); - vec3 envSpec = vec3(0.0); + // Diffuse Map #if CC_USE_IBL #if CC_USE_DIFFUSEMAP && (!CC_LIGHT_PROBE_ENABLED || !CC_USE_LIGHT_PROBE) // Diffuse irradiance @@ -94,7 +98,16 @@ void CCSurfacesLightingCalculateEnvironment(inout LightingResult lightingResult, ambDiff = SRGBToLinear(diffuseMap.rgb); #endif #endif + #endif + + return ambDiff.rgb * lightIntensity; +} +vec3 CalculateEnvironmentSpecular(in LightingIntermediateData lightingData, float lightIntensity) +{ + vec3 envSpec = vec3(0.0); + #if CC_USE_IBL + float roughness = lightingData.specularParam; #if CC_SURFACES_LIGHTING_ANISOTROPIC && !CC_SURFACES_LIGHTING_ANISOTROPIC_ENVCONVOLUTION_COUNT vec3 R = GetAnisotropicReflect(roughness, lightingData.anisotropyShape, lightingData.V, lightingData.N, lightingData.T, lightingData.B); #else @@ -112,19 +125,64 @@ void CCSurfacesLightingCalculateEnvironment(inout LightingResult lightingResult, #endif #endif -#if CC_LIGHT_PROBE_ENABLED && CC_USE_LIGHT_PROBE - ambDiff = SHEvaluate(lightingData.N); - lightingResult.environmentDiffuse = ambDiff; -#else - lightingResult.environmentDiffuse = ambDiff.rgb * cc_ambientSky.w; -#endif - - lightingResult.environmentSpecular = envSpec * cc_ambientSky.w; + return envSpec * lightIntensity; } -void CCSurfacesLightingCalculateTransmittence(inout LightingResult lightingResult, in LightingIntermediateData lightingData, vec3 shadowPos) +void CCSurfacesLightingCalculateEnvironment(out vec3 lightingDiffuse, out vec3 lightingSpecular, in LightingIntermediateData lightingData, float lightIntensity) { - vec3 irradiance = vec3(lightingData.NoLSat);// * lightSourceColorAndIntensity.rgb * lightSourceColorAndIntensity.w; - - vec3 transmittence = irradiance * DiffuseCoefficient_EnergyConservation; + lightingDiffuse = CalculateEnvironmentDiffuse(lightingData, lightIntensity); + lightingSpecular = CalculateEnvironmentSpecular(lightingData, lightIntensity); } + + +#if CC_SURFACES_LIGHTING_TRANSMITTENCE + vec3 CCSurfacesLightingCalculateDirectTransmittence(in LightingResult lightingResult, in LightingIntermediateData lightingData, in vec4 lightSourceColorAndIntensity) + { + vec3 backIrradiance = vec3(saturate(-lightingData.NoL)) * lightSourceColorAndIntensity.rgb * lightSourceColorAndIntensity.w; + vec3 transmitDiffuse = backIrradiance * DiffuseCoefficient_EnergyConservation; + //todo: add some + lightingData.transmittenceParams; + return vec3(0.0); + } + vec3 CCSurfacesLightingCalculateEnvironmentTransmittence(in LightingResult lightingResult, in LightingIntermediateData lightingData, float lightIntensity) + { + // negativate lightingData.N before invoking CalculateEnvironmentDiffuse + lightingData.N *= -1.0; + vec3 backIrradiance = CalculateEnvironmentDiffuse(lightingData, lightIntensity); + lightingData.transmittenceParams; + return vec3(0.0); + } +#endif + +#if CC_SURFACES_LIGHTING_TRT + // this surface function used for adjust TRT color with brdf lighting, input are lighting result and surface data + // the default function can only be defined here + #ifndef CC_SURFACES_FRAGMENT_MODIFY_TRT_SPECULAR_COLOR + vec3 SurfacesLightingGetTRTSpecularColor(float specBRDF, bool isSaturated) + { + return vec3(specBRDF); + } + #endif + + void CCSurfacesLightingCalculateDirectTRT(out vec3 TRTColor, in LightingIntermediateData lightingData, in vec4 lightSourceColorAndIntensity) + { + vec3 unused; + // light color has less influence + CCSurfacesLightingCalculateDirect(unused, TRTColor, lightingData, vec4(1.0)); + vec3 Color = SurfacesLightingGetTRTSpecularColor(TRTColor.x, true); + // todo: modify Color to add some light color influence + TRTColor *= Color * lightSourceColorAndIntensity.w; + } + + void CCSurfacesLightingCalculateEnvironmentTRT(out vec3 TRTColor, in LightingIntermediateData lightingData, float lightIntensity) + { + vec3 unused; + // light color has less influence + TRTColor = CalculateEnvironmentSpecular(lightingData, 1.0); + float brdf = length(TRTColor); + vec3 Color = SurfacesLightingGetTRTSpecularColor(brdf, false); + // todo: modify Color to add some light color influence + TRTColor *= Color * lightIntensity; + } + +#endif diff --git a/editor/assets/chunks/lighting-models/model-functions/toon.chunk b/editor/assets/chunks/lighting-models/model-functions/toon.chunk index 4e6be6f9c47..e105c271581 100644 --- a/editor/assets/chunks/lighting-models/model-functions/toon.chunk +++ b/editor/assets/chunks/lighting-models/model-functions/toon.chunk @@ -34,9 +34,9 @@ void CCSurfacesLightingCalculateDirect(out vec3 lightingDiffuse, out vec3 lighti lightingSpecular = irradiance * specularMask; } -void CCSurfacesLightingCalculateEnvironment(inout LightingResult lightingResult, in LightingIntermediateData lightingData) +void CCSurfacesLightingCalculateEnvironment(out vec3 lightingDiffuse, out vec3 lightingSpecular, in LightingIntermediateData lightingData, float lightIntensity) { - lightingResult.environmentDiffuse = vec3(0.0); - lightingResult.environmentSpecular = vec3(0.0); + lightingDiffuse = vec3(0.0); + lightingSpecular = vec3(0.0); } diff --git a/editor/assets/chunks/surfaces/data-structures/standard.chunk b/editor/assets/chunks/surfaces/data-structures/standard.chunk index 62711411f62..c83a51392dc 100644 --- a/editor/assets/chunks/surfaces/data-structures/standard.chunk +++ b/editor/assets/chunks/surfaces/data-structures/standard.chunk @@ -16,6 +16,11 @@ struct SurfacesMaterialData #if CC_SURFACES_LIGHTING_ANISOTROPIC float anisotropyShape; #endif - // float transmittanceFactor; +#if CC_SURFACES_LIGHTING_TRANSMITTENCE + vec4 transmittenceParams; +#endif +#if CC_SURFACES_LIGHTING_TRT + float roughnessTRT; +#endif // float sssCurvature; }; diff --git a/editor/assets/chunks/surfaces/default-functions/standard-fs.chunk b/editor/assets/chunks/surfaces/default-functions/standard-fs.chunk index 0930f7d185c..24a45a7e578 100644 --- a/editor/assets/chunks/surfaces/default-functions/standard-fs.chunk +++ b/editor/assets/chunks/surfaces/default-functions/standard-fs.chunk @@ -63,6 +63,24 @@ vec4 SurfacesFragmentModifyPBRParams() } #endif +#ifndef CC_SURFACES_FRAGMENT_MODIFY_TRANSMITTENCE_PARAMS +vec4 SurfacesFragmentModifytransmittenceParamss() +{ + // x: exponential transmit coef + // y: additional transmit depth mask, add light transport for area which cannot be covered by shadowmap transmittence, or stand for thin transmittence + // zw: min/max DepthWS for shadowmap, 0 means disable shadow transmit + return vec4(1.0, 0.0, 0.0, 0.0); +} +#endif + +#ifndef CC_SURFACES_FRAGMENT_MODIFY_TRT_PARAMS +vec4 SurfacesFragmentModifyTRTParams() +{ + //x: roughness + return vec4(0.5, 0.0, 0.0, 0.0); +} +#endif + // some material datas use shared raw data, avoid sample / calculate same raw data multiply times, use this function for better performance // this function invokes at last // should use corresponding shading-model header: #include before function define diff --git a/editor/assets/chunks/surfaces/effect-macros/common-macros.chunk b/editor/assets/chunks/surfaces/effect-macros/common-macros.chunk index 6939253d73e..dc6e9516f1d 100644 --- a/editor/assets/chunks/surfaces/effect-macros/common-macros.chunk +++ b/editor/assets/chunks/surfaces/effect-macros/common-macros.chunk @@ -52,6 +52,12 @@ #ifndef CC_SURFACES_USE_LEGACY_COMPATIBLE_LIGHTING #define CC_SURFACES_USE_LEGACY_COMPATIBLE_LIGHTING 0 #endif +#ifndef CC_SURFACES_LIGHTING_TRANSMITTENCE + #define CC_SURFACES_LIGHTING_TRANSMITTENCE 0 +#endif +#ifndef CC_SURFACES_LIGHTING_TRT + #define CC_SURFACES_LIGHTING_TRT 0 +#endif // render-to-color-map can disable functionality to avoid error data map #ifndef CC_SURFACES_ENABLE_DEBUG_VIEW diff --git a/editor/assets/chunks/surfaces/module-functions/standard-fs.chunk b/editor/assets/chunks/surfaces/module-functions/standard-fs.chunk index e8f097fe96e..551de6d3a38 100644 --- a/editor/assets/chunks/surfaces/module-functions/standard-fs.chunk +++ b/editor/assets/chunks/surfaces/module-functions/standard-fs.chunk @@ -31,6 +31,14 @@ void CCSurfacesFragmentGetMaterialData(inout SurfacesMaterialData surfaceData) surfaceData.metallic = pbr.z; surfaceData.specularIntensity = pbr.w; +#if CC_SURFACES_LIGHTING_TRANSMITTENCE + surfaceData.transmittenceParams =SurfacesFragmentModifytransmittenceParamss(); +#endif +#if CC_SURFACES_LIGHTING_TRT + vec4 trt = SurfacesFragmentModifyTRTParams(); + surfaceData.roughnessTRT = trt.x; +#endif + SurfacesFragmentModifySharedData(surfaceData); #if CC_USE_DEBUG_VIEW == CC_SURFACES_DEBUG_VIEW_COMPOSITE_AND_MISC @@ -86,8 +94,21 @@ void CCSurfacesInitializeLightingIntermediateData(inout LightingIntermediateData void CCSurfacesLightingCalculateIntermediateData_PerLight(inout LightingIntermediateData lightingData, in SurfacesMaterialData surfaceData, vec3 lightDirWithDist) { CCSurfacesLightingGetIntermediateData_PerLight(lightingData, lightDirWithDist); +#if CC_SURFACES_LIGHTING_TRANSMITTENCE + lightingData.transmittenceParams = surfaceData.transmittenceParams; +#endif } +// pass original lightingData, get TRT lightingData +#if CC_SURFACES_LIGHTING_TRT +void CCSurfacesGetLightingIntermediateDataTRT(out LightingIntermediateData lightingDataTRT, in LightingIntermediateData lightingData, in SurfacesMaterialData surfaceData) +{ + lightingDataTRT = lightingData; + lightingDataTRT.specularParam = surfaceData.roughnessTRT; +} +#endif + + // Copy material data to lighting results void CCSurfacesInitializeLightingResult(inout LightingResult lightingResult, in SurfacesMaterialData surfaceData) { @@ -124,12 +145,19 @@ vec4 CCSurfacesShading(in SurfacesMaterialData surfaceData, in LightingResult li color.xyz += ( lightingResult.lightmapColor * lightingResult.diffuseColorWithLighting + lightingResult.directDiffuse * lightingResult.diffuseColorWithLighting - + lightingResult.directSpecular * lightingResult.specularColorWithLighting) + + lightingResult.directSpecular * lightingResult.specularColorWithLighting + #if CC_SURFACES_LIGHTING_TRT + + lightingResult.directTRT * lightingResult.specularColorWithLighting + #endif + ) * lightingResult.shadow; color.xyz += ( lightingResult.environmentDiffuse * lightingResult.diffuseColorWithLighting + lightingResult.environmentSpecular * lightingResult.specularColorWithLighting) + #if CC_SURFACES_LIGHTING_TRT + + lightingResult.environmentTRT * lightingResult.specularColorWithLighting + #endif * lightingResult.ao; color.xyz += lightingResult.emissive; From 6877ff94388114382ddb2d4c2eead5175a014cd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leslie=20Leigh=20=28=E6=9D=8E=E7=9A=84=E5=BA=8F=29?= Date: Mon, 24 Oct 2022 15:39:43 +0800 Subject: [PATCH 067/829] [3.7] Marionette: implements some state machine operations (#12434) * Marionette: implements some state machine operations * Fix * Tweak * Rename assign -> copyTo * Fix --- .../marionette/animation-blend-1d.ts | 7 +- .../marionette/animation-blend-2d.ts | 7 +- .../marionette/animation-blend-direct.ts | 7 +- cocos/animation/marionette/animation-blend.ts | 11 +- ...mation-graph-editor-extras-clone-helper.ts | 21 ++ cocos/animation/marionette/animation-graph.ts | 74 +++- cocos/animation/marionette/clip-motion.ts | 3 + cocos/animation/marionette/motion-state.ts | 10 +- cocos/animation/marionette/state.ts | 12 + editor/exports/new-gen-anim.ts | 6 + .../src/marionette/state-machine-operation.ts | 132 +++++++ editor/src/marionette/visit.ts | 39 +++ tests/animation/animation-graph-asset.test.ts | 324 ++++++++++++++++++ 13 files changed, 631 insertions(+), 22 deletions(-) create mode 100644 cocos/animation/marionette/animation-graph-editor-extras-clone-helper.ts create mode 100644 editor/src/marionette/state-machine-operation.ts create mode 100644 tests/animation/animation-graph-asset.test.ts diff --git a/cocos/animation/marionette/animation-blend-1d.ts b/cocos/animation/marionette/animation-blend-1d.ts index ddf972252c0..ff57a11ad04 100644 --- a/cocos/animation/marionette/animation-blend-1d.ts +++ b/cocos/animation/marionette/animation-blend-1d.ts @@ -14,12 +14,12 @@ class AnimationBlend1DItem extends AnimationBlendItem { public clone () { const that = new AnimationBlend1DItem(); - this._assign(that); + this._copyTo(that); return that; } - protected _assign (that: AnimationBlend1DItem) { - super._assign(that); + protected _copyTo (that: AnimationBlend1DItem) { + super._copyTo(that); that.threshold = this.threshold; return that; } @@ -46,6 +46,7 @@ export class AnimationBlend1D extends AnimationBlend { public clone () { const that = new AnimationBlend1D(); + this.copyTo(that); that._items = this._items.map((item) => item.clone()); that.param = this.param.clone(); return that; diff --git a/cocos/animation/marionette/animation-blend-2d.ts b/cocos/animation/marionette/animation-blend-2d.ts index e0b4c477348..d6cbba66f82 100644 --- a/cocos/animation/marionette/animation-blend-2d.ts +++ b/cocos/animation/marionette/animation-blend-2d.ts @@ -24,12 +24,12 @@ class AnimationBlend2DItem extends AnimationBlendItem { public clone () { const that = new AnimationBlend2DItem(); - this._assign(that); + this._copyTo(that); return that; } - protected _assign (that: AnimationBlend2DItem) { - super._assign(that); + protected _copyTo (that: AnimationBlend2DItem) { + super._copyTo(that); Vec2.copy(that.threshold, this.threshold); return that; } @@ -63,6 +63,7 @@ export class AnimationBlend2D extends AnimationBlend { public clone () { const that = new AnimationBlend2D(); + this.copyTo(that); that._items = this._items.map((item) => item?.clone() ?? null); that.paramX = this.paramX.clone(); that.paramY = this.paramY.clone(); diff --git a/cocos/animation/marionette/animation-blend-direct.ts b/cocos/animation/marionette/animation-blend-direct.ts index d27e4547dbd..b71e646ea29 100644 --- a/cocos/animation/marionette/animation-blend-direct.ts +++ b/cocos/animation/marionette/animation-blend-direct.ts @@ -12,12 +12,12 @@ class AnimationBlendDirectItem extends AnimationBlendItem { public clone () { const that = new AnimationBlendDirectItem(); - this._assign(that); + this._copyTo(that); return that; } - protected _assign (that: AnimationBlendDirectItem) { - super._assign(that); + protected _copyTo (that: AnimationBlendDirectItem) { + super._copyTo(that); that.weight = this.weight; return that; } @@ -40,6 +40,7 @@ export class AnimationBlendDirect extends AnimationBlend { public clone () { const that = new AnimationBlendDirect(); + this.copyTo(that); that._items = this._items.map((item) => item?.clone() ?? null); return that; } diff --git a/cocos/animation/marionette/animation-blend.ts b/cocos/animation/marionette/animation-blend.ts index bf2bdccbeeb..49b70ef3fa9 100644 --- a/cocos/animation/marionette/animation-blend.ts +++ b/cocos/animation/marionette/animation-blend.ts @@ -7,6 +7,8 @@ import { ClipStatus } from './graph-eval'; import { EditorExtendable } from '../../core/data/editor-extendable'; import { CLASS_NAME_PREFIX_ANIM } from '../define'; import { getMotionRuntimeID, RUNTIME_ID_ENABLED } from './graph-debug'; +import { editorExtrasTag } from '../../core/data'; +import { cloneAnimationGraphEditorExtrasFrom } from './animation-graph-editor-extras-clone-helper'; export interface AnimationBlend extends Motion, EditorExtendable { [createEval] (_context: MotionEvalContext): MotionEval | null; @@ -19,11 +21,11 @@ export class AnimationBlendItem { public clone () { const that = new AnimationBlendItem(); - this._assign(that); + this._copyTo(that); return that; } - protected _assign (that: AnimationBlendItem) { + protected _copyTo (that: AnimationBlendItem) { that.motion = this.motion?.clone() ?? null; return that; } @@ -33,6 +35,11 @@ export class AnimationBlendItem { export class AnimationBlend extends EditorExtendable implements Motion { @serializable name = ''; + + public copyTo (that: AnimationBlend) { + that.name = this.name; + that[editorExtrasTag] = cloneAnimationGraphEditorExtrasFrom(this); + } } export class AnimationBlendEval implements MotionEval { diff --git a/cocos/animation/marionette/animation-graph-editor-extras-clone-helper.ts b/cocos/animation/marionette/animation-graph-editor-extras-clone-helper.ts new file mode 100644 index 00000000000..bbbe4dac4c4 --- /dev/null +++ b/cocos/animation/marionette/animation-graph-editor-extras-clone-helper.ts @@ -0,0 +1,21 @@ +import { EditorExtendableObject, editorExtrasTag } from '../../core/data/editor-extras-tag'; + +/** + * Clones the editor extras from an animation-graph-specific object. + * @internal This is a HACKY way. + * + * If the editor extras from an animation-graph-specific object has a method called `clone`, + * that method would be called to perform a clone operation. + * The return value would be used as the clone result. + * The method `clone` has the signature: `(host: EditorExtendableObject) => unknown`. + */ +export function cloneAnimationGraphEditorExtrasFrom (object: EditorExtendableObject): unknown { + const editorExtras = object[editorExtrasTag]; + if (typeof editorExtras === 'object' && editorExtras) { + const maybeCloneableEditorExtras = editorExtras as { + clone?(host: EditorExtendableObject): unknown; + }; + return maybeCloneableEditorExtras.clone?.(object); + } + return undefined; +} diff --git a/cocos/animation/marionette/animation-graph.ts b/cocos/animation/marionette/animation-graph.ts index 0ddd0443e49..4d3d3ce877f 100644 --- a/cocos/animation/marionette/animation-graph.ts +++ b/cocos/animation/marionette/animation-graph.ts @@ -52,6 +52,10 @@ class Transition extends EditorExtendable implements OwnedBy, Tran } } + public copyTo (that: Transition) { + that.conditions = this.conditions.map((condition) => condition.clone()); + } + [ownerSymbol]: StateMachine | undefined; } @@ -130,6 +134,17 @@ class AnimationTransition extends Transition { : TransitionInterruptionSource.NONE; } + public copyTo (that: AnimationTransition) { + super.copyTo(that); + that.duration = this.duration; + that.relativeDuration = this.relativeDuration; + that.exitConditionEnabled = this.exitConditionEnabled; + that.exitCondition = this.exitCondition; + that.destinationStart = this.destinationStart; + that.relativeDestinationStart = this.relativeDestinationStart; + that.interruptible = this.interruptible; + } + /** * @internal This field is exposed for **internal** usage. */ @@ -154,6 +169,13 @@ export function isAnimationTransition (transition: TransitionView): transition i @ccclass(`${CLASS_NAME_PREFIX_ANIM}EmptyState`) export class EmptyState extends State { public declare __brand: 'EmptyState'; + + public _clone () { + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + const that = new EmptyState(); + this.copyTo(that); + return that; + } } @ccclass(`${CLASS_NAME_PREFIX_ANIM}EmptyStateTransition`) @@ -180,6 +202,13 @@ export class EmptyStateTransition extends Transition { */ @serializable public relativeDestinationStart = false; + + public copyTo (that: EmptyStateTransition) { + super.copyTo(that); + that.duration = this.duration; + that.destinationStart = this.destinationStart; + that.relativeDestinationStart = this.relativeDestinationStart; + } } @ccclass('cc.animation.StateMachine') @@ -557,8 +586,22 @@ export class StateMachine extends EditorExtendable { } } - public clone () { - const that = new StateMachine(); + public copyTo (that: StateMachine) { + // Clear that first + const thatStatesOld = that._states.filter((state) => { + switch (state) { + case that._entryState: + case that._exitState: + case that._anyState: + return true; + default: + return false; + } + }); + for (const thatStateOld of thatStatesOld) { + that.remove(thatStateOld); + } + const stateMap = new Map(); for (const state of this._states) { switch (state) { @@ -572,8 +615,8 @@ export class StateMachine extends EditorExtendable { stateMap.set(state, that._anyState); break; default: - if (state instanceof MotionState || state instanceof SubStateMachine) { - const thatState = state.clone(); + if (state instanceof MotionState || state instanceof SubStateMachine || state instanceof EmptyState) { + const thatState = state._clone(); that._addState(thatState); stateMap.set(state, thatState); } else { @@ -590,11 +633,19 @@ export class StateMachine extends EditorExtendable { thatTransition.conditions = transition.conditions.map((condition) => condition.clone()); if (thatTransition instanceof AnimationTransition) { assertIsTrue(transition instanceof AnimationTransition); - thatTransition.duration = transition.duration; - thatTransition.exitConditionEnabled = transition.exitConditionEnabled; - thatTransition.exitCondition = transition.exitCondition; + transition.copyTo(thatTransition); + } else if (thatTransition instanceof EmptyStateTransition) { + assertIsTrue(transition instanceof EmptyStateTransition); + transition.copyTo(thatTransition); + } else { + transition.copyTo(thatTransition); } } + } + + public clone () { + const that = new StateMachine(); + this.copyTo(that); return that; } @@ -611,9 +662,14 @@ export class SubStateMachine extends InteractiveState { return this._stateMachine; } - public clone () { + public copyTo (that: SubStateMachine) { + super.copyTo(that); + this._stateMachine.copyTo(that._stateMachine); + } + + public _clone () { const that = new SubStateMachine(); - that._stateMachine = this._stateMachine.clone(); + this.copyTo(that); return that; } diff --git a/cocos/animation/marionette/clip-motion.ts b/cocos/animation/marionette/clip-motion.ts index a23558ab85a..33b6b3dfaf3 100644 --- a/cocos/animation/marionette/clip-motion.ts +++ b/cocos/animation/marionette/clip-motion.ts @@ -1,7 +1,9 @@ +import { editorExtrasTag } from '../../core/data/editor-extras-tag'; import { ccclass, type } from '../../core/data/class-decorator'; import { EditorExtendable } from '../../core/data/editor-extendable'; import { AnimationClip } from '../animation-clip'; import { AnimationState } from '../animation-state'; +import { cloneAnimationGraphEditorExtrasFrom } from './animation-graph-editor-extras-clone-helper'; import { createEval } from './create-eval'; import { getMotionRuntimeID, GRAPH_DEBUG_ENABLED, pushWeight, RUNTIME_ID_ENABLED } from './graph-debug'; import { ClipStatus } from './graph-eval'; @@ -26,6 +28,7 @@ export class ClipMotion extends EditorExtendable implements Motion { public clone () { const that = new ClipMotion(); that.clip = this.clip; + that[editorExtrasTag] = cloneAnimationGraphEditorExtrasFrom(this); return that; } } diff --git a/cocos/animation/marionette/motion-state.ts b/cocos/animation/marionette/motion-state.ts index 56b3e5f46c6..445e385c42e 100644 --- a/cocos/animation/marionette/motion-state.ts +++ b/cocos/animation/marionette/motion-state.ts @@ -21,12 +21,18 @@ export class MotionState extends InteractiveState { @serializable public speedMultiplierEnabled = false; - public clone () { - const that = new MotionState(); + public copyTo (that: MotionState) { + super.copyTo(that); that.motion = this.motion?.clone() ?? null; that.speed = this.speed; that.speedMultiplier = this.speedMultiplier; that.speedMultiplierEnabled = this.speedMultiplierEnabled; + return this; + } + + public _clone () { + const that = new MotionState(); + this.copyTo(that); return that; } } diff --git a/cocos/animation/marionette/state.ts b/cocos/animation/marionette/state.ts index 000ff71a9a3..c3d3601f8a7 100644 --- a/cocos/animation/marionette/state.ts +++ b/cocos/animation/marionette/state.ts @@ -6,6 +6,8 @@ import { CLASS_NAME_PREFIX_ANIM } from '../define'; import { StateMachineComponent } from './state-machine-component'; import { remove } from '../../core/utils/array'; import { instantiate } from '../../core/data/instantiate'; +import { editorExtrasTag } from '../../core/data'; +import { cloneAnimationGraphEditorExtrasFrom } from './animation-graph-editor-extras-clone-helper'; export const outgoingsSymbol = Symbol('[[Outgoing transitions]]'); @@ -25,6 +27,11 @@ export class State extends EditorExtendable implements OwnedBy = Constructor; @@ -54,6 +61,11 @@ export class InteractiveState extends State { return instantiatedComponents; } + public copyTo (that: InteractiveState) { + super.copyTo(that); + that._components = this.instantiateComponents(); + } + @serializable private _components: StateMachineComponent[] = []; } diff --git a/editor/exports/new-gen-anim.ts b/editor/exports/new-gen-anim.ts index 260a4307293..9bb29f0814c 100644 --- a/editor/exports/new-gen-anim.ts +++ b/editor/exports/new-gen-anim.ts @@ -29,7 +29,13 @@ export type { TransitionPreviewerTimelineStats, } from '../src/marionette/preview'; +export { + cloneState, + turnMotionStateIntoSubStateMachine, +} from '../src/marionette/state-machine-operation'; + export { visitAnimationClips, visitAnimationClipsInController, + visitAnimationGraphEditorExtras, } from '../src/marionette/visit'; diff --git a/editor/src/marionette/state-machine-operation.ts b/editor/src/marionette/state-machine-operation.ts new file mode 100644 index 00000000000..a1a2f03eeff --- /dev/null +++ b/editor/src/marionette/state-machine-operation.ts @@ -0,0 +1,132 @@ +import { + EmptyStateTransition, + State, + StateMachine, + Transition, + isAnimationTransition, + EmptyState, + SubStateMachine, +} from "../../../cocos/animation/marionette/animation-graph"; +import { MotionState } from "../../../cocos/animation/marionette/motion-state"; +import { assertIsTrue } from "../../../cocos/core/data/utils/asserts"; + +function copyTransitionConditions(lhs: Transition, rhs: Transition) { + lhs.conditions = rhs.conditions.map((condition) => condition.clone()); +} + +function copyTransition(lhs: T, rhs: T) { + if (isAnimationTransition(lhs)) { + assertIsTrue(isAnimationTransition(rhs)); + rhs.copyTo(lhs); + } else if (lhs instanceof EmptyStateTransition) { + assertIsTrue(rhs instanceof EmptyStateTransition); + rhs.copyTo(lhs); + } else { + rhs.copyTo(lhs); + } +} + +/** + * Clones a state into same state machine. + * @param stateMachine The state machine within which the motion state locates. + * @param state The state. + * @param includeTransitions If true, transitions are also cloned. + * @returns The newly created state. + * + * For each editor extras object attached on animation-graph-specific objects, + * if the editor extras object has a method called `clone`, + * that method would be called to perform a clone operation on that editor extras object. + * The return value would be used as the clone result. + * The method `clone` has the signature: `(host: EditorExtendableObject) => unknown`. + * Otherwise, if no `clone` method provide, the new editor extras would be set to undefined. + */ +export function cloneState( + stateMachine: StateMachine, + state: TState, + includeTransitions: boolean, +): TState; + +/** + * Clones a state into maybe another state machine. + * @param stateMachine The state machine within which the motion state locates. + * @param state The state. + * @param targetStateMachine Target state machine + * @returns The newly created state. + * + * For each editor extras object attached on animation-graph-specific objects, + * if the editor extras object has a method called `clone`, + * that method would be called to perform a clone operation on that editor extras object. + * The return value would be used as the clone result. + * The method `clone` has the signature: `(host: EditorExtendableObject) => unknown`. + * Otherwise, if no `clone` method provide, the new editor extras would be set to undefined. + */ +export function cloneState( + stateMachine: StateMachine, + state: MotionState | EmptyState | SubStateMachine, + targetStateMachine: StateMachine, +): SubStateMachine; + +export function cloneState(stateMachine: StateMachine, state: MotionState | EmptyState | SubStateMachine, includeTransitions: boolean | StateMachine) { + const newStateOwner = typeof includeTransitions === 'boolean' ? stateMachine : includeTransitions; + let newState: State; + if (state instanceof MotionState) { + const newMotionState = newState = newStateOwner.addMotion(); + state.copyTo(newMotionState); + } else if (state instanceof EmptyState) { + const newEmptyState = newState = newStateOwner.addEmpty(); + state.copyTo(newEmptyState); + } else /* if (state instanceof SubStateMachine) */ { + const newSubStateMachine = newState = newStateOwner.addSubStateMachine(); + state.copyTo(newSubStateMachine); + } + if (includeTransitions && stateMachine === newStateOwner) { + const incomings = stateMachine.getIncomings(state); + for (const incoming of incomings) { + const newIncoming = stateMachine.connect(incoming.from, newState); + copyTransition(newIncoming, incoming); + } + const outgoings = stateMachine.getOutgoings(state); + for (const outgoing of outgoings) { + const newOutgoing = stateMachine.connect(newState, outgoing.to); + copyTransition(newOutgoing, outgoing); + } + } + return newState; +} + +/** + * Turns a motion state into a new sub state machine. + * @param stateMachine The state machine within which the motion state locates. + * @param state The motion state. + * @returns The newly created sub state machine. + */ +export function turnMotionStateIntoSubStateMachine(stateMachine: StateMachine, state: MotionState) { + // Create new state. + const subStateMachine = stateMachine.addSubStateMachine(); + subStateMachine.name = state.name; + + const newMotionState = subStateMachine.stateMachine.addMotion(); + state.copyTo(newMotionState); + subStateMachine.stateMachine.connect(subStateMachine.stateMachine.entryState, newMotionState); + + // Connect. + const incomings = stateMachine.getIncomings(state); + for (const incoming of incomings) { + const newIncoming = stateMachine.connect(incoming.from, subStateMachine); + copyTransition(newIncoming, incoming); + } + const outgoings = stateMachine.getOutgoings(state); + for (const outgoing of outgoings) { + const newOutgoingInternal = subStateMachine.stateMachine.connect( + newMotionState, subStateMachine.stateMachine.exitState); + copyTransition(newOutgoingInternal, outgoing); + const newOutgoingExternal = stateMachine.connect( + subStateMachine, outgoing.to); + copyTransitionConditions(newOutgoingExternal, outgoing); + } + + // Remove old one. + stateMachine.remove(state); + + return subStateMachine; +} diff --git a/editor/src/marionette/visit.ts b/editor/src/marionette/visit.ts index b804455a562..65289e7c486 100644 --- a/editor/src/marionette/visit.ts +++ b/editor/src/marionette/visit.ts @@ -12,6 +12,45 @@ import { import { ClipMotion } from "../../../cocos/animation/marionette/clip-motion"; import { Motion } from "../../../cocos/animation/marionette/motion"; import { MotionState } from "../../../cocos/animation/marionette/motion-state"; +import { EditorExtendableObject } from "../../../cocos/core/data/editor-extras-tag"; + +export function* visitAnimationGraphEditorExtras(animationGraph: AnimationGraph): Generator { + for (const layer of animationGraph.layers) { + yield* visitStateMachine(layer.stateMachine); + } + + function* visitStateMachine(stateMachine: StateMachine): Generator { + yield stateMachine; + for (const state of stateMachine.states()) { + yield state; + if (state instanceof MotionState) { + const motion = state.motion; + if (!motion) { + continue; + } + yield* visitMotion(motion); + } else if (state instanceof SubStateMachine) { + yield* visitStateMachine(state.stateMachine); + } + } + for (const transition of stateMachine.transitions()) { + yield transition; + } + } + + function* visitMotion(motion: Motion) { + yield motion; + if (motion instanceof AnimationBlend1D || + motion instanceof AnimationBlend2D || + motion instanceof AnimationBlendDirect) { + for (const { motion: childMotion } of motion.items) { + if (childMotion) { + yield* visitMotion(childMotion); + } + } + } + } +} export function* visitAnimationClips(animationGraph: AnimationGraph): Generator { for (const layer of animationGraph.layers) { diff --git a/tests/animation/animation-graph-asset.test.ts b/tests/animation/animation-graph-asset.test.ts new file mode 100644 index 00000000000..6b22e1331b8 --- /dev/null +++ b/tests/animation/animation-graph-asset.test.ts @@ -0,0 +1,324 @@ +import { Vec2 } from "../../cocos/core"; +import { AnimationClip } from "../../cocos/animation/animation-clip"; +import { AnimationBlend1D } from "../../cocos/animation/marionette/animation-blend-1d"; +import { AnimationBlend2D } from "../../cocos/animation/marionette/animation-blend-2d"; +import { AnimationGraph, AnimationTransition, EmptyState, EmptyStateTransition, StateMachine, SubStateMachine, Transition } from "../../cocos/animation/marionette/animation-graph"; +import { ClipMotion } from "../../cocos/animation/marionette/clip-motion"; +import { BinaryCondition, Condition, TriggerCondition, UnaryCondition } from "../../cocos/animation/marionette/condition"; +import { Motion } from "../../cocos/animation/marionette/motion"; +import { MotionState } from "../../cocos/animation/marionette/motion-state"; +import { Bindable } from "../../cocos/animation/marionette/parametric"; +import { assertIsTrue } from "../../cocos/core/data/utils/asserts"; + +describe('Animation graph asset', () => { + test('Asset operation: clone or copy', () => { + const animationGraph = new AnimationGraph(); + const mainLayer = animationGraph.addLayer(); + + // Motion state + { + const motionState = mainLayer.stateMachine.addMotion(); + motionState.name = 'MotionStateName'; + motionState.speed = 0.1; + motionState.speedMultiplier = 'MotionState.speedMultiplier'; + motionState.speedMultiplierEnabled = true; + motionState.motion = null; + const newMotionState = mainLayer.stateMachine.addMotion(); + motionState.copyTo(newMotionState); + assertsEqualMotionState(newMotionState, motionState); + } + + // Clip Motion + { + const clipMotion = new ClipMotion(); + clipMotion.clip = new AnimationClip(); + const newClipMotion = clipMotion.clone(); + assertsEqualClipMotion(newClipMotion, clipMotion); + } + + // Animation Blend 1D + { + const animationBlend = new AnimationBlend1D(); + animationBlend.param.value = 0.6; + animationBlend.param.variable = 'AnimationBlend1DParam'; + const animationBlendItems = [new AnimationBlend1D.Item(), new AnimationBlend1D.Item()]; + const animationBlendItem0Motion = animationBlendItems[0].motion = new ClipMotion(); + animationBlendItem0Motion.clip = new AnimationClip(); + animationBlendItems[0].threshold = 0.2; + animationBlendItems[1].threshold = 0.3; + animationBlend.items = animationBlendItems; + const newAnimationBlend = animationBlend.clone(); + assertsEqualAnimationBlend1D(newAnimationBlend, animationBlend); + } + + // Animation Blend 2D + { + const animationBlend = new AnimationBlend2D(); + animationBlend.paramX.value = 0.6; + animationBlend.paramX.variable = 'AnimationBlend2DParamX'; + animationBlend.paramY.value = 0.7; + animationBlend.paramY.variable = 'AnimationBlend2DParamY'; + const animationBlendItems = [new AnimationBlend2D.Item(), new AnimationBlend2D.Item()]; + const animationBlendItem0Motion = animationBlendItems[0].motion = new ClipMotion(); + animationBlendItem0Motion.clip = new AnimationClip(); + animationBlendItems[0].threshold = new Vec2(0.2, 0.3); + animationBlendItems[1].threshold = new Vec2(0.4, 0.8); + animationBlend.items = animationBlendItems; + const newAnimationBlend = animationBlend.clone(); + assertsEqualAnimationBlend2D(newAnimationBlend, animationBlend); + } + + // Empty state + { + const emptyState = mainLayer.stateMachine.addEmpty(); + emptyState.name = 'EmptyStateX'; + const newEmptyState = mainLayer.stateMachine.addEmpty(); + emptyState.copyTo(newEmptyState); + assertsEqualEmptyState(newEmptyState, emptyState); + } + + // Sub state machine + { + const subStateMachine = mainLayer.stateMachine.addSubStateMachine(); + const m = subStateMachine.stateMachine.addMotion(); + const clipMotion = m.motion = new ClipMotion(); + clipMotion.clip = new AnimationClip(); + subStateMachine.stateMachine.connect(subStateMachine.stateMachine.entryState, m); + subStateMachine.stateMachine.connect(m, subStateMachine.stateMachine.exitState); + const newSubStateMachine = mainLayer.stateMachine.addSubStateMachine(); + subStateMachine.copyTo(newSubStateMachine); + assertsEqualSubStateMachine(newSubStateMachine, subStateMachine); + } + + // Animation transition + { + const m1 = mainLayer.stateMachine.addMotion(); + const m2 = mainLayer.stateMachine.addMotion(); + const t1 = mainLayer.stateMachine.connect(m1, m2); + const [cond] = t1.conditions = [new BinaryCondition()]; + cond.operator = BinaryCondition.Operator.GREATER_THAN_OR_EQUAL_TO; + cond.lhs.variable = 'Lhs'; + cond.rhs.value = 0.618; + t1.duration = 0.1; + t1.relativeDuration = true; + t1.exitConditionEnabled = true; + t1.exitCondition = 0.2; + t1.destinationStart = 0.3; + t1.relativeDestinationStart = true; + t1.interruptible = true; + const t2 = mainLayer.stateMachine.connect(m1, m2); + // @ts-expect-error Type mismatch + t1.copyTo(t2); + assertsEqualAnimationTransition(t1, t2); + } + + // Empty state transition + { + const m1 = mainLayer.stateMachine.addEmpty(); + const m2 = mainLayer.stateMachine.addMotion(); + const t1 = mainLayer.stateMachine.connect(m1, m2); + const [cond] = t1.conditions = [new BinaryCondition()]; + cond.operator = BinaryCondition.Operator.GREATER_THAN_OR_EQUAL_TO; + cond.lhs.variable = 'Lhs'; + cond.rhs.value = 0.618; + t1.duration = 0.1; + t1.destinationStart = 0.3; + t1.relativeDestinationStart = true; + const t2 = mainLayer.stateMachine.connect(m1, m2); + t1.copyTo(t2); + assertsEqualEmptyStateTransition(t1, t2); + } + + // Plain transition + { + const m2 = mainLayer.stateMachine.addMotion(); + const t1 = mainLayer.stateMachine.connect(mainLayer.stateMachine.entryState, m2); + const [cond] = t1.conditions = [new BinaryCondition()]; + cond.operator = BinaryCondition.Operator.GREATER_THAN_OR_EQUAL_TO; + cond.lhs.variable = 'Lhs'; + cond.rhs.value = 0.618; + const t2 = mainLayer.stateMachine.connect(mainLayer.stateMachine.entryState, m2); + t1.copyTo(t2); + assertsEqualBaseTransition(t1, t2); + } + + // Unary condition + { + const unaryCondition = new UnaryCondition(); + unaryCondition.operator = UnaryCondition.Operator.TRUTHY; + unaryCondition.operand.value = true; + unaryCondition.operand.variable = 'UnaryConditionOperand'; + const newUnaryCondition = unaryCondition.clone(); + assertsEqualUnaryCondition(newUnaryCondition, unaryCondition); + } + + // Binary condition + { + const binaryCondition = new BinaryCondition(); + binaryCondition.operator = BinaryCondition.Operator.GREATER_THAN_OR_EQUAL_TO; + binaryCondition.lhs.value = 0.618; + binaryCondition.lhs.variable = 'BinaryConditionLhs'; + binaryCondition.rhs.value = 6666; + binaryCondition.rhs.variable = 'BinaryConditionRhs'; + const newBinaryCondition = binaryCondition.clone(); + assertsEqualBinaryCondition(newBinaryCondition, binaryCondition); + } + + // Trigger condition + { + const triggerCondition = new TriggerCondition(); + triggerCondition.trigger = 'Trigger'; + const newTriggerCondition = triggerCondition.clone(); + assertsEqualTriggerCondition(newTriggerCondition, triggerCondition); + } + + function assertsEqualMotionState(lhs: MotionState, rhs: MotionState) { + expect(lhs.name).toBe(rhs.name); + expect(lhs.speed).toBe(rhs.speed); + expect(lhs.speedMultiplier).toBe(rhs.speedMultiplier); + expect(lhs.speedMultiplierEnabled).toBe(rhs.speedMultiplierEnabled); + assertsEqualOptionalMotion(lhs.motion, rhs.motion); + } + + function assertsEqualEmptyState(lhs: EmptyState, rhs: EmptyState) { + expect(lhs.name).toBe(rhs.name); + } + + function assertsEqualSubStateMachine(lhs: SubStateMachine, rhs: SubStateMachine) { + expect(lhs.name).toBe(rhs.name); + assertsEqualStateMachine(lhs.stateMachine, rhs.stateMachine); + } + + function assertsEqualStateMachine(lhs: StateMachine, rhs: StateMachine) { + // Simplified check... + const lhsStates = [...lhs.states()]; + const rhsStates = [...rhs.states()]; + expect(lhsStates.length).toBe(rhsStates.length); + const lhsTransitions = [...lhs.transitions()]; + const rhsTransitions = [...rhs.transitions()]; + expect(lhsTransitions.length).toBe(rhsTransitions.length); + } + + function assertsEqualBaseTransition(lhs: Transition, rhs: Transition) { + expect(lhs.conditions).toHaveLength(rhs.conditions.length); + for (let i = 0; i < lhs.conditions.length; ++i) { + assertsEqualCondition(lhs.conditions[i], rhs.conditions[i]); + } + } + + function assertsEqualAnimationTransition(lhs: AnimationTransition, rhs: AnimationTransition) { + assertsEqualBaseTransition(lhs, rhs); + expect(lhs.duration).toBe(rhs.duration); + expect(lhs.relativeDuration).toBe(rhs.relativeDuration); + expect(lhs.exitConditionEnabled).toBe(rhs.exitConditionEnabled); + expect(lhs.exitCondition).toBe(rhs.exitCondition); + expect(lhs.destinationStart).toBe(rhs.destinationStart); + expect(lhs.relativeDestinationStart).toBe(rhs.relativeDestinationStart); + expect(lhs.interruptible).toBe(rhs.interruptible); + } + + function assertsEqualEmptyStateTransition(lhs: EmptyStateTransition, rhs: EmptyStateTransition) { + assertsEqualBaseTransition(lhs, rhs); + expect(lhs.duration).toBe(rhs.duration); + expect(lhs.destinationStart).toBe(rhs.destinationStart); + expect(lhs.relativeDestinationStart).toBe(rhs.relativeDestinationStart); + } + + function assertsEqualCondition(lhs: Condition, rhs: Condition) { + if (lhs instanceof UnaryCondition) { + expect(rhs).toBeInstanceOf(UnaryCondition); + assertsEqualUnaryCondition(lhs, rhs as UnaryCondition); + } else if (lhs instanceof BinaryCondition) { + expect(rhs).toBeInstanceOf(BinaryCondition); + assertsEqualBinaryCondition(lhs, rhs as BinaryCondition); + } else if (lhs instanceof TriggerCondition) { + expect(rhs).toBeInstanceOf(TriggerCondition); + assertsEqualTriggerCondition(lhs, rhs as TriggerCondition); + } else { + assertIsTrue(false); + } + } + + function assertsEqualUnaryCondition(lhs: UnaryCondition, rhs: UnaryCondition) { + expect(lhs.operator).toBe(rhs.operator); + assertsEqualBindable(lhs.operand, rhs.operand); + } + + function assertsEqualBinaryCondition(lhs: BinaryCondition, rhs: BinaryCondition) { + expect(lhs.operator).toBe(rhs.operator); + assertsEqualBindable(lhs.lhs, rhs.lhs); + assertsEqualBindable(lhs.rhs, rhs.rhs); + } + + function assertsEqualTriggerCondition(lhs: TriggerCondition, rhs: TriggerCondition) { + expect(lhs.trigger).toBe(rhs.trigger); + } + + function assertsEqualMotion(lhs: Motion, rhs: Motion) { + if (lhs instanceof ClipMotion) { + expect(rhs).toBeInstanceOf(ClipMotion); + assertsEqualClipMotion(lhs, rhs as ClipMotion); + } else if (lhs instanceof AnimationBlend1D) { + expect(rhs).toBeInstanceOf(AnimationBlend1D); + assertsEqualAnimationBlend1D(lhs, rhs as AnimationBlend1D); + } else if (lhs instanceof AnimationBlend2D) { + expect(rhs).toBeInstanceOf(AnimationBlend2D); + assertsEqualAnimationBlend2D(lhs, rhs as AnimationBlend2D); + } else { + assertIsTrue(false); + } + } + + function assertsEqualBindable(lhs: Bindable, rhs: Bindable) { + expect(lhs.value).toBe(rhs.value); + expect(lhs.variable).toBe(rhs.variable); + } + + function assertsEqualOptionalMotion(lhs: Motion | null, rhs: Motion | null) { + if (lhs) { + expect(rhs).not.toBeNull(); + assertsEqualMotion(lhs, rhs!); + } else { + expect(rhs).toBeNull(); + } + } + + function assertsEqualClipMotion(lhs: ClipMotion, rhs: ClipMotion) { + expect(lhs.clip).toBe(rhs.clip); + } + + function assertsEqualAnimationBlend1D(lhs: AnimationBlend1D, rhs: AnimationBlend1D) { + expect(lhs.name).toBe(rhs.name); + assertsEqualBindable(lhs.param, rhs.param); + const lhsItems = [...lhs.items]; + const rhsItems = [...rhs.items]; + expect(lhsItems).toHaveLength(rhsItems.length); + for (let i = 0; i < lhsItems.length; ++i) { + assertsEqualAnimationBlend1DItem(lhsItems[i], rhsItems[i]); + } + } + + function assertsEqualAnimationBlend1DItem(lhs: AnimationBlend1D.Item, rhs: AnimationBlend1D.Item) { + expect(lhs.threshold).toBe(rhs.threshold); + assertsEqualOptionalMotion(lhs.motion, rhs.motion); + } + + function assertsEqualAnimationBlend2D(lhs: AnimationBlend2D, rhs: AnimationBlend2D) { + expect(lhs.name).toBe(rhs.name); + assertsEqualBindable(lhs.paramX, rhs.paramX); + assertsEqualBindable(lhs.paramY, rhs.paramY); + const lhsItems = [...lhs.items]; + const rhsItems = [...rhs.items]; + expect(lhsItems).toHaveLength(rhsItems.length); + for (let i = 0; i < lhsItems.length; ++i) { + assertsEqualAnimationBlend2DItem(lhsItems[i], rhsItems[i]); + } + } + + function assertsEqualAnimationBlend2DItem(lhs: AnimationBlend2D.Item, rhs: AnimationBlend2D.Item) { + expect(lhs.threshold.x).toBe(rhs.threshold.x); + expect(lhs.threshold.y).toBe(rhs.threshold.y); + assertsEqualOptionalMotion(lhs.motion, rhs.motion); + } + }); +}); \ No newline at end of file From 72a8db7a1afe3110dd93b0c278272333fc6a7a2e Mon Sep 17 00:00:00 2001 From: Zach Lee Date: Mon, 24 Oct 2022 16:29:41 +0800 Subject: [PATCH 068/829] GFXObjects use smart_ptr [Vulkan][Device] (#13085) --- .../renderer/gfx-vulkan/VKCommandBuffer.cpp | 2 +- .../renderer/gfx-vulkan/VKCommandBuffer.h | 4 +- native/cocos/renderer/gfx-vulkan/VKDevice.cpp | 75 +++++++------------ native/cocos/renderer/gfx-vulkan/VKDevice.h | 48 ++++++------ native/cocos/renderer/gfx-vulkan/VKQueue.cpp | 10 +-- native/cocos/renderer/gfx-vulkan/VKQueue.h | 5 +- .../cocos/renderer/gfx-vulkan/VKSwapchain.cpp | 6 +- .../cocos/renderer/gfx-vulkan/VKSwapchain.h | 6 +- .../gfx-vulkan/states/VKBufferBarrier.cpp | 6 +- .../gfx-vulkan/states/VKBufferBarrier.h | 6 +- .../gfx-vulkan/states/VKGeneralBarrier.cpp | 8 +- .../gfx-vulkan/states/VKGeneralBarrier.h | 7 +- .../gfx-vulkan/states/VKTextureBarrier.cpp | 6 +- .../gfx-vulkan/states/VKTextureBarrier.h | 8 +- 14 files changed, 81 insertions(+), 116 deletions(-) diff --git a/native/cocos/renderer/gfx-vulkan/VKCommandBuffer.cpp b/native/cocos/renderer/gfx-vulkan/VKCommandBuffer.cpp index 5f8d95e88aa..763a555d463 100644 --- a/native/cocos/renderer/gfx-vulkan/VKCommandBuffer.cpp +++ b/native/cocos/renderer/gfx-vulkan/VKCommandBuffer.cpp @@ -64,7 +64,7 @@ void CCVKCommandBuffer::doInit(const CommandBufferInfo & /*info*/) { } void CCVKCommandBuffer::doDestroy() { - CC_SAFE_DELETE(_gpuCommandBuffer); + _gpuCommandBuffer = nullptr; } void CCVKCommandBuffer::begin(RenderPass *renderPass, uint32_t subpass, Framebuffer *frameBuffer) { diff --git a/native/cocos/renderer/gfx-vulkan/VKCommandBuffer.h b/native/cocos/renderer/gfx-vulkan/VKCommandBuffer.h index a9e73b7abfb..a6affd10aa2 100644 --- a/native/cocos/renderer/gfx-vulkan/VKCommandBuffer.h +++ b/native/cocos/renderer/gfx-vulkan/VKCommandBuffer.h @@ -65,8 +65,6 @@ class CC_VULKAN_API CCVKCommandBuffer final : public CommandBuffer { void endQuery(QueryPool *queryPool, uint32_t id) override; void resetQueryPool(QueryPool *queryPool) override; - CCVKGPUCommandBuffer *gpuCommandBuffer() const { return _gpuCommandBuffer; } - protected: friend class CCVKQueue; @@ -78,7 +76,7 @@ class CC_VULKAN_API CCVKCommandBuffer final : public CommandBuffer { void bindDescriptorSets(VkPipelineBindPoint bindPoint); - CCVKGPUCommandBuffer *_gpuCommandBuffer = nullptr; + IntrusivePtr _gpuCommandBuffer; ConstPtr _curGPUPipelineState; ccstd::vector> _curGPUDescriptorSets; diff --git a/native/cocos/renderer/gfx-vulkan/VKDevice.cpp b/native/cocos/renderer/gfx-vulkan/VKDevice.cpp index e4653c25d23..d924a5eca13 100644 --- a/native/cocos/renderer/gfx-vulkan/VKDevice.cpp +++ b/native/cocos/renderer/gfx-vulkan/VKDevice.cpp @@ -101,9 +101,8 @@ bool CCVKDevice::doInit(const DeviceInfo & /*info*/) { if (_xr) { _xr->preGFXDeviceInitialize(_api); } - _gpuContext = ccnew CCVKGPUContext; + _gpuContext = std::make_unique(); if (!_gpuContext->initialize()) { - CC_SAFE_DESTROY_AND_DELETE(_gpuContext) return false; } @@ -114,7 +113,7 @@ bool CCVKDevice::doInit(const DeviceInfo & /*info*/) { ///////////////////// Device Creation ///////////////////// - _gpuDevice = ccnew CCVKGPUDevice; + _gpuDevice = std::make_unique(); _gpuDevice->minorVersion = _gpuContext->minorVersion; // only enable the absolute essentials @@ -396,20 +395,19 @@ bool CCVKDevice::doInit(const DeviceInfo & /*info*/) { uint32_t backBufferCount = _gpuDevice->backBufferCount; for (uint32_t i = 0U; i < backBufferCount; i++) { - _gpuFencePools.push_back(ccnew CCVKGPUFencePool(_gpuDevice)); - _gpuRecycleBins.push_back(ccnew CCVKGPURecycleBin(_gpuDevice)); - _gpuStagingBufferPools.push_back(ccnew CCVKGPUStagingBufferPool(_gpuDevice)); + _gpuFencePools.push_back(std::make_unique(_gpuDevice.get())); + _gpuRecycleBins.push_back(std::make_unique(_gpuDevice.get())); + _gpuStagingBufferPools.push_back(std::make_unique(_gpuDevice.get())); } - _gpuBufferHub = ccnew CCVKGPUBufferHub(_gpuDevice); - _gpuIAHub = ccnew CCVKGPUInputAssemblerHub(_gpuDevice); - _gpuTransportHub = ccnew CCVKGPUTransportHub(_gpuDevice, static_cast(_queue)->gpuQueue()); - _gpuDescriptorHub = ccnew CCVKGPUDescriptorHub(_gpuDevice); - _gpuSemaphorePool = ccnew CCVKGPUSemaphorePool(_gpuDevice); - _gpuBarrierManager = ccnew CCVKGPUBarrierManager(_gpuDevice); - _gpuDescriptorSetHub = ccnew CCVKGPUDescriptorSetHub(_gpuDevice); + _gpuBufferHub = std::make_unique(_gpuDevice.get()); + _gpuIAHub = std::make_unique(_gpuDevice.get()); + _gpuTransportHub = std::make_unique(_gpuDevice.get(), static_cast(_queue)->gpuQueue()); + _gpuDescriptorHub = std::make_unique(_gpuDevice.get()); + _gpuSemaphorePool = std::make_unique(_gpuDevice.get()); + _gpuBarrierManager = std::make_unique(_gpuDevice.get()); + _gpuDescriptorSetHub = std::make_unique(_gpuDevice.get()); - _gpuDescriptorSetHub = ccnew CCVKGPUDescriptorSetHub(_gpuDevice); _gpuDevice->defaultSampler = ccnew CCVKGPUSampler(); _gpuDevice->defaultSampler->init(); @@ -504,11 +502,6 @@ void CCVKDevice::doDestroy() { SPIRVUtils::getInstance()->destroy(); - for (CCVKTexture *texture : _depthStencilTextures) { - CC_SAFE_DESTROY_AND_DELETE(texture) - } - _depthStencilTextures.clear(); - if (_gpuDevice) { _gpuDevice->defaultBuffer = nullptr; _gpuDevice->defaultTexture = nullptr; @@ -520,30 +513,21 @@ void CCVKDevice::doDestroy() { CC_SAFE_DESTROY_AND_DELETE(_queue) CC_SAFE_DESTROY_AND_DELETE(_cmdBuff) - if (_gpuDevice) { - uint32_t backBufferCount = _gpuDevice->backBufferCount; - for (uint32_t i = 0; i < backBufferCount; i++) { - CC_SAFE_DELETE(_gpuStagingBufferPools[i]) - CC_SAFE_DELETE(_gpuFencePools[i]) - } - } _gpuStagingBufferPools.clear(); _gpuFencePools.clear(); - - CC_SAFE_DELETE(_gpuBufferHub) - CC_SAFE_DELETE(_gpuTransportHub) - CC_SAFE_DELETE(_gpuSemaphorePool) - CC_SAFE_DELETE(_gpuDescriptorHub) - CC_SAFE_DELETE(_gpuBarrierManager) - CC_SAFE_DELETE(_gpuDescriptorSetHub) - CC_SAFE_DELETE(_gpuIAHub) + _gpuBufferHub = nullptr; + _gpuTransportHub = nullptr; + _gpuSemaphorePool = nullptr; + _gpuDescriptorHub = nullptr; + _gpuBarrierManager = nullptr; + _gpuDescriptorSetHub = nullptr; + _gpuIAHub = nullptr; if (_gpuDevice) { uint32_t backBufferCount = _gpuDevice->backBufferCount; for (uint32_t i = 0U; i < backBufferCount; i++) { _gpuRecycleBins[i]->clear(); - CC_SAFE_DELETE(_gpuRecycleBins[i]) } } _gpuStagingBufferPools.clear(); @@ -578,11 +562,10 @@ void CCVKDevice::doDestroy() { _gpuDevice->vkDevice = VK_NULL_HANDLE; } - delete _gpuDevice; _gpuDevice = nullptr; } - CC_SAFE_DESTROY_AND_DELETE(_gpuContext) + _gpuContext = nullptr; } namespace { @@ -733,22 +716,22 @@ void CCVKDevice::present() { } } -CCVKGPUFencePool *CCVKDevice::gpuFencePool() { return _gpuFencePools[_gpuDevice->curBackBufferIndex]; } -CCVKGPURecycleBin *CCVKDevice::gpuRecycleBin() { return _gpuRecycleBins[_gpuDevice->curBackBufferIndex]; } -CCVKGPUStagingBufferPool *CCVKDevice::gpuStagingBufferPool() { return _gpuStagingBufferPools[_gpuDevice->curBackBufferIndex]; } +CCVKGPUFencePool *CCVKDevice::gpuFencePool() { return _gpuFencePools[_gpuDevice->curBackBufferIndex].get(); } +CCVKGPURecycleBin *CCVKDevice::gpuRecycleBin() { return _gpuRecycleBins[_gpuDevice->curBackBufferIndex].get(); } +CCVKGPUStagingBufferPool *CCVKDevice::gpuStagingBufferPool() { return _gpuStagingBufferPools[_gpuDevice->curBackBufferIndex].get(); } void CCVKDevice::waitAllFences() { static ccstd::vector fences; fences.clear(); - for (auto *fencePool : _gpuFencePools) { + for (auto &fencePool : _gpuFencePools) { fences.insert(fences.end(), fencePool->data(), fencePool->data() + fencePool->size()); } if (!fences.empty()) { VK_CHECK(vkWaitForFences(_gpuDevice->vkDevice, utils::toUint(fences.size()), fences.data(), VK_TRUE, DEFAULT_TIMEOUT)); - for (auto *fencePool : _gpuFencePools) { + for (auto &fencePool : _gpuFencePools) { fencePool->reset(); } } @@ -757,9 +740,9 @@ void CCVKDevice::waitAllFences() { void CCVKDevice::updateBackBufferCount(uint32_t backBufferCount) { if (backBufferCount <= _gpuDevice->backBufferCount) return; for (uint32_t i = _gpuDevice->backBufferCount; i < backBufferCount; i++) { - _gpuFencePools.push_back(ccnew CCVKGPUFencePool(_gpuDevice)); - _gpuRecycleBins.push_back(ccnew CCVKGPURecycleBin(_gpuDevice)); - _gpuStagingBufferPools.push_back(ccnew CCVKGPUStagingBufferPool(_gpuDevice)); + _gpuFencePools.push_back(std::make_unique(_gpuDevice.get())); + _gpuRecycleBins.push_back(std::make_unique(_gpuDevice.get())); + _gpuStagingBufferPools.push_back(std::make_unique(_gpuDevice.get())); } _gpuBufferHub->updateBackBufferCount(backBufferCount); _gpuDescriptorSetHub->updateBackBufferCount(backBufferCount); @@ -773,7 +756,7 @@ void CCVKDevice::initFormatFeature() { VkFormatFeatureFlags formatFeature = {}; for (uint32_t i = toNumber(Format::R8); i < formatLen; ++i) { if (static_cast(i) == Format::ETC_RGB8) continue; - format = mapVkFormat(static_cast(i), _gpuDevice); + format = mapVkFormat(static_cast(i), _gpuDevice.get()); vkGetPhysicalDeviceFormatProperties(_gpuContext->physicalDevice, format, &properties); // render buffer support diff --git a/native/cocos/renderer/gfx-vulkan/VKDevice.h b/native/cocos/renderer/gfx-vulkan/VKDevice.h index 7e964867445..33a51a1d0e8 100644 --- a/native/cocos/renderer/gfx-vulkan/VKDevice.h +++ b/native/cocos/renderer/gfx-vulkan/VKDevice.h @@ -26,6 +26,7 @@ #pragma once #include +#include #include "VKStd.h" #include "gfx-base/GFXDevice.h" @@ -84,16 +85,16 @@ class CC_VULKAN_API CCVKDevice final : public Device { }); } - inline CCVKGPUDevice *gpuDevice() const { return _gpuDevice; } - inline CCVKGPUContext *gpuContext() { return _gpuContext; } + inline CCVKGPUDevice *gpuDevice() const { return _gpuDevice.get(); } + inline CCVKGPUContext *gpuContext() { return _gpuContext.get(); } - inline CCVKGPUBufferHub *gpuBufferHub() const { return _gpuBufferHub; } - inline CCVKGPUTransportHub *gpuTransportHub() const { return _gpuTransportHub; } - inline CCVKGPUDescriptorHub *gpuDescriptorHub() const { return _gpuDescriptorHub; } - inline CCVKGPUSemaphorePool *gpuSemaphorePool() const { return _gpuSemaphorePool; } - inline CCVKGPUBarrierManager *gpuBarrierManager() const { return _gpuBarrierManager; } - inline CCVKGPUDescriptorSetHub *gpuDescriptorSetHub() const { return _gpuDescriptorSetHub; } - inline CCVKGPUInputAssemblerHub *gpuIAHub() const { return _gpuIAHub; } + inline CCVKGPUBufferHub *gpuBufferHub() const { return _gpuBufferHub.get(); } + inline CCVKGPUTransportHub *gpuTransportHub() const { return _gpuTransportHub.get(); } + inline CCVKGPUDescriptorHub *gpuDescriptorHub() const { return _gpuDescriptorHub.get(); } + inline CCVKGPUSemaphorePool *gpuSemaphorePool() const { return _gpuSemaphorePool.get(); } + inline CCVKGPUBarrierManager *gpuBarrierManager() const { return _gpuBarrierManager.get(); } + inline CCVKGPUDescriptorSetHub *gpuDescriptorSetHub() const { return _gpuDescriptorSetHub.get(); } + inline CCVKGPUInputAssemblerHub *gpuIAHub() const { return _gpuIAHub.get(); } CCVKGPUFencePool *gpuFencePool(); CCVKGPURecycleBin *gpuRecycleBin(); @@ -136,21 +137,20 @@ class CC_VULKAN_API CCVKDevice final : public Device { void initFormatFeature(); - CCVKGPUDevice *_gpuDevice = nullptr; - CCVKGPUContext *_gpuContext = nullptr; - ccstd::vector _depthStencilTextures; - - ccstd::vector _gpuFencePools; - ccstd::vector _gpuRecycleBins; - ccstd::vector _gpuStagingBufferPools; - - CCVKGPUBufferHub *_gpuBufferHub{nullptr}; - CCVKGPUTransportHub *_gpuTransportHub{nullptr}; - CCVKGPUDescriptorHub *_gpuDescriptorHub{nullptr}; - CCVKGPUSemaphorePool *_gpuSemaphorePool{nullptr}; - CCVKGPUBarrierManager *_gpuBarrierManager{nullptr}; - CCVKGPUDescriptorSetHub *_gpuDescriptorSetHub{nullptr}; - CCVKGPUInputAssemblerHub *_gpuIAHub{nullptr}; + std::unique_ptr _gpuDevice; + std::unique_ptr _gpuContext; + + ccstd::vector> _gpuFencePools; + ccstd::vector> _gpuRecycleBins; + ccstd::vector> _gpuStagingBufferPools; + + std::unique_ptr _gpuBufferHub; + std::unique_ptr _gpuTransportHub; + std::unique_ptr _gpuDescriptorHub; + std::unique_ptr _gpuSemaphorePool; + std::unique_ptr _gpuBarrierManager; + std::unique_ptr _gpuDescriptorSetHub; + std::unique_ptr _gpuIAHub; ccstd::vector _layers; ccstd::vector _extensions; diff --git a/native/cocos/renderer/gfx-vulkan/VKQueue.cpp b/native/cocos/renderer/gfx-vulkan/VKQueue.cpp index 476304b0e65..c8447176006 100644 --- a/native/cocos/renderer/gfx-vulkan/VKQueue.cpp +++ b/native/cocos/renderer/gfx-vulkan/VKQueue.cpp @@ -42,17 +42,13 @@ CCVKQueue::~CCVKQueue() { } void CCVKQueue::doInit(const QueueInfo & /*info*/) { - _gpuQueue = ccnew CCVKGPUQueue; + _gpuQueue = std::make_unique(); _gpuQueue->type = _type; - cmdFuncCCVKGetDeviceQueue(CCVKDevice::getInstance(), _gpuQueue); + cmdFuncCCVKGetDeviceQueue(CCVKDevice::getInstance(), _gpuQueue.get()); } void CCVKQueue::doDestroy() { - if (_gpuQueue) { - _gpuQueue->vkQueue = VK_NULL_HANDLE; - delete _gpuQueue; - _gpuQueue = nullptr; - } + _gpuQueue = nullptr; } void CCVKQueue::submit(CommandBuffer *const *cmdBuffs, uint32_t count) { diff --git a/native/cocos/renderer/gfx-vulkan/VKQueue.h b/native/cocos/renderer/gfx-vulkan/VKQueue.h index 4eaac7d589c..365f973061b 100644 --- a/native/cocos/renderer/gfx-vulkan/VKQueue.h +++ b/native/cocos/renderer/gfx-vulkan/VKQueue.h @@ -25,6 +25,7 @@ #pragma once +#include #include "VKStd.h" #include "gfx-base/GFXQueue.h" @@ -40,7 +41,7 @@ class CC_VULKAN_API CCVKQueue final : public Queue { void submit(CommandBuffer *const *cmdBuffs, uint32_t count) override; - inline CCVKGPUQueue *gpuQueue() const { return _gpuQueue; } + inline CCVKGPUQueue *gpuQueue() const { return _gpuQueue.get(); } protected: friend class CCVKDevice; @@ -48,7 +49,7 @@ class CC_VULKAN_API CCVKQueue final : public Queue { void doInit(const QueueInfo &info) override; void doDestroy() override; - CCVKGPUQueue *_gpuQueue = nullptr; + std::unique_ptr _gpuQueue; uint32_t _numDrawCalls = 0; uint32_t _numInstances = 0; diff --git a/native/cocos/renderer/gfx-vulkan/VKSwapchain.cpp b/native/cocos/renderer/gfx-vulkan/VKSwapchain.cpp index b1e50948214..347ca2794db 100644 --- a/native/cocos/renderer/gfx-vulkan/VKSwapchain.cpp +++ b/native/cocos/renderer/gfx-vulkan/VKSwapchain.cpp @@ -261,8 +261,8 @@ void CCVKSwapchain::doDestroy() { CCVKDevice::getInstance()->waitAllFences(); - CC_SAFE_DESTROY(_depthStencilTexture) - CC_SAFE_DESTROY(_colorTexture) + _depthStencilTexture = nullptr; + _colorTexture = nullptr; auto *gpuDevice = CCVKDevice::getInstance()->gpuDevice(); const auto *gpuContext = CCVKDevice::getInstance()->gpuContext(); @@ -275,7 +275,7 @@ void CCVKSwapchain::doDestroy() { } gpuDevice->swapchains.erase(_gpuSwapchain); - CC_SAFE_DELETE(_gpuSwapchain) + _gpuSwapchain = nullptr; } void CCVKSwapchain::doResize(uint32_t width, uint32_t height, SurfaceTransform /*transform*/) { diff --git a/native/cocos/renderer/gfx-vulkan/VKSwapchain.h b/native/cocos/renderer/gfx-vulkan/VKSwapchain.h index 79885806092..38f77c89ee3 100644 --- a/native/cocos/renderer/gfx-vulkan/VKSwapchain.h +++ b/native/cocos/renderer/gfx-vulkan/VKSwapchain.h @@ -27,6 +27,7 @@ #include "VKStd.h" #include "gfx-base/GFXSwapchain.h" +#include "gfx-vulkan/VKGPUObjects.h" namespace cc { class IXRInterface; @@ -34,9 +35,6 @@ namespace gfx { class CCVKDevice; class CCVKGPUDevice; -struct CCVKGPUSwapchain; -struct CCVKGPUSwapchain; -class CCVKGPUSemaphorePool; class CC_VULKAN_API CCVKSwapchain final : public Swapchain { public: @@ -59,7 +57,7 @@ class CC_VULKAN_API CCVKSwapchain final : public Swapchain { void createVkSurface(); void destroySwapchain(CCVKGPUDevice *gpuDevice); - CCVKGPUSwapchain *_gpuSwapchain = nullptr; + IntrusivePtr _gpuSwapchain; IXRInterface *_xr = nullptr; }; diff --git a/native/cocos/renderer/gfx-vulkan/states/VKBufferBarrier.cpp b/native/cocos/renderer/gfx-vulkan/states/VKBufferBarrier.cpp index 9d325dd9662..0592696101a 100644 --- a/native/cocos/renderer/gfx-vulkan/states/VKBufferBarrier.cpp +++ b/native/cocos/renderer/gfx-vulkan/states/VKBufferBarrier.cpp @@ -35,7 +35,7 @@ namespace gfx { CCVKBufferBarrier::CCVKBufferBarrier(const BufferBarrierInfo &info) : BufferBarrier(info) { _typedID = generateObjectID(); - _gpuBarrier = ccnew CCVKGPUBufferBarrier; + _gpuBarrier = std::make_unique(); getAccessTypes(info.prevAccesses, _gpuBarrier->prevAccesses); getAccessTypes(info.nextAccesses, _gpuBarrier->nextAccesses); @@ -56,9 +56,5 @@ CCVKBufferBarrier::CCVKBufferBarrier(const BufferBarrierInfo &info) : BufferBarr thsvsGetVulkanBufferMemoryBarrier(_gpuBarrier->barrier, &_gpuBarrier->srcStageMask, &_gpuBarrier->dstStageMask, &_gpuBarrier->vkBarrier); } -CCVKBufferBarrier::~CCVKBufferBarrier() { - CC_SAFE_DELETE(_gpuBarrier); -} - } // namespace gfx } // namespace cc diff --git a/native/cocos/renderer/gfx-vulkan/states/VKBufferBarrier.h b/native/cocos/renderer/gfx-vulkan/states/VKBufferBarrier.h index 2f23a9cdee1..485b4d8b9d5 100644 --- a/native/cocos/renderer/gfx-vulkan/states/VKBufferBarrier.h +++ b/native/cocos/renderer/gfx-vulkan/states/VKBufferBarrier.h @@ -36,12 +36,12 @@ struct CCVKGPUBufferBarrier; class CC_VULKAN_API CCVKBufferBarrier : public BufferBarrier { public: explicit CCVKBufferBarrier(const BufferBarrierInfo &info); - ~CCVKBufferBarrier() override; + ~CCVKBufferBarrier() override = default; - inline const CCVKGPUBufferBarrier *gpuBarrier() const { return _gpuBarrier; } + inline const CCVKGPUBufferBarrier *gpuBarrier() const { return _gpuBarrier.get(); } protected: - CCVKGPUBufferBarrier *_gpuBarrier = nullptr; + std::unique_ptr _gpuBarrier; }; } // namespace gfx diff --git a/native/cocos/renderer/gfx-vulkan/states/VKGeneralBarrier.cpp b/native/cocos/renderer/gfx-vulkan/states/VKGeneralBarrier.cpp index 12749859448..530b6dbd6ed 100644 --- a/native/cocos/renderer/gfx-vulkan/states/VKGeneralBarrier.cpp +++ b/native/cocos/renderer/gfx-vulkan/states/VKGeneralBarrier.cpp @@ -33,15 +33,11 @@ namespace gfx { CCVKGeneralBarrier::CCVKGeneralBarrier(const GeneralBarrierInfo &info) : GeneralBarrier(info) { _typedID = generateObjectID(); - _gpuBarrier = ccnew CCVKGPUGeneralBarrier; + _gpuBarrier = std::make_unique(); getAccessTypes(info.prevAccesses, _gpuBarrier->prevAccesses); getAccessTypes(info.nextAccesses, _gpuBarrier->nextAccesses); - cmdFuncCCVKCreateGeneralBarrier(CCVKDevice::getInstance(), _gpuBarrier); -} - -CCVKGeneralBarrier::~CCVKGeneralBarrier() { - CC_SAFE_DELETE(_gpuBarrier); + cmdFuncCCVKCreateGeneralBarrier(CCVKDevice::getInstance(), _gpuBarrier.get()); } } // namespace gfx diff --git a/native/cocos/renderer/gfx-vulkan/states/VKGeneralBarrier.h b/native/cocos/renderer/gfx-vulkan/states/VKGeneralBarrier.h index 198b8877cf5..5c4ee9acb05 100644 --- a/native/cocos/renderer/gfx-vulkan/states/VKGeneralBarrier.h +++ b/native/cocos/renderer/gfx-vulkan/states/VKGeneralBarrier.h @@ -25,6 +25,7 @@ #pragma once +#include #include "../VKStd.h" #include "gfx-base/states/GFXGeneralBarrier.h" @@ -36,12 +37,12 @@ struct CCVKGPUGeneralBarrier; class CC_VULKAN_API CCVKGeneralBarrier : public GeneralBarrier { public: explicit CCVKGeneralBarrier(const GeneralBarrierInfo &info); - ~CCVKGeneralBarrier() override; + ~CCVKGeneralBarrier() override = default; - inline const CCVKGPUGeneralBarrier *gpuBarrier() const { return _gpuBarrier; } + inline const CCVKGPUGeneralBarrier *gpuBarrier() const { return _gpuBarrier.get(); } protected: - CCVKGPUGeneralBarrier *_gpuBarrier = nullptr; + std::unique_ptr _gpuBarrier; }; } // namespace gfx diff --git a/native/cocos/renderer/gfx-vulkan/states/VKTextureBarrier.cpp b/native/cocos/renderer/gfx-vulkan/states/VKTextureBarrier.cpp index b7beef973d8..9a1c2d7e40f 100644 --- a/native/cocos/renderer/gfx-vulkan/states/VKTextureBarrier.cpp +++ b/native/cocos/renderer/gfx-vulkan/states/VKTextureBarrier.cpp @@ -33,7 +33,7 @@ namespace gfx { CCVKTextureBarrier::CCVKTextureBarrier(const TextureBarrierInfo &info) : TextureBarrier(info) { _typedID = generateObjectID(); - _gpuBarrier = ccnew CCVKGPUTextureBarrier; + _gpuBarrier = std::make_unique(); getAccessTypes(info.prevAccesses, _gpuBarrier->prevAccesses); getAccessTypes(info.nextAccesses, _gpuBarrier->nextAccesses); @@ -58,9 +58,5 @@ CCVKTextureBarrier::CCVKTextureBarrier(const TextureBarrierInfo &info) : Texture thsvsGetVulkanImageMemoryBarrier(_gpuBarrier->barrier, &_gpuBarrier->srcStageMask, &_gpuBarrier->dstStageMask, &_gpuBarrier->vkBarrier); } -CCVKTextureBarrier::~CCVKTextureBarrier() { - CC_SAFE_DELETE(_gpuBarrier); -} - } // namespace gfx } // namespace cc diff --git a/native/cocos/renderer/gfx-vulkan/states/VKTextureBarrier.h b/native/cocos/renderer/gfx-vulkan/states/VKTextureBarrier.h index cb1d5d56f67..69f3e648052 100644 --- a/native/cocos/renderer/gfx-vulkan/states/VKTextureBarrier.h +++ b/native/cocos/renderer/gfx-vulkan/states/VKTextureBarrier.h @@ -25,23 +25,23 @@ #pragma once +#include #include "../VKStd.h" #include "gfx-base/states/GFXTextureBarrier.h" namespace cc { namespace gfx { - struct CCVKGPUTextureBarrier; class CC_VULKAN_API CCVKTextureBarrier : public TextureBarrier { public: explicit CCVKTextureBarrier(const TextureBarrierInfo &info); - ~CCVKTextureBarrier() override; + ~CCVKTextureBarrier() override = default; - inline const CCVKGPUTextureBarrier *gpuBarrier() const { return _gpuBarrier; } + inline const CCVKGPUTextureBarrier *gpuBarrier() const { return _gpuBarrier.get(); } protected: - CCVKGPUTextureBarrier *_gpuBarrier = nullptr; + std::unique_ptr _gpuBarrier; }; } // namespace gfx From 63392ed29b53448e0a03c0c7ea052c8fc8333e00 Mon Sep 17 00:00:00 2001 From: hyde zhou Date: Mon, 24 Oct 2022 17:51:50 +0800 Subject: [PATCH 069/829] [develop] web-pipeline update (#13067) --- cocos/rendering/custom/define.ts | 17 +++++++------ cocos/rendering/custom/executor.ts | 25 ++++++++++++++++--- cocos/rendering/custom/layout-graph.ts | 4 +-- cocos/rendering/custom/pipeline.ts | 1 + cocos/rendering/custom/render-graph.ts | 6 +++-- cocos/rendering/custom/web-pipeline.ts | 9 +++++++ .../pipeline/custom/NativePipelineImpl.cpp | 4 +++ .../pipeline/custom/NativePipelineTypes.h | 2 ++ .../pipeline/custom/RenderGraphTypes.cpp | 6 +++-- .../pipeline/custom/RenderGraphTypes.h | 1 + .../pipeline/custom/RenderInterfaceTypes.h | 2 ++ 11 files changed, 60 insertions(+), 17 deletions(-) diff --git a/cocos/rendering/custom/define.ts b/cocos/rendering/custom/define.ts index a2009b8d2d4..3ed632d916d 100644 --- a/cocos/rendering/custom/define.ts +++ b/cocos/rendering/custom/define.ts @@ -60,7 +60,7 @@ export function getLoadOpOfClearFlag (clearFlag: ClearFlagBit, attachment: Attac if (!(clearFlag & ClearFlagBit.COLOR) && attachment === AttachmentType.RENDER_TARGET) { if (clearFlag & SKYBOX_FLAG) { - loadOp = LoadOp.DISCARD; + loadOp = LoadOp.CLEAR; } else { loadOp = LoadOp.LOAD; } @@ -359,6 +359,7 @@ export function buildPostprocessPass (camera: Camera, ppl.addRenderTexture(postprocessPassRTName, Format.RGBA8, width, height, camera.window); ppl.addDepthStencil(postprocessPassDS, Format.DEPTH_STENCIL, width, height, ResourceResidency.MANAGED); } + ppl.updateRenderWindow(postprocessPassRTName, camera.window); const postprocessPass = ppl.addRasterPass(width, height, 'Postprocess', `CameraPostprocessPass${cameraID}`); postprocessPass.setViewport(new Viewport(area.x, area.y, area.width, area.height)); if (ppl.containsResource(inputTex)) { @@ -414,6 +415,9 @@ export function buildForwardPass (camera: Camera, } ppl.addDepthStencil(forwardPassDSName, Format.DEPTH_STENCIL, width, height, ResourceResidency.MANAGED); } + if (!isOffScreen) { + ppl.updateRenderWindow(forwardPassRTName, camera.window); + } const forwardPass = ppl.addRasterPass(width, height, 'default', `CameraForwardPass${cameraID}`); forwardPass.setViewport(new Viewport(area.x, area.y, width, height)); for (const dirShadowName of cameraInfo.mainLightShadowNames) { @@ -447,14 +451,13 @@ export function buildForwardPass (camera: Camera, .addSceneOfCamera(camera, new LightInfo(), SceneFlags.OPAQUE_OBJECT | SceneFlags.PLANAR_SHADOW | SceneFlags.CUTOUT_OBJECT | SceneFlags.DEFAULT_LIGHTING | SceneFlags.DRAW_INSTANCING); - forwardPass - .addQueue(QueueHint.RENDER_TRANSPARENT) - .addSceneOfCamera(camera, new LightInfo(), SceneFlags.TRANSPARENT_OBJECT | SceneFlags.GEOMETRY); + let sceneFlags = SceneFlags.TRANSPARENT_OBJECT | SceneFlags.GEOMETRY; if (!isOffScreen) { - forwardPass - .addQueue(QueueHint.RENDER_TRANSPARENT) - .addSceneOfCamera(camera, new LightInfo(), SceneFlags.UI | SceneFlags.PROFILER); + sceneFlags |= SceneFlags.UI | SceneFlags.PROFILER; } + forwardPass + .addQueue(QueueHint.RENDER_TRANSPARENT) + .addSceneOfCamera(camera, new LightInfo(), sceneFlags); return { rtName: forwardPassRTName, dsName: forwardPassDSName }; } diff --git a/cocos/rendering/custom/executor.ts b/cocos/rendering/custom/executor.ts index 8c7771e57bc..a16c3b3d12e 100644 --- a/cocos/rendering/custom/executor.ts +++ b/cocos/rendering/custom/executor.ts @@ -84,6 +84,7 @@ class DeviceTexture extends DeviceResource { protected _desc: ResourceDesc | null = null; protected _trait: ResourceTraits | null = null; get texture () { return this._texture; } + set framebuffer (val: Framebuffer | null) { this._framebuffer = val; } get framebuffer () { return this._framebuffer; } get description () { return this._desc; } get trait () { return this._trait; } @@ -566,6 +567,13 @@ class DeviceRenderPass { const resourceVisitor = new ResourceVisitor(resName, context); resourceGraph.visitVertex(resourceVisitor, vertId); resTex = context.deviceTextures.get(resName)!; + } else { + const resGraph = this.context.resourceGraph; + const resId = resGraph.vertex(resName); + const resFbo = resGraph._vertices[resId]._object; + if (resTex.framebuffer && resFbo instanceof Framebuffer && resTex.framebuffer !== resFbo) { + resTex.framebuffer = resFbo; + } } if (!swapchain) swapchain = resTex.swapchain; if (!framebuffer) framebuffer = resTex.framebuffer; @@ -759,9 +767,18 @@ class DeviceRenderPass { queue.postRecord(); } } - resetQueues (id: number, pass: RasterPass) { + resetResource (id: number, pass: RasterPass) { this._rasterInfo.applyInfo(id, pass); this._deviceQueues.length = 0; + for (const [resName, rasterV] of this._rasterInfo.pass.rasterViews) { + const deviceTex = this.context.deviceTextures.get(resName); + const resGraph = this.context.resourceGraph; + const resId = resGraph.vertex(resName); + const resFbo = resGraph._vertices[resId]._object; + if (deviceTex!.framebuffer && resFbo instanceof Framebuffer && deviceTex!.framebuffer !== resFbo) { + this._framebuffer = deviceTex!.framebuffer = resFbo; + } + } } } @@ -1312,7 +1329,7 @@ class DeviceSceneTask extends WebSceneTask { if (graphSceneData.flags & SceneFlags.DRAW_INSTANCING) { this._recordInstences(); } - this._recordBatches(); + // this._recordBatches(); if (graphSceneData.flags & SceneFlags.DEFAULT_LIGHTING) { this._recordAdditiveLights(); } @@ -1444,7 +1461,7 @@ export class Executor { } this._context.deviceTextures.clear(); } - private readonly _context: ExecutorContext; + readonly _context: ExecutorContext; } class BaseRenderVisitor { @@ -1497,7 +1514,7 @@ class PreRenderVisitor extends BaseRenderVisitor implements RenderGraphVisitor { this.currPass = new DeviceRenderPass(this.context, new RasterPassInfo(this.passID, pass)); devicePasses.set(passHash, this.currPass); } else { - this.currPass.resetQueues(this.passID, pass); + this.currPass.resetResource(this.passID, pass); } } compute (value: ComputePass) {} diff --git a/cocos/rendering/custom/layout-graph.ts b/cocos/rendering/custom/layout-graph.ts index c77a1beb47b..ff418a484c6 100644 --- a/cocos/rendering/custom/layout-graph.ts +++ b/cocos/rendering/custom/layout-graph.ts @@ -86,7 +86,7 @@ export class LayoutGraphVertex { readonly _outEdges: impl.OutE[] = []; readonly _inEdges: impl.OutE[] = []; readonly _id: LayoutGraphValue; - readonly _object: LayoutGraphObject; + _object: LayoutGraphObject; } //----------------------------------------------------------------- @@ -700,7 +700,7 @@ export class LayoutGraphDataVertex { readonly _outEdges: impl.OutE[] = []; readonly _inEdges: impl.OutE[] = []; readonly _id: LayoutGraphDataValue; - readonly _object: LayoutGraphDataObject; + _object: LayoutGraphDataObject; } //----------------------------------------------------------------- diff --git a/cocos/rendering/custom/pipeline.ts b/cocos/rendering/custom/pipeline.ts index 50bbafcf6f3..a0ed4d9d4ef 100644 --- a/cocos/rendering/custom/pipeline.ts +++ b/cocos/rendering/custom/pipeline.ts @@ -168,6 +168,7 @@ export interface Pipeline extends PipelineRuntime { addRenderTexture (name: string, format: Format, width: number, height: number, renderWindow: RenderWindow): number; addRenderTarget (name: string, format: Format, width: number, height: number, residency: ResourceResidency): number; addDepthStencil (name: string, format: Format, width: number, height: number, residency: ResourceResidency): number; + updateRenderWindow (name: string, renderWindow: RenderWindow): void; beginFrame (): void; endFrame (): void; addRasterPass (width: number, height: number, layoutName: string, name: string): RasterPassBuilder; diff --git a/cocos/rendering/custom/render-graph.ts b/cocos/rendering/custom/render-graph.ts index da9a690d695..a97ae6342ea 100644 --- a/cocos/rendering/custom/render-graph.ts +++ b/cocos/rendering/custom/render-graph.ts @@ -156,7 +156,7 @@ export class ResourceGraphVertex { readonly _outEdges: impl.OutE[] = []; readonly _inEdges: impl.OutE[] = []; readonly _id: ResourceGraphValue; - readonly _object: ResourceGraphObject; + _object: ResourceGraphObject; } //----------------------------------------------------------------- @@ -323,6 +323,7 @@ export class ResourceGraph implements impl.BidirectionalGraph clear (): void { // Members this.nextFenceValue = 1; + this.version = 0; // UuidGraph this._valueIndex.clear(); // ComponentGraph @@ -700,6 +701,7 @@ export class ResourceGraph implements impl.BidirectionalGraph readonly _samplerInfo: SamplerInfo[] = []; readonly _valueIndex: Map = new Map(); nextFenceValue = 1; + version = 0; } export class RasterSubpass { @@ -1201,7 +1203,7 @@ export class RenderGraphVertex { readonly _children: impl.OutE[] = []; readonly _parents: impl.OutE[] = []; readonly _id: RenderGraphValue; - readonly _object: RenderGraphObject; + _object: RenderGraphObject; } //----------------------------------------------------------------- diff --git a/cocos/rendering/custom/web-pipeline.ts b/cocos/rendering/custom/web-pipeline.ts index 33965e36a16..79394cad435 100644 --- a/cocos/rendering/custom/web-pipeline.ts +++ b/cocos/rendering/custom/web-pipeline.ts @@ -143,6 +143,7 @@ export class WebSetter { } if (!this._data.constants.get(num)) { const value = new Array(this._currCount); + value.fill(0); this._data.constants.set(num, value); } this.setCurrConstant(block); @@ -198,6 +199,7 @@ function setShadowUBOLightView (setter: WebSetter, const packing = supportsR32FloatTexture(device) ? 0.0 : 1.0; const cap = pipeline.device.capabilities; const _vec4ShadowInfo = new Vec4(); + setter.addConstant('CCCSM'); // ShadowMap setter.addConstant('CCShadow'); switch (light.type) { @@ -740,6 +742,13 @@ function isManaged (residency: ResourceResidency): boolean { } export class WebPipeline implements Pipeline { + updateRenderWindow (name: string, renderWindow: RenderWindow): void { + const resId = this.resourceGraph.vertex(name); + const currFbo = this.resourceGraph._vertices[resId]._object; + if (currFbo !== renderWindow.framebuffer) { + this.resourceGraph._vertices[resId]._object = renderWindow.framebuffer; + } + } public containsResource (name: string): boolean { return this._resourceGraph.contains(name); } diff --git a/native/cocos/renderer/pipeline/custom/NativePipelineImpl.cpp b/native/cocos/renderer/pipeline/custom/NativePipelineImpl.cpp index f11718247d3..e6a21af84ea 100644 --- a/native/cocos/renderer/pipeline/custom/NativePipelineImpl.cpp +++ b/native/cocos/renderer/pipeline/custom/NativePipelineImpl.cpp @@ -196,6 +196,10 @@ uint32_t NativePipeline::addDepthStencil(const ccstd::string &name, gfx::Format resourceGraph); } +void NativePipeline::updateRenderWindow(const ccstd::string& name, scene::RenderWindow* renderWindow) { + +} + void NativePipeline::beginFrame() { } diff --git a/native/cocos/renderer/pipeline/custom/NativePipelineTypes.h b/native/cocos/renderer/pipeline/custom/NativePipelineTypes.h index 5e02c652193..f31d1804658 100644 --- a/native/cocos/renderer/pipeline/custom/NativePipelineTypes.h +++ b/native/cocos/renderer/pipeline/custom/NativePipelineTypes.h @@ -466,6 +466,8 @@ class NativePipeline final : public Pipeline { uint32_t addRenderTarget(const ccstd::string& name, gfx::Format format, uint32_t width, uint32_t height, ResourceResidency residency) override; uint32_t addDepthStencil(const ccstd::string& name, gfx::Format format, uint32_t width, uint32_t height, ResourceResidency residency) override; + void updateRenderWindow(const ccstd::string& name, scene::RenderWindow* renderWindow) override; + void beginFrame() override; void endFrame() override; RasterPassBuilder *addRasterPass(uint32_t width, uint32_t height, const ccstd::string& layoutName, const ccstd::string& name) override; diff --git a/native/cocos/renderer/pipeline/custom/RenderGraphTypes.cpp b/native/cocos/renderer/pipeline/custom/RenderGraphTypes.cpp index 36698089914..df1512010a5 100644 --- a/native/cocos/renderer/pipeline/custom/RenderGraphTypes.cpp +++ b/native/cocos/renderer/pipeline/custom/RenderGraphTypes.cpp @@ -66,7 +66,8 @@ ResourceGraph::ResourceGraph(ResourceGraph&& rhs, const allocator_type& alloc) framebuffers(std::move(rhs.framebuffers), alloc), swapchains(std::move(rhs.swapchains), alloc), valueIndex(std::move(rhs.valueIndex), alloc), - nextFenceValue(rhs.nextFenceValue) {} + nextFenceValue(rhs.nextFenceValue), + version(rhs.version) {} ResourceGraph::ResourceGraph(ResourceGraph const& rhs, const allocator_type& alloc) : _vertices(rhs._vertices, alloc), @@ -83,7 +84,8 @@ ResourceGraph::ResourceGraph(ResourceGraph const& rhs, const allocator_type& all framebuffers(rhs.framebuffers, alloc), swapchains(rhs.swapchains, alloc), valueIndex(rhs.valueIndex, alloc), - nextFenceValue(rhs.nextFenceValue) {} + nextFenceValue(rhs.nextFenceValue), + version(rhs.version) {} // ContinuousContainer void ResourceGraph::reserve(vertices_size_type sz) { diff --git a/native/cocos/renderer/pipeline/custom/RenderGraphTypes.h b/native/cocos/renderer/pipeline/custom/RenderGraphTypes.h index db4b5f40286..be6c3336ff9 100644 --- a/native/cocos/renderer/pipeline/custom/RenderGraphTypes.h +++ b/native/cocos/renderer/pipeline/custom/RenderGraphTypes.h @@ -286,6 +286,7 @@ struct ResourceGraph { PmrUnorderedStringMap valueIndex; // Members uint64_t nextFenceValue{1}; + uint64_t version{0}; }; struct RasterSubpass { diff --git a/native/cocos/renderer/pipeline/custom/RenderInterfaceTypes.h b/native/cocos/renderer/pipeline/custom/RenderInterfaceTypes.h index e81a4070281..96cb6c80338 100644 --- a/native/cocos/renderer/pipeline/custom/RenderInterfaceTypes.h +++ b/native/cocos/renderer/pipeline/custom/RenderInterfaceTypes.h @@ -292,6 +292,8 @@ class Pipeline : public PipelineRuntime { virtual uint32_t addRenderTarget(const ccstd::string& name, gfx::Format format, uint32_t width, uint32_t height, ResourceResidency residency) = 0; virtual uint32_t addDepthStencil(const ccstd::string& name, gfx::Format format, uint32_t width, uint32_t height, ResourceResidency residency) = 0; + virtual void updateRenderWindow(const ccstd::string& name, scene::RenderWindow* renderWindow) = 0; + virtual void beginFrame() = 0; virtual void endFrame() = 0; virtual RasterPassBuilder *addRasterPass(uint32_t width, uint32_t height, const ccstd::string& layoutName, const ccstd::string& name) = 0; From 708f6207d50a9fbee9250be3251a6f1f529b8740 Mon Sep 17 00:00:00 2001 From: Cocos Robot <48829427+cocos-robot@users.noreply.github.com> Date: Mon, 24 Oct 2022 18:07:26 +0800 Subject: [PATCH 070/829] [ci skip][AUTO]: Automated code generating update: ede9d912c44d5427bec43223403e0418a1c56454 (#13067) (#13136) Co-authored-by: cocos-robot --- .../cocos/bindings/auto/jsb_render_auto.cpp | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/native/cocos/bindings/auto/jsb_render_auto.cpp b/native/cocos/bindings/auto/jsb_render_auto.cpp index 9e53b71fc95..28675abdc9a 100644 --- a/native/cocos/bindings/auto/jsb_render_auto.cpp +++ b/native/cocos/bindings/auto/jsb_render_auto.cpp @@ -3517,6 +3517,39 @@ static bool js_cc_render_Pipeline_addDepthStencil(se::State& s) } SE_BIND_FUNC(js_cc_render_Pipeline_addDepthStencil) +static bool js_cc_render_Pipeline_updateRenderWindow(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::render::Pipeline *arg1 = (cc::render::Pipeline *) NULL ; + ccstd::string *arg2 = 0 ; + cc::scene::RenderWindow *arg3 = (cc::scene::RenderWindow *) NULL ; + ccstd::string temp2 ; + + if(argc != 2) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "Pipeline_updateRenderWindow,2,SWIGTYPE_p_ccstd__string"); + arg2 = &temp2; + + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[1], &arg3, s.thisObject()); + SE_PRECONDITION2(ok, false, "Pipeline_updateRenderWindow,3,SWIGTYPE_p_cc__scene__RenderWindow"); + (arg1)->updateRenderWindow((ccstd::string const &)*arg2,arg3); + + + return true; +} +SE_BIND_FUNC(js_cc_render_Pipeline_updateRenderWindow) + static bool js_cc_render_Pipeline_beginFrame(se::State& s) { // js_function @@ -3963,6 +3996,7 @@ bool js_register_cc_render_Pipeline(se::Object* obj) { cls->defineFunction("addRenderTexture", _SE(js_cc_render_Pipeline_addRenderTexture)); cls->defineFunction("addRenderTarget", _SE(js_cc_render_Pipeline_addRenderTarget)); cls->defineFunction("addDepthStencil", _SE(js_cc_render_Pipeline_addDepthStencil)); + cls->defineFunction("updateRenderWindow", _SE(js_cc_render_Pipeline_updateRenderWindow)); cls->defineFunction("beginFrame", _SE(js_cc_render_Pipeline_beginFrame)); cls->defineFunction("endFrame", _SE(js_cc_render_Pipeline_endFrame)); cls->defineFunction("addRasterPass", _SE(js_cc_render_Pipeline_addRasterPass)); From 02c5717ba91c0f4b3804074b00ce7f76d7244685 Mon Sep 17 00:00:00 2001 From: ycg <1670543365@qq.com> Date: Tue, 25 Oct 2022 11:07:37 +0800 Subject: [PATCH 071/829] Fix: XMLHttpRequest failed to get header on TaoBao (#13119) * Add Note and rename. * Fix: XMLHttpRequest failed to get header * Fix: Modify the default value of Headers. * Rename to MAX_AMOUNT_WEBSOCKET. * Rename some function. --- .../taobao/wrapper/builtin/WebSocket.js | 30 +++++++++---------- .../taobao/wrapper/builtin/XMLHttpRequest.js | 8 ++--- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/platforms/minigame/platforms/taobao/wrapper/builtin/WebSocket.js b/platforms/minigame/platforms/taobao/wrapper/builtin/WebSocket.js index 60529d75d98..01d4a06f11e 100644 --- a/platforms/minigame/platforms/taobao/wrapper/builtin/WebSocket.js +++ b/platforms/minigame/platforms/taobao/wrapper/builtin/WebSocket.js @@ -1,7 +1,7 @@ const _utils = require('../utils'); -const MAX_VALUE_WEBSOCkET = 1; -let CURR_VALUE_WEBSOCKET = 0; +const MAX_AMOUNT_WEBSOCKET = 1 // The maximum number of WEBSOCKET +let CURR_AMOUNT_WEBSOCKET = 0 // The current number of WEBSOCKET export default class WebSocket { static CONNECTING = 0 // The connection is not yet open. @@ -22,14 +22,14 @@ export default class WebSocket { _onOpen = null _onError = null _onClose = null - _isReduced = false; + _isReduced = false protocol = '' // TODO 小程序内目前获取不到,实际上需要根据服务器选择的 sub-protocol 返回 readyState = 3 constructor(url, protocols = []) { - if(this._isMaxRef()){ - console.warn(`Failed to construct 'WebSocket': Only ${CURR_VALUE_WEBSOCKET} WebSocket can be created at the same time on TaoBao.`); + if(this._isMaxCount()){ + console.warn(`Failed to construct 'WebSocket': Only ${CURR_AMOUNT_WEBSOCKET} WebSocket can be created at the same time on TaoBao.`); return this; } @@ -39,7 +39,7 @@ export default class WebSocket { this.url = url this.readyState = WebSocket.CONNECTING - this._addRef(); + this._increaseCount(); my.connectSocket({ url, @@ -64,7 +64,7 @@ export default class WebSocket { this._onError = (res) => { this._triggerEvent('error', res) - this._reduceRef(); + this._decreaseCount(); } my.onSocketError(this._onError) @@ -72,7 +72,7 @@ export default class WebSocket { this.readyState = WebSocket.CLOSED this._triggerEvent('close') this._removeAllSocketListenr() - this._reduceRef(); + this._decreaseCount(); } my.onSocketClose(this._onClose) @@ -122,18 +122,18 @@ export default class WebSocket { this._onClose = null } - _addRef(){ - CURR_VALUE_WEBSOCKET += 1 + _increaseCount(){ + CURR_AMOUNT_WEBSOCKET += 1 } - _reduceRef(){ + _decreaseCount(){ if(!this._isReduced){ - CURR_VALUE_WEBSOCKET -= 1 - _isReduced = true; + CURR_AMOUNT_WEBSOCKET -= 1 + this._isReduced = true } } - _isMaxRef(){ - return CURR_VALUE_WEBSOCKET >= MAX_VALUE_WEBSOCkET + _isMaxCount(){ + return CURR_AMOUNT_WEBSOCKET >= MAX_AMOUNT_WEBSOCKET } } diff --git a/platforms/minigame/platforms/taobao/wrapper/builtin/XMLHttpRequest.js b/platforms/minigame/platforms/taobao/wrapper/builtin/XMLHttpRequest.js index 7a161fd9f9e..3bc0543e682 100644 --- a/platforms/minigame/platforms/taobao/wrapper/builtin/XMLHttpRequest.js +++ b/platforms/minigame/platforms/taobao/wrapper/builtin/XMLHttpRequest.js @@ -52,7 +52,7 @@ export default class XMLHttpRequest extends EventTarget { super(); _requestHeader.set(this, { - 'content-type': 'application/x-www-form-urlencoded' + 'content-type': 'application/json' }) _responseHeader.set(this, {}) } @@ -94,13 +94,13 @@ export default class XMLHttpRequest extends EventTarget { data, url: _url.get(this), method: _method.get(this), - header: _requestHeader.get(this), + headers: _requestHeader.get(this), dataType: 'other', responseType: this.responseType === 'arraybuffer' ? 'arraybuffer' : 'text', timeout: this.timeout || undefined, - success: ({ data, status, header }) => { + success: ({ data, status, headers }) => { this.status = status - _responseHeader.set(this, header) + _responseHeader.set(this, headers) _triggerEvent.call(this, 'loadstart') _changeReadyState.call(this, XMLHttpRequest.HEADERS_RECEIVED) _changeReadyState.call(this, XMLHttpRequest.LOADING) From 316180b777e6a721349c275bd8106878d0a5f8d7 Mon Sep 17 00:00:00 2001 From: hyde zhou Date: Tue, 25 Oct 2022 11:10:14 +0800 Subject: [PATCH 072/829] [develop] enable native custom pipeline (#13133) --- cocos/game/director.ts | 2 +- cocos/rendering/custom/custom-pipeline.ts | 18 ++++++- cocos/rendering/custom/define.ts | 47 +++++++++++++++++++ cocos/rendering/custom/index.jsb.ts | 3 +- cocos/rendering/custom/index.ts | 3 +- cocos/root.jsb.ts | 5 +- cocos/root.ts | 4 +- native/CMakeLists.txt | 2 +- native/cocos/core/Root.cpp | 17 ++----- native/cocos/core/Root.h | 2 +- .../pipeline/custom/NativeExecutor.cpp | 3 ++ .../pipeline/custom/NativePipelineImpl.cpp | 4 +- ...erGraphSetup.cpp => NativeRenderGraph.cpp} | 0 13 files changed, 84 insertions(+), 26 deletions(-) rename native/cocos/renderer/pipeline/custom/{NativeRenderGraphSetup.cpp => NativeRenderGraph.cpp} (100%) diff --git a/cocos/game/director.ts b/cocos/game/director.ts index 8b3b7dc0112..a8d5cbb5a91 100644 --- a/cocos/game/director.ts +++ b/cocos/game/director.ts @@ -746,7 +746,7 @@ export class Director extends EventTarget { } private setupRenderPipelineBuilder () { - if (this._root && this._root.usesCustomPipeline && legacyCC.rendering) { + if (macro.CUSTOM_PIPELINE_NAME !== '' && legacyCC.rendering && this._root && this._root.usesCustomPipeline) { legacyCC.director.on(legacyCC.Director.EVENT_BEFORE_RENDER, this.buildRenderPipeline, this); } } diff --git a/cocos/rendering/custom/custom-pipeline.ts b/cocos/rendering/custom/custom-pipeline.ts index 70959c80103..f577bb4cfa7 100644 --- a/cocos/rendering/custom/custom-pipeline.ts +++ b/cocos/rendering/custom/custom-pipeline.ts @@ -1,5 +1,5 @@ import { Camera, CameraUsage } from '../../render-scene/scene'; -import { buildBloomPass as buildBloomPasses, buildForwardPass, buildPostprocessPass } from './define'; +import { buildBloomPass as buildBloomPasses, buildForwardPass, buildNativeForwardPass, buildPostprocessPass } from './define'; import { Pipeline, PipelineBuilder } from './pipeline'; export class CustomPipelineBuilder implements PipelineBuilder { @@ -23,3 +23,19 @@ export class CustomPipelineBuilder implements PipelineBuilder { } } } + +export class NativePipelineBuilder implements PipelineBuilder { + public setup (cameras: Camera[], ppl: Pipeline): void { + for (let i = 0; i < cameras.length; i++) { + const camera = cameras[i]; + if (camera.scene === null) { + continue; + } + if (camera.cameraUsage !== CameraUsage.GAME) { + buildForwardPass(camera, ppl, false); + continue; + } + buildNativeForwardPass(camera, ppl); + } + } +} diff --git a/cocos/rendering/custom/define.ts b/cocos/rendering/custom/define.ts index 3ed632d916d..377a02d8090 100644 --- a/cocos/rendering/custom/define.ts +++ b/cocos/rendering/custom/define.ts @@ -714,3 +714,50 @@ export function buildLightingPass (camera: Camera, ppl: Pipeline, gBuffer: GBuff SceneFlags.TRANSPARENT_OBJECT | SceneFlags.PLANAR_SHADOW | SceneFlags.GEOMETRY); return { rtName: deferredLightingPassRTName, dsName: deferredLightingPassDS }; } + +export function buildNativeForwardPass (camera: Camera, ppl: Pipeline) { + const cameraID = getCameraUniqueID(camera); + const cameraName = `Camera${cameraID}`; + const area = getRenderArea(camera, camera.window.width, camera.window.height); + const width = area.width; + const height = area.height; + + // Resources + const forwardPassRTName = `dsForwardPassColor${cameraName}`; + const forwardPassDSName = `dsForwardPassDS${cameraName}`; + if (!ppl.containsResource(forwardPassRTName)) { + ppl.addRenderTexture(forwardPassRTName, Format.RGBA8, width, height, camera.window); + ppl.addDepthStencil(forwardPassDSName, Format.DEPTH_STENCIL, width, height, ResourceResidency.MANAGED); + } + + // Passes + const forwardPass = ppl.addRasterPass(width, height, 'default', `CameraForwardPass${cameraID}`); + forwardPass.setViewport(new Viewport(area.x, area.y, width, height)); + + const passView = new RasterView('_', + AccessType.WRITE, AttachmentType.RENDER_TARGET, + getLoadOpOfClearFlag(camera.clearFlag, AttachmentType.RENDER_TARGET), + StoreOp.STORE, + camera.clearFlag, + new Color(camera.clearColor.x, camera.clearColor.y, camera.clearColor.z, camera.clearColor.w)); + const passDSView = new RasterView('_', + AccessType.WRITE, AttachmentType.DEPTH_STENCIL, + getLoadOpOfClearFlag(camera.clearFlag, AttachmentType.DEPTH_STENCIL), + StoreOp.STORE, + camera.clearFlag, + new Color(camera.clearDepth, camera.clearStencil, 0, 0)); + forwardPass.addRasterView(forwardPassRTName, passView); + forwardPass.addRasterView(forwardPassDSName, passDSView); + forwardPass + .addQueue(QueueHint.RENDER_OPAQUE) + .addSceneOfCamera(camera, new LightInfo(), + SceneFlags.OPAQUE_OBJECT | SceneFlags.PLANAR_SHADOW | SceneFlags.CUTOUT_OBJECT + | SceneFlags.DEFAULT_LIGHTING | SceneFlags.DRAW_INSTANCING); + forwardPass + .addQueue(QueueHint.RENDER_TRANSPARENT) + .addSceneOfCamera(camera, new LightInfo(), SceneFlags.TRANSPARENT_OBJECT | SceneFlags.GEOMETRY); + forwardPass + .addQueue(QueueHint.RENDER_TRANSPARENT) + .addSceneOfCamera(camera, new LightInfo(), SceneFlags.UI | SceneFlags.PROFILER); + return { rtName: forwardPassRTName, dsName: forwardPassDSName }; +} diff --git a/cocos/rendering/custom/index.jsb.ts b/cocos/rendering/custom/index.jsb.ts index e768435fa62..77b4dcf11ce 100644 --- a/cocos/rendering/custom/index.jsb.ts +++ b/cocos/rendering/custom/index.jsb.ts @@ -29,7 +29,7 @@ import { Pipeline, PipelineBuilder } from './pipeline'; import { buildDeferredLayout, buildForwardLayout } from './effect'; import { macro } from '../../core/platform/macro'; import { DeferredPipelineBuilder, ForwardPipelineBuilder } from './builtin-pipelines'; -import { CustomPipelineBuilder } from './custom-pipeline'; +import { CustomPipelineBuilder, NativePipelineBuilder } from './custom-pipeline'; export * from './types'; export * from './pipeline'; @@ -64,6 +64,7 @@ function addCustomBuiltinPipelines (map: Map) { map.set('Forward', new ForwardPipelineBuilder()); map.set('Deferred', new DeferredPipelineBuilder()); map.set('Custom', new CustomPipelineBuilder()); + map.set('Native', new NativePipelineBuilder()); } addCustomBuiltinPipelines(customPipelineBuilderMap); diff --git a/cocos/rendering/custom/index.ts b/cocos/rendering/custom/index.ts index 1707f5064c0..9379765d8f5 100644 --- a/cocos/rendering/custom/index.ts +++ b/cocos/rendering/custom/index.ts @@ -28,7 +28,7 @@ import { WebPipeline } from './web-pipeline'; import { buildDeferredLayout, buildForwardLayout } from './effect'; import { macro } from '../../core/platform/macro'; import { DeferredPipelineBuilder, ForwardPipelineBuilder } from './builtin-pipelines'; -import { CustomPipelineBuilder } from './custom-pipeline'; +import { CustomPipelineBuilder, NativePipelineBuilder } from './custom-pipeline'; let _pipeline: WebPipeline | null = null; @@ -68,6 +68,7 @@ function addCustomBuiltinPipelines (map: Map) { map.set('Forward', new ForwardPipelineBuilder()); map.set('Deferred', new DeferredPipelineBuilder()); map.set('Custom', new CustomPipelineBuilder()); + map.set('Native', new NativePipelineBuilder()); } addCustomBuiltinPipelines(customPipelineBuilderMap); diff --git a/cocos/root.jsb.ts b/cocos/root.jsb.ts index 7a989da1b7c..9f97da89828 100644 --- a/cocos/root.jsb.ts +++ b/cocos/root.jsb.ts @@ -1,5 +1,6 @@ import { Pool } from './core/memop'; import { warnID } from './core/platform/debug'; +import { macro } from './core/platform/macro'; import legacyCC from '../predefine'; import { DataPoolManager } from './3d/skeletal-animation/data-pool-manager'; import { Device, deviceManager } from './gfx'; @@ -195,7 +196,7 @@ rootProto.frameMove = function (deltaTime: number) { const oldSetPipeline = rootProto.setRenderPipeline; rootProto.setRenderPipeline = function (pipeline) { let ppl; - if (this.usesCustomPipeline) { + if (macro.CUSTOM_PIPELINE_NAME !== '' && legacyCC.rendering && this.usesCustomPipeline) { const result = oldSetPipeline.call(this, null); const ppl = this.customPipeline; if (this.useDeferredPipeline) { @@ -211,7 +212,7 @@ rootProto.setRenderPipeline = function (pipeline) { pipeline = new ForwardPipeline(); pipeline.init(); } - ppl = oldSetPipeline.call(this, pipeline); + ppl = oldSetPipeline.call(this, pipeline); } this._createBatcher2D(); diff --git a/cocos/root.ts b/cocos/root.ts index d0b7b37ef1a..a554d3fe839 100644 --- a/cocos/root.ts +++ b/cocos/root.ts @@ -119,7 +119,7 @@ export class Root { * 启用自定义渲染管线 */ public get usesCustomPipeline (): boolean { - return this._usesCustomPipeline && macro.CUSTOM_PIPELINE_NAME !== ''; + return this._usesCustomPipeline; } /** @@ -386,7 +386,7 @@ export class Root { //----------------------------------------------- // choose pipeline //----------------------------------------------- - if (this.usesCustomPipeline && legacyCC.rendering) { + if (macro.CUSTOM_PIPELINE_NAME !== '' && legacyCC.rendering && this.usesCustomPipeline) { this._customPipeline = legacyCC.rendering.createCustomPipeline(); isCreateDefaultPipeline = true; this._pipeline = this._customPipeline!; diff --git a/native/CMakeLists.txt b/native/CMakeLists.txt index 096083c5ac2..25fde6bdff7 100644 --- a/native/CMakeLists.txt +++ b/native/CMakeLists.txt @@ -1303,7 +1303,7 @@ cocos_source_files( cocos/renderer/pipeline/custom/NativePipelineImpl.cpp cocos/renderer/pipeline/custom/NativePipelineTypes.cpp cocos/renderer/pipeline/custom/NativePipelineTypes.h - cocos/renderer/pipeline/custom/NativeRenderGraphSetup.cpp + cocos/renderer/pipeline/custom/NativeRenderGraph.cpp cocos/renderer/pipeline/custom/RenderCommonFwd.h cocos/renderer/pipeline/custom/RenderCommonJsb.cpp cocos/renderer/pipeline/custom/RenderCommonJsb.h diff --git a/native/cocos/core/Root.cpp b/native/cocos/core/Root.cpp index 80db36ecba2..c51ef999bfe 100644 --- a/native/cocos/core/Root.cpp +++ b/native/cocos/core/Root.cpp @@ -149,7 +149,7 @@ cc::scene::RenderWindow *Root::createRenderWindowFromSystemWindow(uint32_t windo void Root::destroy() { destroyScenes(); removeWindowEventListener(); - if (_usesCustomPipeline && _pipelineRuntime) { + if (_pipelineRuntime) { _pipelineRuntime->destroy(); } _pipelineRuntime.reset(); @@ -297,18 +297,11 @@ class RenderPipelineBridge final : public render::PipelineRuntime { } // namespace bool Root::setRenderPipeline(pipeline::RenderPipeline *rppl /* = nullptr*/) { - if (!_usesCustomPipeline) { - if (rppl != nullptr && dynamic_cast(rppl) != nullptr) { + if (rppl) { + if (dynamic_cast(rppl) != nullptr) { _useDeferredPipeline = true; } - bool isCreateDefaultPipeline{false}; - if (!rppl) { - rppl = ccnew pipeline::ForwardPipeline(); - rppl->initialize({}); - isCreateDefaultPipeline = true; - } - _pipeline = rppl; _pipelineRuntime = std::make_unique(rppl); rppl->setPipelineRuntime(_pipelineRuntime.get()); @@ -321,10 +314,6 @@ bool Root::setRenderPipeline(pipeline::RenderPipeline *rppl /* = nullptr*/) { _pipeline->setBloomEnabled(false); if (!_pipeline->activate(_mainRenderWindow->getSwapchain())) { - if (isCreateDefaultPipeline) { - CC_SAFE_DESTROY(_pipeline); - } - _pipeline = nullptr; return false; } diff --git a/native/cocos/core/Root.h b/native/cocos/core/Root.h index b30e5ef780c..4440be473e2 100644 --- a/native/cocos/core/Root.h +++ b/native/cocos/core/Root.h @@ -322,7 +322,7 @@ class Root final { uint32_t _fps{0}; uint32_t _fixedFPS{0}; bool _useDeferredPipeline{false}; - bool _usesCustomPipeline{false}; + bool _usesCustomPipeline{true}; CallbacksInvoker *_eventProcessor{nullptr}; IXRInterface *_xr{nullptr}; uint32_t _windowDestroyEventId{0}; diff --git a/native/cocos/renderer/pipeline/custom/NativeExecutor.cpp b/native/cocos/renderer/pipeline/custom/NativeExecutor.cpp index e3b15dda6bb..521d8c7cbc4 100644 --- a/native/cocos/renderer/pipeline/custom/NativeExecutor.cpp +++ b/native/cocos/renderer/pipeline/custom/NativeExecutor.cpp @@ -592,6 +592,9 @@ void NativePipeline::executeRenderGraph(const RenderGraph& rg) { RenderGraphCullVisitor visitor{{}, validPasses}; for (const auto& vertID : fgd.resourceAccessGraph.culledPasses) { const auto passID = get(ResourceAccessGraph::PassID, fgd.resourceAccessGraph, vertID); + if (passID == RenderGraph::null_vertex()) { + continue; + } boost::depth_first_visit(graphView, passID, visitor, get(colors, rg)); } colors.clear(); diff --git a/native/cocos/renderer/pipeline/custom/NativePipelineImpl.cpp b/native/cocos/renderer/pipeline/custom/NativePipelineImpl.cpp index e6a21af84ea..78786110075 100644 --- a/native/cocos/renderer/pipeline/custom/NativePipelineImpl.cpp +++ b/native/cocos/renderer/pipeline/custom/NativePipelineImpl.cpp @@ -179,7 +179,7 @@ uint32_t NativePipeline::addDepthStencil(const ccstd::string &name, gfx::Format desc.textureFlags = gfx::TextureFlagBit::NONE; desc.flags = ResourceFlags::DEPTH_STENCIL_ATTACHMENT | ResourceFlags::INPUT_ATTACHMENT | ResourceFlags::SAMPLED; - CC_EXPECTS(residency == ResourceResidency::MANAGED && residency == ResourceResidency::MEMORYLESS); + CC_EXPECTS(residency == ResourceResidency::MANAGED || residency == ResourceResidency::MEMORYLESS); gfx::SamplerInfo samplerInfo{}; samplerInfo.magFilter = gfx::Filter::POINT; @@ -225,7 +225,7 @@ RasterPassBuilder *NativePipeline::addRasterPass( renderGraph); auto passLayoutID = locate(LayoutGraphData::null_vertex(), layoutName, layoutGraph); - CC_EXPECTS(passLayoutID); + CC_EXPECTS(passLayoutID != LayoutGraphData::null_vertex()); return ccnew NativeRasterPassBuilder(&renderGraph, passID, &layoutGraph, passLayoutID); } diff --git a/native/cocos/renderer/pipeline/custom/NativeRenderGraphSetup.cpp b/native/cocos/renderer/pipeline/custom/NativeRenderGraph.cpp similarity index 100% rename from native/cocos/renderer/pipeline/custom/NativeRenderGraphSetup.cpp rename to native/cocos/renderer/pipeline/custom/NativeRenderGraph.cpp From 106a918adc1ffab3fa39a2a3ac13833a89e4df7b Mon Sep 17 00:00:00 2001 From: troublemaker52025 Date: Tue, 25 Oct 2022 11:28:32 +0800 Subject: [PATCH 073/829] [fix] add fractional part of cc_time.x for better precision (#13132) --- cocos/rendering/pipeline-ubo.ts | 1 + editor/assets/chunks/builtin/uniforms/cc-global.chunk | 2 +- native/cocos/renderer/pipeline/PipelineUBO.cpp | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/cocos/rendering/pipeline-ubo.ts b/cocos/rendering/pipeline-ubo.ts index 5dd790f18ec..bd8780f051f 100644 --- a/cocos/rendering/pipeline-ubo.ts +++ b/cocos/rendering/pipeline-ubo.ts @@ -58,6 +58,7 @@ export class PipelineUBO { fv[UBOGlobal.TIME_OFFSET] = root.cumulativeTime; fv[UBOGlobal.TIME_OFFSET + 1] = root.frameTime; fv[UBOGlobal.TIME_OFFSET + 2] = director.getTotalFrames(); + fv[UBOGlobal.TIME_OFFSET + 3] = root.cumulativeTime - Math.floor(root.frameTime); fv[UBOGlobal.SCREEN_SIZE_OFFSET] = shadingWidth; fv[UBOGlobal.SCREEN_SIZE_OFFSET + 1] = shadingHeight; diff --git a/editor/assets/chunks/builtin/uniforms/cc-global.chunk b/editor/assets/chunks/builtin/uniforms/cc-global.chunk index 0a4ab4865ee..32ced1b4190 100644 --- a/editor/assets/chunks/builtin/uniforms/cc-global.chunk +++ b/editor/assets/chunks/builtin/uniforms/cc-global.chunk @@ -4,7 +4,7 @@ // if shared among stages with different precisions #pragma builtin(global) layout(set = 0, binding = 0) uniform CCGlobal { - highp vec4 cc_time; // x: global time since started in seconds, y: delta time for current frame, z: total frames since started + highp vec4 cc_time; // x: global time since started in seconds, y: delta time for current frame, z: total frames since started, w: fractinal part of x, better precious, should be used with uv animation mediump vec4 cc_screenSize; // xy: screen size, zw: inverse screen size mediump vec4 cc_nativeSize; // xy: shading size, zw: inverse shading size diff --git a/native/cocos/renderer/pipeline/PipelineUBO.cpp b/native/cocos/renderer/pipeline/PipelineUBO.cpp index cf1667fe494..94485d7f8b7 100644 --- a/native/cocos/renderer/pipeline/PipelineUBO.cpp +++ b/native/cocos/renderer/pipeline/PipelineUBO.cpp @@ -67,6 +67,7 @@ void PipelineUBO::updateGlobalUBOView(const scene::Camera *camera, ccstd::array< uboGlobalView[UBOGlobal::TIME_OFFSET + 0] = root->getCumulativeTime(); uboGlobalView[UBOGlobal::TIME_OFFSET + 1] = root->getFrameTime(); uboGlobalView[UBOGlobal::TIME_OFFSET + 2] = static_cast(CC_CURRENT_ENGINE()->getTotalFrames()); + uboGlobalView[UBOGlobal::TIME_OFFSET + 3] = root->getCumulativeTime() - floorf(root->getFrameTime()); uboGlobalView[UBOGlobal::SCREEN_SIZE_OFFSET + 0] = static_cast(shadingWidth); uboGlobalView[UBOGlobal::SCREEN_SIZE_OFFSET + 1] = static_cast(shadingHeight); From 82b4a419cd73ed876374503e281e191573e38f5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=90=89=E6=9E=97?= <798080536@qq.com> Date: Tue, 25 Oct 2022 11:39:53 +0800 Subject: [PATCH 074/829] fix light probe cropping (#13137) --- cocos/3d/framework/mesh-renderer.ts | 1 - cocos/gi/light-probe/light-probe.ts | 2 ++ cocos/gi/light-probe/sh.ts | 2 ++ cocos/render-scene/scene/model.ts | 9 ++++----- cocos/rendering/pipeline-scene-data.ts | 4 ++-- cocos/scene-graph/node.jsb.ts | 11 +++++++++++ cocos/scene-graph/scene-globals.ts | 17 +++++++++++------ native/cocos/core/scene-graph/SceneGlobals.cpp | 2 +- 8 files changed, 33 insertions(+), 15 deletions(-) diff --git a/cocos/3d/framework/mesh-renderer.ts b/cocos/3d/framework/mesh-renderer.ts index 777f81892b3..f057dcb7e88 100644 --- a/cocos/3d/framework/mesh-renderer.ts +++ b/cocos/3d/framework/mesh-renderer.ts @@ -282,7 +282,6 @@ export class MeshRenderer extends ModelRenderer { * @zh 模型是否使用光照探针,光照探针为动态物体提供间接光。 */ @type(CCBoolean) - @property({ group: { id: 'Probe', name: 'ProbeSettings', displayOrder: 0 } }) // eslint-disable-next-line func-names @visible(function (this: MeshRenderer) { return !!(this.node && this.node.mobility === MobilityMode.Movable); }) get useLightProbe () { diff --git a/cocos/gi/light-probe/light-probe.ts b/cocos/gi/light-probe/light-probe.ts index b52b975b22f..bb46aa64fee 100644 --- a/cocos/gi/light-probe/light-probe.ts +++ b/cocos/gi/light-probe/light-probe.ts @@ -232,6 +232,7 @@ export class LightProbesData { @serializable private _tetrahedrons: Tetrahedron[] = []; } +legacyCC.internal.LightProbesData = LightProbesData; /** * @en light probe data @@ -349,3 +350,4 @@ export class LightProbes { } } } +legacyCC.internal.LightProbes = LightProbes; diff --git a/cocos/gi/light-probe/sh.ts b/cocos/gi/light-probe/sh.ts index ee6f653b0f1..033ba17349e 100644 --- a/cocos/gi/light-probe/sh.ts +++ b/cocos/gi/light-probe/sh.ts @@ -25,6 +25,7 @@ import { Vec4 } from '../../core'; import { assertIsTrue } from '../../core/data/utils/asserts'; +import { legacyCC } from '../../core/global-exports'; import { Vec3 } from '../../core/math/vec3'; const SH_BASIS_COUNT = 9; @@ -325,3 +326,4 @@ export class SH { return l * l + l + m; } } +legacyCC.internal.SH = SH; diff --git a/cocos/render-scene/scene/model.ts b/cocos/render-scene/scene/model.ts index 2d9ead44694..80ebdb85a56 100644 --- a/cocos/render-scene/scene/model.ts +++ b/cocos/render-scene/scene/model.ts @@ -40,7 +40,6 @@ import { Attribute, DescriptorSet, Device, Buffer, BufferInfo, getTypedArrayCons BufferUsageBit, FormatInfos, MemoryUsageBit, Filter, Address, Feature, SamplerInfo, deviceManager } from '../../gfx'; import { INST_MAT_WORLD, UBOLocal, UBOSH, UBOWorldBound, UNIFORM_LIGHTMAP_TEXTURE_BINDING } from '../../rendering/define'; import { Root } from '../../root'; -import { SH } from '../../gi/light-probe/sh'; import { legacyCC } from '../../core/global-exports'; const m4_1 = new Mat4(); @@ -618,7 +617,7 @@ export class Model { } const lightProbes = (legacyCC.director.root as Root).pipeline.pipelineSceneData.lightProbes; - if (!lightProbes.available()) { + if (!lightProbes || !lightProbes.available()) { return false; } @@ -648,13 +647,13 @@ export class Model { } const coefficients: Vec3[] = []; - const lightProbes = (legacyCC.director.root as Root).pipeline.pipelineSceneData.lightProbes; + const lightProbes = (legacyCC.director.root as Root).pipeline.pipelineSceneData.lightProbes!; this._tetrahedronIndex = lightProbes.data!.getInterpolationSHCoefficients(center, this._tetrahedronIndex, coefficients); - SH.reduceRinging(coefficients, lightProbes.reduceRinging); + legacyCC.internal.SH.reduceRinging(coefficients, lightProbes.reduceRinging); this._lastWorldBoundCenter.set(center); if (this._localSHData && this._localSHBuffer) { - SH.updateUBOData(this._localSHData, UBOSH.SH_LINEAR_CONST_R_OFFSET, coefficients); + legacyCC.internal.SH.updateUBOData(this._localSHData, UBOSH.SH_LINEAR_CONST_R_OFFSET, coefficients); this._localSHBuffer.update(this._localSHData); } } diff --git a/cocos/rendering/pipeline-scene-data.ts b/cocos/rendering/pipeline-scene-data.ts index 9897253ae50..848ce9c616e 100644 --- a/cocos/rendering/pipeline-scene-data.ts +++ b/cocos/rendering/pipeline-scene-data.ts @@ -31,7 +31,7 @@ import { Light } from '../render-scene/scene/light'; import { Material } from '../asset/assets'; import { Pass } from '../render-scene/core/pass'; import { CSMLayers } from './shadow/csm-layers'; -import { LightProbes } from '../gi/light-probe'; +import { legacyCC } from '../core/global-exports'; const GEOMETRY_RENDERER_TECHNIQUE_COUNT = 6; @@ -69,7 +69,7 @@ export class PipelineSceneData { public shadows: Shadows = new Shadows(); public csmLayers: CSMLayers = new CSMLayers(); public octree: Octree = new Octree(); - public lightProbes: LightProbes = new LightProbes(); + public lightProbes = legacyCC.internal.LightProbes ? new legacyCC.internal.LightProbes() : null; /** * @en The list for valid punctual Lights, only available after the scene culling of the current frame. diff --git a/cocos/scene-graph/node.jsb.ts b/cocos/scene-graph/node.jsb.ts index f386e7ead8c..775b1be9538 100644 --- a/cocos/scene-graph/node.jsb.ts +++ b/cocos/scene-graph/node.jsb.ts @@ -1025,6 +1025,17 @@ Object.defineProperty(nodeProto, '_static', { }, }); +Object.defineProperty(nodeProto, 'mobility', { + configurable: true, + enumerable: true, + get () { + return this._mobility; + }, + set (v) { + this._mobility = v; + }, +}); + Object.defineProperty(nodeProto, 'forward', { configurable: true, enumerable: true, diff --git a/cocos/scene-graph/scene-globals.ts b/cocos/scene-graph/scene-globals.ts index aae549484bc..1ac9a9ee23d 100644 --- a/cocos/scene-graph/scene-globals.ts +++ b/cocos/scene-graph/scene-globals.ts @@ -37,7 +37,6 @@ import { legacyCC } from '../core/global-exports'; import { Root } from '../root'; import { warnID } from '../core/platform/debug'; import { Material } from '../asset/assets/material'; -import { Tetrahedron, Vertex } from '../gi/light-probe/delaunay'; import { LightProbeGroup } from '../gi/light-probe/light-probe-group'; const _up = new Vec3(0, 1, 0); @@ -1217,8 +1216,12 @@ export class LightProbeInfo { } public update () { + if (!legacyCC.internal.LightProbesData) { + return; + } + if (!this._data) { - this._data = new LightProbesData(); + this._data = new legacyCC.internal.LightProbesData(); if (this._resource) { this._resource.data = this._data; } @@ -1241,10 +1244,10 @@ export class LightProbeInfo { } } - this._data.build(probes); + this._data!.build(probes); } } -//legacyCC.LightProbeInfo = LightProbeInfo; +legacyCC.internal.LightProbeInfo = LightProbeInfo; /** * @en All scene related global parameters, it affects all content in the corresponding scene @@ -1306,7 +1309,7 @@ export class SceneGlobals { */ @editable @serializable - public lightProbeInfo = new LightProbeInfo(); + public lightProbeInfo = legacyCC.internal.LightProbeInfo ? new legacyCC.internal.LightProbeInfo() : null; /** * @en Activate and initialize the global configurations of the scene, no need to invoke manually. @@ -1320,7 +1323,9 @@ export class SceneGlobals { this.shadows.activate(sceneData.shadows); this.fog.activate(sceneData.fog); this.octree.activate(sceneData.octree); - this.lightProbeInfo.activate(sceneData.lightProbes); + if (this.lightProbeInfo && sceneData.lightProbes) { + this.lightProbeInfo.activate(sceneData.lightProbes); + } const root = legacyCC.director.root as Root; root.onGlobalPipelineStateChanged(); diff --git a/native/cocos/core/scene-graph/SceneGlobals.cpp b/native/cocos/core/scene-graph/SceneGlobals.cpp index fb355c557af..7faef7bfbf1 100644 --- a/native/cocos/core/scene-graph/SceneGlobals.cpp +++ b/native/cocos/core/scene-graph/SceneGlobals.cpp @@ -67,7 +67,7 @@ void SceneGlobals::activate() { _octreeInfo->activate(sceneData->getOctree()); } - if (_lightProbeInfo != nullptr) { + if (_lightProbeInfo != nullptr && sceneData->getLightProbes() != nullptr) { _lightProbeInfo->activate(sceneData->getLightProbes()); } From f5745d5511b8c4d509132824fad195cbe500c0e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E6=A3=AE=E6=96=8C?= Date: Tue, 25 Oct 2022 14:23:28 +0800 Subject: [PATCH 075/829] Revert "temporary hide mobility prop of node editing (#13113)" (#13139) This reverts commit 45fe6f6cf9a8d8395e93714abe633c48674196d0. --- editor/inspector/contributions/node.js | 2 +- editor/inspector/contributions/utils.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/editor/inspector/contributions/node.js b/editor/inspector/contributions/node.js index f99a17f1eb8..625b134ccfe 100644 --- a/editor/inspector/contributions/node.js +++ b/editor/inspector/contributions/node.js @@ -910,7 +910,7 @@ const Elements = { panel.$.nodePosition.render(panel.dump.position); panel.$.nodeRotation.render(panel.dump.rotation); panel.$.nodeScale.render(panel.dump.scale); - // panel.$.nodeMobility.render(panel.dump.mobility); + panel.$.nodeMobility.render(panel.dump.mobility); panel.$.nodeLayer.render(panel.dump.layer); // 查找需要渲染的 component 列表 diff --git a/editor/inspector/contributions/utils.js b/editor/inspector/contributions/utils.js index 463e569db74..97ab77479b1 100644 --- a/editor/inspector/contributions/utils.js +++ b/editor/inspector/contributions/utils.js @@ -137,7 +137,7 @@ function translationDump(dump, dumps, assets) { dump.position.path = 'position'; dump.rotation.path = 'rotation'; dump.scale.path = 'scale'; - // dump.mobility.path = 'mobility'; + dump.mobility.path = 'mobility'; dump.layer.path = 'layer'; if (dumps) { dump.active.values = dumps.map((dump) => dump.active.value); @@ -145,7 +145,7 @@ function translationDump(dump, dumps, assets) { dump.position.values = dumps.map((dump) => dump.position.value); dump.rotation.values = dumps.map((dump) => dump.rotation.value); dump.scale.values = dumps.map((dump) => dump.scale.value); - // dump.mobility.values = dumps.map((dump) => dump.mobility.value); + dump.mobility.values = dumps.map((dump) => dump.mobility.value); dump.layer.values = dumps.map((dump) => dump.layer.value); } for (let i = 0; i < dump.__comps__.length; i++) { From 854687882f28b0e519769e11ea45c9e0a3aef53c Mon Sep 17 00:00:00 2001 From: Zeqiang Li Date: Tue, 25 Oct 2022 14:33:47 +0800 Subject: [PATCH 076/829] operator = to assign drawInfo (#13126) * drawInfo assign * getter setter * rename & fullfill * update wasm.js & external config * drawinfo assign as suggested --- cocos/core/renderer/scene/submodel.ts | 8 +++++++- cocos/webgpu/webgpu_wasm.js | 2 +- native/cocos/renderer/gfx-wgpu/WGPUUtils.cpp | 20 ++++++++++---------- native/external-config.json | 2 +- 4 files changed, 19 insertions(+), 13 deletions(-) diff --git a/cocos/core/renderer/scene/submodel.ts b/cocos/core/renderer/scene/submodel.ts index df8024c00db..110587d9212 100644 --- a/cocos/core/renderer/scene/submodel.ts +++ b/cocos/core/renderer/scene/submodel.ts @@ -398,8 +398,14 @@ export class SubModel { // update draw info const drawInfo = this._subMesh.drawInfo; + + // to invoke getter/setter function for wasm object if (this._inputAssembler && drawInfo) { - Object.assign(this._inputAssembler.drawInfo, drawInfo); + const dirtyDrawInfo = this._inputAssembler.drawInfo; + Object.keys(drawInfo).forEach((key) => { + dirtyDrawInfo[key] = drawInfo[key]; + }); + this._inputAssembler.drawInfo = dirtyDrawInfo; } } diff --git a/cocos/webgpu/webgpu_wasm.js b/cocos/webgpu/webgpu_wasm.js index 973bfbb9a31..6ab1ff11f39 100644 --- a/cocos/webgpu/webgpu_wasm.js +++ b/cocos/webgpu/webgpu_wasm.js @@ -6,7 +6,7 @@ var wasmDevice = (() => { function(wasmDevice) { wasmDevice = wasmDevice || {}; -var Module=typeof wasmDevice!="undefined"?wasmDevice:{};var readyPromiseResolve,readyPromiseReject;Module["ready"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=true;var ENVIRONMENT_IS_WORKER=false;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=(url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=title=>document.title=title}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var POINTER_SIZE=4;var tempRet0=0;var setTempRet0=value=>{tempRet0=value};var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort(text)}}var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heapOrArray,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){{if(Module["onAbort"]){Module["onAbort"](what)}}what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}var wasmBinaryFile;wasmBinaryFile="webgpu_wasm.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch=="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["_a"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["ab"];addOnInit(Module["asm"]["$a"]);removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(function(instance){return instance}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch=="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiationResult,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiationResult)})})}else{return instantiateArrayBuffer(receiveInstantiationResult)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync().catch(readyPromiseReject);return{}}function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){callbacks.shift()(Module)}}function handleException(e){if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)}var structRegistrations={};function runDestructors(destructors){while(destructors.length){var ptr=destructors.pop();var del=destructors.pop();del(ptr)}}function simpleReadValueFromPointer(pointer){return this["fromWireType"](HEAP32[pointer>>2])}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}return name}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n")(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,function(message){this.name=errorName;this.message=message;var stack=new Error(message).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}});errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}};return errorClass}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach(function(type){typeDependencies[type]=dependentTypes});function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i{if(registeredTypes.hasOwnProperty(dt)){typeConverters[i]=registeredTypes[dt]}else{unregisteredTypes.push(dt);if(!awaitingDependencies.hasOwnProperty(dt)){awaitingDependencies[dt]=[]}awaitingDependencies[dt].push(()=>{typeConverters[i]=registeredTypes[dt];++registered;if(registered===unregisteredTypes.length){onComplete(typeConverters)}})}});if(0===unregisteredTypes.length){onComplete(typeConverters)}}function __embind_finalize_value_object(structType){var reg=structRegistrations[structType];delete structRegistrations[structType];var rawConstructor=reg.rawConstructor;var rawDestructor=reg.rawDestructor;var fieldRecords=reg.fields;var fieldTypes=fieldRecords.map(field=>field.getterReturnType).concat(fieldRecords.map(field=>field.setterArgumentType));whenDependentTypesAreResolved([structType],fieldTypes,fieldTypes=>{var fields={};fieldRecords.forEach((field,i)=>{var fieldName=field.fieldName;var getterReturnType=fieldTypes[i];var getter=field.getter;var getterContext=field.getterContext;var setterArgumentType=fieldTypes[i+fieldRecords.length];var setter=field.setter;var setterContext=field.setterContext;fields[fieldName]={read:ptr=>{return getterReturnType["fromWireType"](getter(getterContext,ptr))},write:(ptr,o)=>{var destructors=[];setter(setterContext,ptr,setterArgumentType["toWireType"](destructors,o));runDestructors(destructors)}}});return[{name:reg.name,"fromWireType":function(ptr){var rv={};for(var i in fields){rv[i]=fields[i].read(ptr)}rawDestructor(ptr);return rv},"toWireType":function(destructors,o){for(var fieldName in fields){if(!(fieldName in o)){throw new TypeError('Missing field: "'+fieldName+'"')}}var ptr=rawConstructor();for(fieldName in fields){fields[fieldName].write(ptr,o[fieldName])}if(destructors!==null){destructors.push(rawDestructor,ptr)}return ptr},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:rawDestructor}]})}function __embind_register_bigint(primitiveType,name,size,minRange,maxRange){}function getShiftFromSize(size){switch(size){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+size)}}function embind_init_charCodes(){var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i)}embind_charCodes=codes}var embind_charCodes=undefined;function readLatin1String(ptr){var ret="";var c=ptr;while(HEAPU8[c]){ret+=embind_charCodes[HEAPU8[c++]]}return ret}var BindingError=undefined;function throwBindingError(message){throw new BindingError(message)}function registerType(rawType,registeredInstance,options={}){if(!("argPackAdvance"in registeredInstance)){throw new TypeError("registerType registeredInstance requires argPackAdvance")}var name=registeredInstance.name;if(!rawType){throwBindingError('type "'+name+'" must have a positive integer typeid pointer')}if(registeredTypes.hasOwnProperty(rawType)){if(options.ignoreDuplicateRegistrations){return}else{throwBindingError("Cannot register type '"+name+"' twice")}}registeredTypes[rawType]=registeredInstance;delete typeDependencies[rawType];if(awaitingDependencies.hasOwnProperty(rawType)){var callbacks=awaitingDependencies[rawType];delete awaitingDependencies[rawType];callbacks.forEach(cb=>cb())}}function __embind_register_bool(rawType,name,size,trueValue,falseValue){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(wt){return!!wt},"toWireType":function(destructors,o){return o?trueValue:falseValue},"argPackAdvance":8,"readValueFromPointer":function(pointer){var heap;if(size===1){heap=HEAP8}else if(size===2){heap=HEAP16}else if(size===4){heap=HEAP32}else{throw new TypeError("Unknown boolean type size: "+name)}return this["fromWireType"](heap[pointer>>shift])},destructorFunction:null})}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType}}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")}var finalizationRegistry=false;function detachFinalizer(handle){}function runDestructor($$){if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}}function releaseClassHandle($$){$$.count.value-=1;var toDelete=0===$$.count.value;if(toDelete){runDestructor($$)}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)}var registeredPointers={};function getInheritedInstanceCount(){return Object.keys(registeredInstances).length}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k])}}return rv}var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}}var delayFunction=undefined;function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes)}}function init_embind(){Module["getInheritedInstanceCount"]=getInheritedInstanceCount;Module["getLiveInheritedInstances"]=getLiveInheritedInstances;Module["flushPendingDeletes"]=flushPendingDeletes;Module["setDelayFunction"]=setDelayFunction}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return attachFinalizer(Object.create(prototype,{$$:{value:record}}))}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}function attachFinalizer(handle){if("undefined"===typeof FinalizationRegistry){attachFinalizer=handle=>handle;return handle}finalizationRegistry=new FinalizationRegistry(info=>{releaseClassHandle(info.$$)});attachFinalizer=handle=>{var $$=handle.$$;var hasSmartPtr=!!$$.smartPtr;if(hasSmartPtr){var info={$$:$$};finalizationRegistry.register(handle,info,handle)}return handle};detachFinalizer=handle=>finalizationRegistry.unregister(handle);return attachFinalizer(handle)}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=attachFinalizer(Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}}));clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}detachFinalizer(this);releaseClassHandle(this.$$);if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}}function ClassHandle_isDeleted(){return!this.$$.ptr}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}function init_ClassHandle(){ClassHandle.prototype["isAliasOf"]=ClassHandle_isAliasOf;ClassHandle.prototype["clone"]=ClassHandle_clone;ClassHandle.prototype["delete"]=ClassHandle_delete;ClassHandle.prototype["isDeleted"]=ClassHandle_isDeleted;ClassHandle.prototype["deleteLater"]=ClassHandle_deleteLater}function ClassHandle(){}function ensureOverloadTable(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError("Function '"+humanName+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+proto[methodName].overloadTable+")!")}return proto[methodName].overloadTable[arguments.length].apply(this,arguments)};proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError("Cannot register public name '"+name+"' twice")}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError("Cannot register multiple overloads of a function with the same number of arguments ("+numArguments+")!")}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError("Expected null or instance of "+desiredClass.name+", got an instance of "+ptrClass.name)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+embindRepr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle.$$){throwBindingError('Cannot pass "'+embindRepr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,Emval.toHandle(function(){clonedHandle["delete"]()}));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+embindRepr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+handle.$$.ptrType.name+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr)}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle["delete"]()}}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee;RegisteredPointer.prototype.destructor=RegisteredPointer_destructor;RegisteredPointer.prototype["argPackAdvance"]=8;RegisteredPointer.prototype["readValueFromPointer"]=simpleReadValueFromPointer;RegisteredPointer.prototype["deleteObject"]=RegisteredPointer_deleteObject;RegisteredPointer.prototype["fromWireType"]=RegisteredPointer_fromWireType}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&®isteredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function dynCallLegacy(sig,ptr,args){var f=Module["dynCall_"+sig];return args&&args.length?f.apply(null,[ptr].concat(args)):f.call(null,ptr)}var wasmTableMirror=[];function getWasmTableEntry(funcPtr){var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func}function dynCall(sig,ptr,args){if(sig.includes("j")){return dynCallLegacy(sig,ptr,args)}var rtn=getWasmTableEntry(ptr).apply(null,args);return rtn}function getDynCaller(sig,ptr){var argCache=[];return function(){argCache.length=0;Object.assign(argCache,arguments);return dynCall(sig,ptr,argCache)}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(){if(signature.includes("j")){return getDynCaller(signature,rawFunction)}return getWasmTableEntry(rawFunction)}var fp=makeDynCaller();if(typeof fp!="function"){throwBindingError("unknown function pointer with signature "+signature+": "+rawFunction)}return fp}var UnboundTypeError=undefined;function getTypeName(type){var ptr=___getTypeName(type);var rv=readLatin1String(ptr);_free(ptr);return rv}function throwUnboundTypeError(message,types){var unboundTypes=[];var seen={};function visit(type){if(seen[type]){return}if(registeredTypes[type]){return}if(typeDependencies[type]){typeDependencies[type].forEach(visit);return}unboundTypes.push(type);seen[type]=true}types.forEach(visit);throw new UnboundTypeError(message+": "+unboundTypes.map(getTypeName).join([", "]))}function __embind_register_class(rawType,rawPointerType,rawConstPointerType,baseClassRawType,getActualTypeSignature,getActualType,upcastSignature,upcast,downcastSignature,downcast,name,destructorSignature,rawDestructor){name=readLatin1String(name);getActualType=embind__requireFunction(getActualTypeSignature,getActualType);if(upcast){upcast=embind__requireFunction(upcastSignature,upcast)}if(downcast){downcast=embind__requireFunction(downcastSignature,downcast)}rawDestructor=embind__requireFunction(destructorSignature,rawDestructor);var legalFunctionName=makeLegalFunctionName(name);exposePublicSymbol(legalFunctionName,function(){throwUnboundTypeError("Cannot construct "+name+" due to unbound types",[baseClassRawType])});whenDependentTypesAreResolved([rawType,rawPointerType,rawConstPointerType],baseClassRawType?[baseClassRawType]:[],function(base){base=base[0];var baseClass;var basePrototype;if(baseClassRawType){baseClass=base.registeredClass;basePrototype=baseClass.instancePrototype}else{basePrototype=ClassHandle.prototype}var constructor=createNamedFunction(legalFunctionName,function(){if(Object.getPrototypeOf(this)!==instancePrototype){throw new BindingError("Use 'new' to construct "+name)}if(undefined===registeredClass.constructor_body){throw new BindingError(name+" has no accessible constructor")}var body=registeredClass.constructor_body[arguments.length];if(undefined===body){throw new BindingError("Tried to invoke ctor of "+name+" with invalid number of parameters ("+arguments.length+") - expected ("+Object.keys(registeredClass.constructor_body).toString()+") parameters instead!")}return body.apply(this,arguments)});var instancePrototype=Object.create(basePrototype,{constructor:{value:constructor}});constructor.prototype=instancePrototype;var registeredClass=new RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast);var referenceConverter=new RegisteredPointer(name,registeredClass,true,false,false);var pointerConverter=new RegisteredPointer(name+"*",registeredClass,false,false,false);var constPointerConverter=new RegisteredPointer(name+" const*",registeredClass,false,true,false);registeredPointers[rawType]={pointerType:pointerConverter,constPointerType:constPointerConverter};replacePublicSymbol(legalFunctionName,constructor);return[referenceConverter,pointerConverter,constPointerConverter]})}function new_(constructor,argumentList){if(!(constructor instanceof Function)){throw new TypeError("new_ called with constructor type "+typeof constructor+" which is not a function")}var dummy=createNamedFunction(constructor.name||"unknownFunctionName",function(){});dummy.prototype=constructor.prototype;var obj=new dummy;var r=constructor.apply(obj,argumentList);return r instanceof Object?r:obj}function craftInvokerFunction(humanName,argTypes,classType,cppInvokerFunc,cppTargetFunc){var argCount=argTypes.length;if(argCount<2){throwBindingError("argTypes array size mismatch! Must at least get return value and 'this' types!")}var isClassMethodFunc=argTypes[1]!==null&&classType!==null;var needsDestructorStack=false;for(var i=1;i0?", ":"")+argsListWired}invokerFnBody+=(returns?"var rv = ":"")+"invoker(fn"+(argsListWired.length>0?", ":"")+argsListWired+");\n";if(needsDestructorStack){invokerFnBody+="runDestructors(destructors);\n"}else{for(var i=isClassMethodFunc?1:2;i>2])}return array}function __embind_register_class_class_function(rawClassType,methodName,argCount,rawArgTypesAddr,invokerSignature,rawInvoker,fn){var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);methodName=readLatin1String(methodName);rawInvoker=embind__requireFunction(invokerSignature,rawInvoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName=classType.name+"."+methodName;function unboundTypesHandler(){throwUnboundTypeError("Cannot call "+humanName+" due to unbound types",rawArgTypes)}if(methodName.startsWith("@@")){methodName=Symbol[methodName.substring(2)]}var proto=classType.registeredClass.constructor;if(undefined===proto[methodName]){unboundTypesHandler.argCount=argCount-1;proto[methodName]=unboundTypesHandler}else{ensureOverloadTable(proto,methodName,humanName);proto[methodName].overloadTable[argCount-1]=unboundTypesHandler}whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));var func=craftInvokerFunction(humanName,invokerArgsArray,null,rawInvoker,fn);if(undefined===proto[methodName].overloadTable){func.argCount=argCount-1;proto[methodName]=func}else{proto[methodName].overloadTable[argCount-1]=func}return[]});return[]})}function __embind_register_class_constructor(rawClassType,argCount,rawArgTypesAddr,invokerSignature,invoker,rawConstructor){assert(argCount>0);var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);invoker=embind__requireFunction(invokerSignature,invoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName="constructor "+classType.name;if(undefined===classType.registeredClass.constructor_body){classType.registeredClass.constructor_body=[]}if(undefined!==classType.registeredClass.constructor_body[argCount-1]){throw new BindingError("Cannot register multiple constructors with identical number of parameters ("+(argCount-1)+") for class '"+classType.name+"'! Overload resolution is currently only performed using the parameter count, not actual type info!")}classType.registeredClass.constructor_body[argCount-1]=()=>{throwUnboundTypeError("Cannot construct "+classType.name+" due to unbound types",rawArgTypes)};whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){argTypes.splice(1,0,null);classType.registeredClass.constructor_body[argCount-1]=craftInvokerFunction(humanName,argTypes,null,invoker,rawConstructor);return[]});return[]})}function __embind_register_class_function(rawClassType,methodName,argCount,rawArgTypesAddr,invokerSignature,rawInvoker,context,isPureVirtual){var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);methodName=readLatin1String(methodName);rawInvoker=embind__requireFunction(invokerSignature,rawInvoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName=classType.name+"."+methodName;if(methodName.startsWith("@@")){methodName=Symbol[methodName.substring(2)]}if(isPureVirtual){classType.registeredClass.pureVirtualFunctions.push(methodName)}function unboundTypesHandler(){throwUnboundTypeError("Cannot call "+humanName+" due to unbound types",rawArgTypes)}var proto=classType.registeredClass.instancePrototype;var method=proto[methodName];if(undefined===method||undefined===method.overloadTable&&method.className!==classType.name&&method.argCount===argCount-2){unboundTypesHandler.argCount=argCount-2;unboundTypesHandler.className=classType.name;proto[methodName]=unboundTypesHandler}else{ensureOverloadTable(proto,methodName,humanName);proto[methodName].overloadTable[argCount-2]=unboundTypesHandler}whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){var memberFunction=craftInvokerFunction(humanName,argTypes,classType,rawInvoker,context);if(undefined===proto[methodName].overloadTable){memberFunction.argCount=argCount-2;proto[methodName]=memberFunction}else{proto[methodName].overloadTable[argCount-2]=memberFunction}return[]});return[]})}function validateThis(this_,classType,humanName){if(!(this_ instanceof Object)){throwBindingError(humanName+' with invalid "this": '+this_)}if(!(this_ instanceof classType.registeredClass.constructor)){throwBindingError(humanName+' incompatible with "this" of type '+this_.constructor.name)}if(!this_.$$.ptr){throwBindingError("cannot call emscripten binding method "+humanName+" on deleted object")}return upcastPointer(this_.$$.ptr,this_.$$.ptrType.registeredClass,classType.registeredClass)}function __embind_register_class_property(classType,fieldName,getterReturnType,getterSignature,getter,getterContext,setterArgumentType,setterSignature,setter,setterContext){fieldName=readLatin1String(fieldName);getter=embind__requireFunction(getterSignature,getter);whenDependentTypesAreResolved([],[classType],function(classType){classType=classType[0];var humanName=classType.name+"."+fieldName;var desc={get:function(){throwUnboundTypeError("Cannot access "+humanName+" due to unbound types",[getterReturnType,setterArgumentType])},enumerable:true,configurable:true};if(setter){desc.set=()=>{throwUnboundTypeError("Cannot access "+humanName+" due to unbound types",[getterReturnType,setterArgumentType])}}else{desc.set=v=>{throwBindingError(humanName+" is a read-only property")}}Object.defineProperty(classType.registeredClass.instancePrototype,fieldName,desc);whenDependentTypesAreResolved([],setter?[getterReturnType,setterArgumentType]:[getterReturnType],function(types){var getterReturnType=types[0];var desc={get:function(){var ptr=validateThis(this,classType,humanName+" getter");return getterReturnType["fromWireType"](getter(getterContext,ptr))},enumerable:true};if(setter){setter=embind__requireFunction(setterSignature,setter);var setterArgumentType=types[1];desc.set=function(v){var ptr=validateThis(this,classType,humanName+" setter");var destructors=[];setter(setterContext,ptr,setterArgumentType["toWireType"](destructors,v));runDestructors(destructors)}}Object.defineProperty(classType.registeredClass.instancePrototype,fieldName,desc);return[]});return[]})}var emval_free_list=[];var emval_handle_array=[{},{value:undefined},{value:null},{value:true},{value:false}];function __emval_decref(handle){if(handle>4&&0===--emval_handle_array[handle].refcount){emval_handle_array[handle]=undefined;emval_free_list.push(handle)}}function count_emval_handles(){var count=0;for(var i=5;i{if(!handle){throwBindingError("Cannot use deleted val. handle = "+handle)}return emval_handle_array[handle].value},toHandle:value=>{switch(value){case undefined:return 1;case null:return 2;case true:return 3;case false:return 4;default:{var handle=emval_free_list.length?emval_free_list.pop():emval_handle_array.length;emval_handle_array[handle]={refcount:1,value:value};return handle}}}};function __embind_register_emval(rawType,name){name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(handle){var rv=Emval.toValue(handle);__emval_decref(handle);return rv},"toWireType":function(destructors,value){return Emval.toHandle(value)},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:null})}function embindRepr(v){if(v===null){return"null"}var t=typeof v;if(t==="object"||t==="array"||t==="function"){return v.toString()}else{return""+v}}function floatReadValueFromPointer(name,shift){switch(shift){case 2:return function(pointer){return this["fromWireType"](HEAPF32[pointer>>2])};case 3:return function(pointer){return this["fromWireType"](HEAPF64[pointer>>3])};default:throw new TypeError("Unknown float type: "+name)}}function __embind_register_float(rawType,name,size){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(value){return value},"toWireType":function(destructors,value){return value},"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer]}:function readU8FromPointer(pointer){return HEAPU8[pointer]};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=value=>value;if(minRange===0){var bitshift=32-8*size;fromWireType=value=>value<>>bitshift}var isUnsignedType=name.includes("unsigned");var checkAssertions=(value,toTypeName)=>{};var toWireType;if(isUnsignedType){toWireType=function(destructors,value){checkAssertions(value,this.name);return value>>>0}}else{toWireType=function(destructors,value){checkAssertions(value,this.name);return value}}registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":toWireType,"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(buffer,data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);var stdStringIsUTF8=name==="std::string";registerType(rawType,{name:name,"fromWireType":function(value){var length=HEAPU32[value>>2];var payload=value+4;var str;if(stdStringIsUTF8){var decodeStartPtr=payload;for(var i=0;i<=length;++i){var currentBytePtr=payload+i;if(i==length||HEAPU8[currentBytePtr]==0){var maxRead=currentBytePtr-decodeStartPtr;var stringSegment=UTF8ToString(decodeStartPtr,maxRead);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+1}}}else{var a=new Array(length);for(var i=0;i>2]=length;if(stdStringIsUTF8&&valueIsOfTypeString){stringToUTF8(value,ptr,length+1)}else{if(valueIsOfTypeString){for(var i=0;i255){_free(ptr);throwBindingError("String has UTF-16 code units that do not fit in 8 bits")}HEAPU8[ptr+i]=charCode}}else{for(var i=0;i>1;var maxIdx=idx+maxBytesToRead/2;while(!(idx>=maxIdx)&&HEAPU16[idx])++idx;endPtr=idx<<1;if(endPtr-ptr>32&&UTF16Decoder){return UTF16Decoder.decode(HEAPU8.subarray(ptr,endPtr))}else{var str="";for(var i=0;!(i>=maxBytesToRead/2);++i){var codeUnit=HEAP16[ptr+i*2>>1];if(codeUnit==0)break;str+=String.fromCharCode(codeUnit)}return str}}function stringToUTF16(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr}function lengthBytesUTF16(str){return str.length*2}function UTF32ToString(ptr,maxBytesToRead){var i=0;var str="";while(!(i>=maxBytesToRead/4)){var utf32=HEAP32[ptr+i*4>>2];if(utf32==0)break;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}return str}function stringToUTF32(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr}function lengthBytesUTF32(str){var len=0;for(var i=0;i=55296&&codeUnit<=57343)++i;len+=4}return len}function __embind_register_std_wstring(rawType,charSize,name){name=readLatin1String(name);var decodeString,encodeString,getHeap,lengthBytesUTF,shift;if(charSize===2){decodeString=UTF16ToString;encodeString=stringToUTF16;lengthBytesUTF=lengthBytesUTF16;getHeap=()=>HEAPU16;shift=1}else if(charSize===4){decodeString=UTF32ToString;encodeString=stringToUTF32;lengthBytesUTF=lengthBytesUTF32;getHeap=()=>HEAPU32;shift=2}registerType(rawType,{name:name,"fromWireType":function(value){var length=HEAPU32[value>>2];var HEAP=getHeap();var str;var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i*charSize;if(i==length||HEAP[currentBytePtr>>shift]==0){var maxReadBytes=currentBytePtr-decodeStartPtr;var stringSegment=decodeString(decodeStartPtr,maxReadBytes);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+charSize}}_free(value);return str},"toWireType":function(destructors,value){if(!(typeof value=="string")){throwBindingError("Cannot pass non-string to C++ string type "+name)}var length=lengthBytesUTF(value);var ptr=_malloc(4+length+charSize);HEAPU32[ptr>>2]=length>>shift;encodeString(value,ptr+4,length+charSize);if(destructors!==null){destructors.push(_free,ptr)}return ptr},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:function(ptr){_free(ptr)}})}function __embind_register_value_object(rawType,name,constructorSignature,rawConstructor,destructorSignature,rawDestructor){structRegistrations[rawType]={name:readLatin1String(name),rawConstructor:embind__requireFunction(constructorSignature,rawConstructor),rawDestructor:embind__requireFunction(destructorSignature,rawDestructor),fields:[]}}function __embind_register_value_object_field(structType,fieldName,getterReturnType,getterSignature,getter,getterContext,setterArgumentType,setterSignature,setter,setterContext){structRegistrations[structType].fields.push({fieldName:readLatin1String(fieldName),getterReturnType:getterReturnType,getter:embind__requireFunction(getterSignature,getter),getterContext:getterContext,setterArgumentType:setterArgumentType,setter:embind__requireFunction(setterSignature,setter),setterContext:setterContext})}function __embind_register_void(rawType,name){name=readLatin1String(name);registerType(rawType,{isVoid:true,name:name,"argPackAdvance":0,"fromWireType":function(){return undefined},"toWireType":function(destructors,o){return undefined}})}function requireRegisteredType(rawType,humanName){var impl=registeredTypes[rawType];if(undefined===impl){throwBindingError(humanName+" has unknown type "+getTypeName(rawType))}return impl}function __emval_as(handle,returnType,destructorsRef){handle=Emval.toValue(handle);returnType=requireRegisteredType(returnType,"emval::as");var destructors=[];var rd=Emval.toHandle(destructors);HEAPU32[destructorsRef>>2]=rd;return returnType["toWireType"](destructors,handle)}var emval_symbols={};function getStringOrSymbol(address){var symbol=emval_symbols[address];if(symbol===undefined){return readLatin1String(address)}return symbol}var emval_methodCallers=[];function __emval_call_void_method(caller,handle,methodName,args){caller=emval_methodCallers[caller];handle=Emval.toValue(handle);methodName=getStringOrSymbol(methodName);caller(handle,methodName,null,args)}function emval_addMethodCaller(caller){var id=emval_methodCallers.length;emval_methodCallers.push(caller);return id}function emval_lookupTypes(argCount,argTypes){var a=new Array(argCount);for(var i=0;i>2],"parameter "+i)}return a}var emval_registeredMethods=[];function __emval_get_method_caller(argCount,argTypes){var types=emval_lookupTypes(argCount,argTypes);var retType=types[0];var signatureName=retType.name+"_$"+types.slice(1).map(function(t){return t.name}).join("_")+"$";var returnId=emval_registeredMethods[signatureName];if(returnId!==undefined){return returnId}var params=["retType"];var args=[retType];var argsList="";for(var i=0;i4){emval_handle_array[handle].refcount+=1}}function __emval_new_array(){return Emval.toHandle([])}function __emval_new_cstring(v){return Emval.toHandle(getStringOrSymbol(v))}function __emval_run_destructors(handle){var destructors=Emval.toValue(handle);runDestructors(destructors);__emval_decref(handle)}function __emval_set_property(handle,key,value){handle=Emval.toValue(handle);key=Emval.toValue(key);value=Emval.toValue(value);handle[key]=value}function __emval_take_value(type,arg){type=requireRegisteredType(type,"_emval_take_value");var v=type["readValueFromPointer"](arg);return Emval.toHandle(v)}function _abort(){abort("")}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function getHeapMax(){return 2147483648}function emscripten_realloc_buffer(size){try{wasmMemory.grow(size-buffer.byteLength+65535>>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}let alignUp=(x,multiple)=>x+(multiple-x%multiple)%multiple;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}var WebGPU={initManagers:function(){if(WebGPU.mgrDevice)return;function Manager(){this.objects={};this.nextId=1;this.create=function(object,wrapper){wrapper=wrapper||{};var id=this.nextId++;wrapper.refcount=1;wrapper.object=object;this.objects[id]=wrapper;return id};this.get=function(id){if(!id)return undefined;var o=this.objects[id];return o.object};this.reference=function(id){var o=this.objects[id];o.refcount++};this.release=function(id){var o=this.objects[id];o.refcount--;if(o.refcount<=0){delete this.objects[id]}}}WebGPU.mgrSurface=WebGPU.mgrSurface||new Manager;WebGPU.mgrSwapChain=WebGPU.mgrSwapChain||new Manager;WebGPU.mgrAdapter=WebGPU.mgrAdapter||new Manager;WebGPU.mgrDevice=WebGPU.mgrDevice||new Manager;WebGPU.mgrQueue=WebGPU.mgrQueue||new Manager;WebGPU.mgrCommandBuffer=WebGPU.mgrCommandBuffer||new Manager;WebGPU.mgrCommandEncoder=WebGPU.mgrCommandEncoder||new Manager;WebGPU.mgrRenderPassEncoder=WebGPU.mgrRenderPassEncoder||new Manager;WebGPU.mgrComputePassEncoder=WebGPU.mgrComputePassEncoder||new Manager;WebGPU.mgrBindGroup=WebGPU.mgrBindGroup||new Manager;WebGPU.mgrBuffer=WebGPU.mgrBuffer||new Manager;WebGPU.mgrSampler=WebGPU.mgrSampler||new Manager;WebGPU.mgrTexture=WebGPU.mgrTexture||new Manager;WebGPU.mgrTextureView=WebGPU.mgrTextureView||new Manager;WebGPU.mgrQuerySet=WebGPU.mgrQuerySet||new Manager;WebGPU.mgrBindGroupLayout=WebGPU.mgrBindGroupLayout||new Manager;WebGPU.mgrPipelineLayout=WebGPU.mgrPipelineLayout||new Manager;WebGPU.mgrRenderPipeline=WebGPU.mgrRenderPipeline||new Manager;WebGPU.mgrComputePipeline=WebGPU.mgrComputePipeline||new Manager;WebGPU.mgrShaderModule=WebGPU.mgrShaderModule||new Manager;WebGPU.mgrRenderBundleEncoder=WebGPU.mgrRenderBundleEncoder||new Manager;WebGPU.mgrRenderBundle=WebGPU.mgrRenderBundle||new Manager},makeColor:function(ptr){return{"r":HEAPF64[ptr>>3],"g":HEAPF64[ptr+8>>3],"b":HEAPF64[ptr+16>>3],"a":HEAPF64[ptr+24>>3]}},makeExtent3D:function(ptr){return{"width":HEAPU32[ptr>>2],"height":HEAPU32[ptr+4>>2],"depthOrArrayLayers":HEAPU32[ptr+8>>2]}},makeOrigin3D:function(ptr){return{"x":HEAPU32[ptr>>2],"y":HEAPU32[ptr+4>>2],"z":HEAPU32[ptr+8>>2]}},makeImageCopyTexture:function(ptr){return{"texture":WebGPU.mgrTexture.get(HEAPU32[ptr+4>>2]),"mipLevel":HEAPU32[ptr+8>>2],"origin":WebGPU.makeOrigin3D(ptr+12),"aspect":WebGPU.TextureAspect[HEAPU32[ptr+24>>2]]}},makeTextureDataLayout:function(ptr){var bytesPerRow=HEAPU32[ptr+16>>2];var rowsPerImage=HEAPU32[ptr+20>>2];return{"offset":HEAPU32[ptr+4+8>>2]*4294967296+HEAPU32[ptr+8>>2],"bytesPerRow":bytesPerRow===4294967295?undefined:bytesPerRow,"rowsPerImage":rowsPerImage===4294967295?undefined:rowsPerImage}},makeImageCopyBuffer:function(ptr){var layoutPtr=ptr+8;var bufferCopyView=WebGPU.makeTextureDataLayout(layoutPtr);bufferCopyView["buffer"]=WebGPU.mgrBuffer.get(HEAPU32[ptr+32>>2]);return bufferCopyView},makePipelineConstants:function(constantCount,constantsPtr){if(!constantCount)return;var constants={};for(var i=0;i>2]);constants[key]=HEAPF64[entryPtr+8>>3]}return constants},makeProgrammableStageDescriptor:function(ptr){if(!ptr)return undefined;return{"module":WebGPU.mgrShaderModule.get(HEAPU32[ptr+4>>2]),"entryPoint":UTF8ToString(HEAPU32[ptr+8>>2]),"constants":WebGPU.makePipelineConstants(HEAPU32[ptr+12>>2],HEAPU32[ptr+16>>2])}},DeviceLostReason:{undefined:0,destroyed:1},PreferredFormat:{rgba8unorm:18,bgra8unorm:23},AddressMode:["repeat","mirror-repeat","clamp-to-edge"],BlendFactor:["zero","one","src","one-minus-src","src-alpha","one-minus-src-alpha","dst","one-minus-dst","dst-alpha","one-minus-dst-alpha","src-alpha-saturated","constant","one-minus-constant"],BlendOperation:["add","subtract","reverse-subtract","min","max"],BufferBindingType:[,"uniform","storage","read-only-storage"],CompareFunction:[,"never","less","less-equal","greater","greater-equal","equal","not-equal","always"],CompilationInfoRequestStatus:["success","error","device-lost","unknown"],ComputePassTimestampLocation:["beginning","end"],CullMode:["none","front","back"],ErrorFilter:["validation","out-of-memory"],FeatureName:{0:undefined,1:"depth-clip-control",2:"depth24unorm-stencil8",3:"depth32float-stencil8",4:"timestamp-query",5:"pipeline-statistics-query",6:"texture-compression-bc",7:"texture-compression-etc2",8:"texture-compression-astc",9:"indirect-first-instance",1e3:"depth-clamping"},FilterMode:["nearest","linear"],FrontFace:["ccw","cw"],IndexFormat:[,"uint16","uint32"],LoadOp:[,"clear","load"],PipelineStatisticName:["vertex-shader-invocations","clipper-invocations","clipper-primitives-out","fragment-shader-invocations","compute-shader-invocations"],PowerPreference:[,"low-power","high-performance"],PredefinedColorSpace:[,"srgb"],PrimitiveTopology:["point-list","line-list","line-strip","triangle-list","triangle-strip"],QueryType:["occlusion","pipeline-statistics","timestamp"],RenderPassTimestampLocation:["beginning","end"],SamplerBindingType:[,"filtering","non-filtering","comparison"],StencilOperation:["keep","zero","replace","invert","increment-clamp","decrement-clamp","increment-wrap","decrement-wrap"],StorageTextureAccess:[,"write-only"],StoreOp:[,"store","discard"],TextureAspect:["all","stencil-only","depth-only"],TextureComponentType:["float","sint","uint","depth-comparison"],TextureDimension:["1d","2d","3d"],TextureFormat:[,"r8unorm","r8snorm","r8uint","r8sint","r16uint","r16sint","r16float","rg8unorm","rg8snorm","rg8uint","rg8sint","r32float","r32uint","r32sint","rg16uint","rg16sint","rg16float","rgba8unorm","rgba8unorm-srgb","rgba8snorm","rgba8uint","rgba8sint","bgra8unorm","bgra8unorm-srgb","rgb10a2unorm","rg11b10ufloat","rgb9e5ufloat","rg32float","rg32uint","rg32sint","rgba16uint","rgba16sint","rgba16float","rgba32float","rgba32uint","rgba32sint","stencil8","depth16unorm","depth24plus","depth24plus-stencil8","depth24unorm-stencil8","depth32float","depth32float-stencil8","bc1-rgba-unorm","bc1-rgba-unorm-srgb","bc2-rgba-unorm","bc2-rgba-unorm-srgb","bc3-rgba-unorm","bc3-rgba-unorm-srgb","bc4-r-unorm","bc4-r-snorm","bc5-rg-unorm","bc5-rg-snorm","bc6h-rgb-ufloat","bc6h-rgb-float","bc7-rgba-unorm","bc7-rgba-unorm-srgb","etc2-rgb8unorm","etc2-rgb8unorm-srgb","etc2-rgb8a1unorm","etc2-rgb8a1unorm-srgb","etc2-rgba8unorm","etc2-rgba8unorm-srgb","eac-r11unorm","eac-r11snorm","eac-rg11unorm","eac-rg11snorm","astc-4x4-unorm","astc-4x4-unorm-srgb","astc-5x4-unorm","astc-5x4-unorm-srgb","astc-5x5-unorm","astc-5x5-unorm-srgb","astc-6x5-unorm","astc-6x5-unorm-srgb","astc-6x6-unorm","astc-6x6-unorm-srgb","astc-8x5-unorm","astc-8x5-unorm-srgb","astc-8x6-unorm","astc-8x6-unorm-srgb","astc-8x8-unorm","astc-8x8-unorm-srgb","astc-10x5-unorm","astc-10x5-unorm-srgb","astc-10x6-unorm","astc-10x6-unorm-srgb","astc-10x8-unorm","astc-10x8-unorm-srgb","astc-10x10-unorm","astc-10x10-unorm-srgb","astc-12x10-unorm","astc-12x10-unorm-srgb","astc-12x12-unorm","astc-12x12-unorm-srgb"],TextureSampleType:[,"float","unfilterable-float","depth","sint","uint"],TextureViewDimension:[,"1d","2d","2d-array","cube","cube-array","3d"],VertexFormat:[,"uint8x2","uint8x4","sint8x2","sint8x4","unorm8x2","unorm8x4","snorm8x2","snorm8x4","uint16x2","uint16x4","sint16x2","sint16x4","unorm16x2","unorm16x4","snorm16x2","snorm16x4","float16x2","float16x4","float32","float32x2","float32x3","float32x4","uint32","uint32x2","uint32x3","uint32x4","sint32","sint32x2","sint32x3","sint32x4"],VertexStepMode:["vertex","instance"],FeatureNameString2Enum:{undefined:"0","depth-clip-control":"1","depth24unorm-stencil8":"2","depth32float-stencil8":"3","timestamp-query":"4","pipeline-statistics-query":"5","texture-compression-bc":"6","texture-compression-etc2":"7","texture-compression-astc":"8","indirect-first-instance":"9","depth-clamping":"1000"}};function _emscripten_webgpu_get_device(){var device=Module["preinitializedWebGPUDevice"];var deviceWrapper={queueId:WebGPU.mgrQueue.create(device["queue"])};return WebGPU.mgrDevice.create(device,deviceWrapper)}var ENV={};function getExecutableName(){return thisProgram||"./this.program"}function getEnvStrings(){if(!getEnvStrings.strings){var lang=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={"USER":"web_user","LOGNAME":"web_user","PATH":"/","PWD":"/","HOME":"/home/web_user","LANG":lang,"_":getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(x+"="+env[x])}getEnvStrings.strings=strings}return getEnvStrings.strings}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}var SYSCALLS={varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret}};function _environ_get(__environ,environ_buf){var bufSize=0;getEnvStrings().forEach(function(string,i){var ptr=environ_buf+bufSize;HEAPU32[__environ+i*4>>2]=ptr;writeAsciiToMemory(string,ptr);bufSize+=string.length+1});return 0}function _environ_sizes_get(penviron_count,penviron_buf_size){var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});HEAPU32[penviron_buf_size>>2]=bufSize;return 0}var printCharBuffers=[null,[],[]];function printChar(stream,curr){var buffer=printCharBuffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}}function _fd_write(fd,iov,iovcnt,pnum){var num=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;for(var j=0;j>2]=num;return 0}function _setTempRet0(val){setTempRet0(val)}function _wgpuAdapterGetProperties(adapterId,properties){HEAP32[properties+4>>2]=0;HEAP32[properties+8>>2]=0;HEAP32[properties+12>>2]=0;HEAP32[properties+16>>2]=0;HEAP32[properties+20>>2]=3;HEAP32[properties+24>>2]=1}function _wgpuAdapterHasFeature(adapterId,featureEnumValue){var adapter=WebGPU.mgrAdapter.get(adapterId);return adapter.features.has(WebGPU.FeatureName[featureEnumValue])}function _wgpuAdapterRelease(id){WebGPU.mgrAdapter.release(id)}function _wgpuBindGroupRelease(id){WebGPU.mgrBindGroup.release(id)}function _wgpuBufferDestroy(bufferId){WebGPU.mgrBuffer.get(bufferId)["destroy"]()}function _wgpuBufferGetMappedRange(bufferId,offset,size){var bufferWrapper=WebGPU.mgrBuffer.objects[bufferId];if(size===0)warnOnce("getMappedRange size=0 no longer means WGPU_WHOLE_MAP_SIZE");size=size>>>0;if(size===4294967295)size=undefined;if(bufferWrapper.mapMode!==2){return 0}var mapped;try{mapped=bufferWrapper.object["getMappedRange"](offset,size)}catch(ex){return 0}var data=_malloc(mapped.byteLength);HEAPU8.fill(0,data,mapped.byteLength);bufferWrapper.onUnmap.push(function(){new Uint8Array(mapped).set(HEAPU8.subarray(data,data+mapped.byteLength));_free(data)});return data}function _wgpuBufferRelease(id){WebGPU.mgrBuffer.release(id)}function _wgpuBufferUnmap(bufferId){var bufferWrapper=WebGPU.mgrBuffer.objects[bufferId];if(!bufferWrapper.onUnmap){return}for(var i=0;i>2]),"queryIndex":HEAPU32[twPtr+4>>2],"location":WebGPU.ComputePassTimestampLocation[HEAPU32[twPtr+8>>2]]}}function makeComputePassTimestampWrites(count,twPtr){var timestampWrites=[];for(var i=0;i>2];if(labelPtr)desc["label"]=UTF8ToString(labelPtr);var timestampWriteCount=HEAPU32[descriptor+8>>2];if(timestampWriteCount){desc["timestampWrites"]=makeComputePassTimestampWrites(timestampWriteCount,HEAPU32[descriptor+12>>2])}}var commandEncoder=WebGPU.mgrCommandEncoder.get(encoderId);return WebGPU.mgrComputePassEncoder.create(commandEncoder["beginComputePass"](desc))}function _wgpuCommandEncoderBeginRenderPass(encoderId,descriptor){function makeColorAttachment(caPtr){var viewPtr=HEAPU32[caPtr>>2];if(viewPtr===0){return undefined}var loadOpInt=HEAPU32[caPtr+8>>2];var storeOpInt=HEAPU32[caPtr+12>>2];var clearValue=WebGPU.makeColor(caPtr+16);return{"view":WebGPU.mgrTextureView.get(viewPtr),"resolveTarget":WebGPU.mgrTextureView.get(HEAPU32[caPtr+4>>2]),"clearValue":clearValue,"loadOp":WebGPU.LoadOp[loadOpInt],"storeOp":WebGPU.StoreOp[storeOpInt]}}function makeColorAttachments(count,caPtr){var attachments=[];for(var i=0;i>2]),"depthClearValue":HEAPF32[dsaPtr+12>>2],"depthLoadOp":WebGPU.LoadOp[HEAPU32[dsaPtr+4>>2]],"depthStoreOp":WebGPU.StoreOp[HEAPU32[dsaPtr+8>>2]],"depthReadOnly":HEAP8[dsaPtr+16>>0]!==0,"stencilClearValue":HEAPU32[dsaPtr+28>>2],"stencilLoadOp":WebGPU.LoadOp[HEAPU32[dsaPtr+20>>2]],"stencilStoreOp":WebGPU.StoreOp[HEAPU32[dsaPtr+24>>2]],"stencilReadOnly":HEAP8[dsaPtr+32>>0]!==0}}function makeRenderPassTimestampWrite(twPtr){return{"querySet":WebGPU.mgrQuerySet.get(HEAPU32[twPtr>>2]),"queryIndex":HEAPU32[twPtr+4>>2],"location":WebGPU.RenderPassTimestampLocation[HEAPU32[twPtr+8>>2]]}}function makeRenderPassTimestampWrites(count,twPtr){var timestampWrites=[];for(var i=0;i>2],HEAPU32[descriptor+12>>2]),"depthStencilAttachment":makeDepthStencilAttachment(HEAPU32[descriptor+16>>2]),"occlusionQuerySet":WebGPU.mgrQuerySet.get(HEAPU32[descriptor+20>>2])};var labelPtr=HEAPU32[descriptor+4>>2];if(labelPtr)desc["label"]=UTF8ToString(labelPtr);var timestampWriteCount=HEAPU32[descriptor+24>>2];if(timestampWriteCount){desc["timestampWrites"]=makeRenderPassTimestampWrites(timestampWriteCount,HEAPU32[descriptor+28>>2])}return desc}var desc=makeRenderPassDescriptor(descriptor);var commandEncoder=WebGPU.mgrCommandEncoder.get(encoderId);return WebGPU.mgrRenderPassEncoder.create(commandEncoder["beginRenderPass"](desc))}function _wgpuCommandEncoderCopyBufferToBuffer(encoderId,srcId,srcOffset_low,srcOffset_high,dstId,dstOffset_low,dstOffset_high,size_low,size_high){var commandEncoder=WebGPU.mgrCommandEncoder.get(encoderId);var src=WebGPU.mgrBuffer.get(srcId);var dst=WebGPU.mgrBuffer.get(dstId);commandEncoder["copyBufferToBuffer"](src,srcOffset_high*4294967296+srcOffset_low,dst,dstOffset_high*4294967296+dstOffset_low,size_high*4294967296+size_low)}function _wgpuCommandEncoderCopyBufferToTexture(encoderId,srcPtr,dstPtr,copySizePtr){var commandEncoder=WebGPU.mgrCommandEncoder.get(encoderId);var copySize=WebGPU.makeExtent3D(copySizePtr);commandEncoder["copyBufferToTexture"](WebGPU.makeImageCopyBuffer(srcPtr),WebGPU.makeImageCopyTexture(dstPtr),copySize)}function _wgpuCommandEncoderCopyTextureToTexture(encoderId,srcPtr,dstPtr,copySizePtr){var commandEncoder=WebGPU.mgrCommandEncoder.get(encoderId);var copySize=WebGPU.makeExtent3D(copySizePtr);commandEncoder["copyTextureToTexture"](WebGPU.makeImageCopyTexture(srcPtr),WebGPU.makeImageCopyTexture(dstPtr),copySize)}function _wgpuCommandEncoderFinish(encoderId){var commandEncoder=WebGPU.mgrCommandEncoder.get(encoderId);return WebGPU.mgrCommandBuffer.create(commandEncoder["finish"]())}function _wgpuCommandEncoderRelease(id){WebGPU.mgrCommandEncoder.release(id)}function _wgpuComputePassEncoderDispatchWorkgroups(passId,x,y,z){var pass=WebGPU.mgrComputePassEncoder.get(passId);if(pass["dispatchWorkgroups"]){pass["dispatchWorkgroups"](x,y,z)}else{pass["dispatch"](x,y,z)}}function _wgpuComputePassEncoderDispatchWorkgroupsIndirect(passId,indirectBufferId,indirectOffset_low,indirectOffset_high){var indirectBuffer=WebGPU.mgrBuffer.get(indirectBufferId);var indirectOffset=indirectOffset_high*4294967296+indirectOffset_low;var pass=WebGPU.mgrComputePassEncoder.get(passId);if(pass["dispatchWorkgroupsIndirect"]){pass["dispatchWorkgroupsIndirect"](indirectBuffer,indirectOffset)}else{pass["dispatchIndirect"](indirectBuffer,indirectOffset)}}function _wgpuComputePassEncoderEnd(passId){var pass=WebGPU.mgrComputePassEncoder.get(passId);pass["end"]()}function _wgpuComputePassEncoderRelease(id){WebGPU.mgrComputePassEncoder.release(id)}function _wgpuComputePassEncoderSetBindGroup(passId,groupIndex,groupId,dynamicOffsetCount,dynamicOffsetsPtr){var pass=WebGPU.mgrComputePassEncoder.get(passId);var group=WebGPU.mgrBindGroup.get(groupId);if(dynamicOffsetCount==0){pass["setBindGroup"](groupIndex,group)}else{var offsets=[];for(var i=0;i>2])}pass["setBindGroup"](groupIndex,group,offsets)}}function _wgpuComputePassEncoderSetPipeline(passId,pipelineId){var pass=WebGPU.mgrComputePassEncoder.get(passId);var pipeline=WebGPU.mgrComputePipeline.get(pipelineId);pass["setPipeline"](pipeline)}function _wgpuComputePipelineRelease(id){WebGPU.mgrComputePipeline.release(id)}function _wgpuDeviceCreateBindGroup(deviceId,descriptor){function makeEntry(entryPtr){var bufferId=HEAPU32[entryPtr+8>>2];var samplerId=HEAPU32[entryPtr+32>>2];var textureViewId=HEAPU32[entryPtr+36>>2];var binding=HEAPU32[entryPtr+4>>2];if(bufferId){var size_low=HEAPU32[entryPtr+24>>2];var size_high=HEAPU32[entryPtr+28>>2];var size=size_high===-1&&size_low===-1?undefined:size_high*4294967296+size_low;return{"binding":binding,"resource":{"buffer":WebGPU.mgrBuffer.get(bufferId),"offset":HEAPU32[entryPtr+4+16>>2]*4294967296+HEAPU32[entryPtr+16>>2],"size":size}}}else if(samplerId){return{"binding":binding,"resource":WebGPU.mgrSampler.get(samplerId)}}else{return{"binding":binding,"resource":WebGPU.mgrTextureView.get(textureViewId)}}}function makeEntries(count,entriesPtrs){var entries=[];for(var i=0;i>2]),"entries":makeEntries(HEAPU32[descriptor+12>>2],HEAPU32[descriptor+16>>2])};var labelPtr=HEAPU32[descriptor+4>>2];if(labelPtr)desc["label"]=UTF8ToString(labelPtr);var device=WebGPU.mgrDevice.get(deviceId);return WebGPU.mgrBindGroup.create(device["createBindGroup"](desc))}function _wgpuDeviceCreateBindGroupLayout(deviceId,descriptor){function makeBufferEntry(entryPtr){var typeInt=HEAPU32[entryPtr+4>>2];if(!typeInt)return undefined;return{"type":WebGPU.BufferBindingType[typeInt],"hasDynamicOffset":HEAP8[entryPtr+8>>0]!==0,"minBindingSize":HEAPU32[entryPtr+4+16>>2]*4294967296+HEAPU32[entryPtr+16>>2]}}function makeSamplerEntry(entryPtr){var typeInt=HEAPU32[entryPtr+4>>2];if(!typeInt)return undefined;return{"type":WebGPU.SamplerBindingType[typeInt]}}function makeTextureEntry(entryPtr){var sampleTypeInt=HEAPU32[entryPtr+4>>2];if(!sampleTypeInt)return undefined;return{"sampleType":WebGPU.TextureSampleType[sampleTypeInt],"viewDimension":WebGPU.TextureViewDimension[HEAPU32[entryPtr+8>>2]],"multisampled":HEAP8[entryPtr+12>>0]!==0}}function makeStorageTextureEntry(entryPtr){var accessInt=HEAPU32[entryPtr+4>>2];if(!accessInt)return undefined;return{"access":WebGPU.StorageTextureAccess[accessInt],"format":WebGPU.TextureFormat[HEAPU32[entryPtr+8>>2]],"viewDimension":WebGPU.TextureViewDimension[HEAPU32[entryPtr+12>>2]]}}function makeEntry(entryPtr){return{"binding":HEAPU32[entryPtr+4>>2],"visibility":HEAPU32[entryPtr+8>>2],"buffer":makeBufferEntry(entryPtr+16),"sampler":makeSamplerEntry(entryPtr+40),"texture":makeTextureEntry(entryPtr+48),"storageTexture":makeStorageTextureEntry(entryPtr+64)}}function makeEntries(count,entriesPtrs){var entries=[];for(var i=0;i>2],HEAPU32[descriptor+12>>2])};var labelPtr=HEAPU32[descriptor+4>>2];if(labelPtr)desc["label"]=UTF8ToString(labelPtr);var device=WebGPU.mgrDevice.get(deviceId);return WebGPU.mgrBindGroupLayout.create(device["createBindGroupLayout"](desc))}function _wgpuDeviceCreateBuffer(deviceId,descriptor){var mappedAtCreation=HEAP8[descriptor+24>>0]!==0;var desc={"label":undefined,"usage":HEAPU32[descriptor+8>>2],"size":HEAPU32[descriptor+4+16>>2]*4294967296+HEAPU32[descriptor+16>>2],"mappedAtCreation":mappedAtCreation};var labelPtr=HEAPU32[descriptor+4>>2];if(labelPtr)desc["label"]=UTF8ToString(labelPtr);var device=WebGPU.mgrDevice.get(deviceId);var bufferWrapper={};var id=WebGPU.mgrBuffer.create(device["createBuffer"](desc),bufferWrapper);if(mappedAtCreation){bufferWrapper.mapMode=2;bufferWrapper.onUnmap=[]}return id}function _wgpuDeviceCreateCommandEncoder(deviceId,descriptor){var desc;if(descriptor){desc={"label":undefined};var labelPtr=HEAPU32[descriptor+4>>2];if(labelPtr)desc["label"]=UTF8ToString(labelPtr)}var device=WebGPU.mgrDevice.get(deviceId);return WebGPU.mgrCommandEncoder.create(device["createCommandEncoder"](desc))}function _wgpuDeviceCreateComputePipeline(deviceId,descriptor){var desc={"label":undefined,"layout":WebGPU.mgrPipelineLayout.get(HEAPU32[descriptor+8>>2]),"compute":WebGPU.makeProgrammableStageDescriptor(descriptor+12)};var labelPtr=HEAPU32[descriptor+4>>2];if(labelPtr)desc["label"]=UTF8ToString(labelPtr);var device=WebGPU.mgrDevice.get(deviceId);return WebGPU.mgrComputePipeline.create(device["createComputePipeline"](desc))}function _wgpuDeviceCreatePipelineLayout(deviceId,descriptor){var bglCount=HEAPU32[descriptor+8>>2];var bglPtr=HEAPU32[descriptor+12>>2];var bgls=[];for(var i=0;i>2]))}var desc={"label":undefined,"bindGroupLayouts":bgls};var labelPtr=HEAPU32[descriptor+4>>2];if(labelPtr)desc["label"]=UTF8ToString(labelPtr);var device=WebGPU.mgrDevice.get(deviceId);return WebGPU.mgrPipelineLayout.create(device["createPipelineLayout"](desc))}function _wgpuDeviceCreateRenderPipeline(deviceId,descriptor){function makePrimitiveState(rsPtr){if(!rsPtr)return undefined;return{"topology":WebGPU.PrimitiveTopology[HEAPU32[rsPtr+4>>2]],"stripIndexFormat":WebGPU.IndexFormat[HEAPU32[rsPtr+8>>2]],"frontFace":WebGPU.FrontFace[HEAPU32[rsPtr+12>>2]],"cullMode":WebGPU.CullMode[HEAPU32[rsPtr+16>>2]]}}function makeBlendComponent(bdPtr){if(!bdPtr)return undefined;return{"operation":WebGPU.BlendOperation[HEAPU32[bdPtr>>2]],"srcFactor":WebGPU.BlendFactor[HEAPU32[bdPtr+4>>2]],"dstFactor":WebGPU.BlendFactor[HEAPU32[bdPtr+8>>2]]}}function makeBlendState(bsPtr){if(!bsPtr)return undefined;return{"alpha":makeBlendComponent(bsPtr+12),"color":makeBlendComponent(bsPtr+0)}}function makeColorState(csPtr){var formatInt=HEAPU32[csPtr+4>>2];return formatInt===0?undefined:{"format":WebGPU.TextureFormat[formatInt],"blend":makeBlendState(HEAPU32[csPtr+8>>2]),"writeMask":HEAPU32[csPtr+12>>2]}}function makeColorStates(count,csArrayPtr){var states=[];for(var i=0;i>2]],"failOp":WebGPU.StencilOperation[HEAPU32[ssfPtr+4>>2]],"depthFailOp":WebGPU.StencilOperation[HEAPU32[ssfPtr+8>>2]],"passOp":WebGPU.StencilOperation[HEAPU32[ssfPtr+12>>2]]}}function makeDepthStencilState(dssPtr){if(!dssPtr)return undefined;return{"format":WebGPU.TextureFormat[HEAPU32[dssPtr+4>>2]],"depthWriteEnabled":HEAP8[dssPtr+8>>0]!==0,"depthCompare":WebGPU.CompareFunction[HEAPU32[dssPtr+12>>2]],"stencilFront":makeStencilStateFace(dssPtr+16),"stencilBack":makeStencilStateFace(dssPtr+32),"stencilReadMask":HEAPU32[dssPtr+48>>2],"stencilWriteMask":HEAPU32[dssPtr+52>>2],"depthBias":HEAPU32[dssPtr+56>>2],"depthBiasSlopeScale":HEAPF32[dssPtr+60>>2],"depthBiasClamp":HEAPF32[dssPtr+64>>2]}}function makeVertexAttribute(vaPtr){return{"format":WebGPU.VertexFormat[HEAPU32[vaPtr>>2]],"offset":HEAPU32[vaPtr+4+8>>2]*4294967296+HEAPU32[vaPtr+8>>2],"shaderLocation":HEAPU32[vaPtr+16>>2]}}function makeVertexAttributes(count,vaArrayPtr){var vas=[];for(var i=0;i>2]*4294967296+HEAPU32[vbPtr>>2],"stepMode":WebGPU.VertexStepMode[HEAPU32[vbPtr+8>>2]],"attributes":makeVertexAttributes(HEAPU32[vbPtr+12>>2],HEAPU32[vbPtr+16>>2])}}function makeVertexBuffers(count,vbArrayPtr){if(!count)return undefined;var vbs=[];for(var i=0;i>2]),"entryPoint":UTF8ToString(HEAPU32[viPtr+8>>2]),"constants":WebGPU.makePipelineConstants(HEAPU32[viPtr+12>>2],HEAPU32[viPtr+16>>2]),"buffers":makeVertexBuffers(HEAPU32[viPtr+20>>2],HEAPU32[viPtr+24>>2])}}function makeMultisampleState(msPtr){if(!msPtr)return undefined;return{"count":HEAPU32[msPtr+4>>2],"mask":HEAPU32[msPtr+8>>2],"alphaToCoverageEnabled":HEAP8[msPtr+12>>0]!==0}}function makeFragmentState(fsPtr){if(!fsPtr)return undefined;return{"module":WebGPU.mgrShaderModule.get(HEAPU32[fsPtr+4>>2]),"entryPoint":UTF8ToString(HEAPU32[fsPtr+8>>2]),"constants":WebGPU.makePipelineConstants(HEAPU32[fsPtr+12>>2],HEAPU32[fsPtr+16>>2]),"targets":makeColorStates(HEAPU32[fsPtr+20>>2],HEAPU32[fsPtr+24>>2])}}var desc={"label":undefined,"layout":WebGPU.mgrPipelineLayout.get(HEAPU32[descriptor+8>>2]),"vertex":makeVertexState(descriptor+12),"primitive":makePrimitiveState(descriptor+40),"depthStencil":makeDepthStencilState(HEAPU32[descriptor+60>>2]),"multisample":makeMultisampleState(descriptor+64),"fragment":makeFragmentState(HEAPU32[descriptor+80>>2])};var labelPtr=HEAPU32[descriptor+4>>2];if(labelPtr)desc["label"]=UTF8ToString(labelPtr);var device=WebGPU.mgrDevice.get(deviceId);return WebGPU.mgrRenderPipeline.create(device["createRenderPipeline"](desc))}function _wgpuDeviceCreateSampler(deviceId,descriptor){var desc={"label":undefined,"addressModeU":WebGPU.AddressMode[HEAPU32[descriptor+8>>2]],"addressModeV":WebGPU.AddressMode[HEAPU32[descriptor+12>>2]],"addressModeW":WebGPU.AddressMode[HEAPU32[descriptor+16>>2]],"magFilter":WebGPU.FilterMode[HEAPU32[descriptor+20>>2]],"minFilter":WebGPU.FilterMode[HEAPU32[descriptor+24>>2]],"mipmapFilter":WebGPU.FilterMode[HEAPU32[descriptor+28>>2]],"lodMinClamp":HEAPF32[descriptor+32>>2],"lodMaxClamp":HEAPF32[descriptor+36>>2],"compare":WebGPU.CompareFunction[HEAPU32[descriptor+40>>2]]};var labelPtr=HEAPU32[descriptor+4>>2];if(labelPtr)desc["label"]=UTF8ToString(labelPtr);var device=WebGPU.mgrDevice.get(deviceId);return WebGPU.mgrSampler.create(device["createSampler"](desc))}function _wgpuDeviceCreateShaderModule(deviceId,descriptor){var nextInChainPtr=HEAPU32[descriptor>>2];var sType=HEAPU32[nextInChainPtr+4>>2];var desc={"label":undefined,"code":""};var labelPtr=HEAPU32[descriptor+4>>2];if(labelPtr)desc["label"]=UTF8ToString(labelPtr);switch(sType){case 5:{var count=HEAPU32[nextInChainPtr+8>>2];var start=HEAPU32[nextInChainPtr+12>>2];desc["code"]=HEAPU32.subarray(start>>2,(start>>2)+count);break}case 6:{var sourcePtr=HEAPU32[nextInChainPtr+8>>2];if(sourcePtr){desc["code"]=UTF8ToString(sourcePtr)}break}}var device=WebGPU.mgrDevice.get(deviceId);return WebGPU.mgrShaderModule.create(device["createShaderModule"](desc))}function _wgpuDeviceCreateSwapChain(deviceId,surfaceId,descriptor){var device=WebGPU.mgrDevice.get(deviceId);var context=WebGPU.mgrSurface.get(surfaceId);var canvasSize=[HEAPU32[descriptor+16>>2],HEAPU32[descriptor+20>>2]];if(canvasSize[0]!==0){context["canvas"]["width"]=canvasSize[0]}if(canvasSize[1]!==0){context["canvas"]["height"]=canvasSize[1]}var configuration={"device":device,"format":WebGPU.TextureFormat[HEAPU32[descriptor+12>>2]],"usage":HEAPU32[descriptor+8>>2],"alphaMode":"opaque"};context["configure"](configuration);return WebGPU.mgrSwapChain.create(context)}function _wgpuDeviceCreateTexture(deviceId,descriptor){var desc={"label":undefined,"size":WebGPU.makeExtent3D(descriptor+16),"mipLevelCount":HEAPU32[descriptor+32>>2],"sampleCount":HEAPU32[descriptor+36>>2],"dimension":WebGPU.TextureDimension[HEAPU32[descriptor+12>>2]],"format":WebGPU.TextureFormat[HEAPU32[descriptor+28>>2]],"usage":HEAPU32[descriptor+8>>2]};var labelPtr=HEAPU32[descriptor+4>>2];if(labelPtr)desc["label"]=UTF8ToString(labelPtr);var viewFormatCount=HEAPU32[descriptor+40>>2];if(viewFormatCount){var viewFormatsPtr=HEAPU32[descriptor+44>>2];desc["viewFormats"]=Array.from(HEAP32.subarray(viewFormatsPtr>>2,(viewFormatsPtr>>2)+viewFormatCount),function(format){return WebGPU.TextureFormat[format]})}var device=WebGPU.mgrDevice.get(deviceId);return WebGPU.mgrTexture.create(device["createTexture"](desc))}function _wgpuDeviceGetQueue(deviceId){var queueId=WebGPU.mgrDevice.objects[deviceId].queueId;WebGPU.mgrQueue.reference(queueId);return queueId}function _wgpuDeviceRelease(id){WebGPU.mgrDevice.release(id)}function maybeCStringToJsString(cString){return cString>2?UTF8ToString(cString):cString}var specialHTMLTargets=[0,document,window];function findEventTarget(target){target=maybeCStringToJsString(target);var domElement=specialHTMLTargets[target]||document.querySelector(target);return domElement}function findCanvasEventTarget(target){return findEventTarget(target)}function _wgpuInstanceCreateSurface(instanceId,descriptor){var nextInChainPtr=HEAPU32[descriptor>>2];var descriptorFromCanvasHTMLSelector=nextInChainPtr;var selectorPtr=HEAPU32[descriptorFromCanvasHTMLSelector+8>>2];var canvas=findCanvasEventTarget(selectorPtr);var context=canvas.getContext("webgpu");if(!context)return 0;var labelPtr=HEAPU32[descriptor+4>>2];if(labelPtr)context.surfaceLabelWebGPU=UTF8ToString(labelPtr);return WebGPU.mgrSurface.create(context)}function _wgpuInstanceRelease(){}function callUserCallback(func){if(ABORT){return}try{func()}catch(e){handleException(e)}}function allocateUTF8(str){var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8Array(str,HEAP8,ret,size);return ret}function _wgpuInstanceRequestAdapter(instanceId,options,callback,userdata){var opts;if(options){opts={"powerPreference":WebGPU.PowerPreference[HEAPU32[options+8>>2]],"forceFallbackAdapter":HEAP8[options+12>>0]!==0}}if(!("gpu"in navigator)){var messagePtr=allocateUTF8("WebGPU not available on this browser (navigator.gpu is not available)");getWasmTableEntry(callback)(1,0,messagePtr,userdata);_free(messagePtr);return}navigator["gpu"]["requestAdapter"](opts).then(function(adapter){callUserCallback(function(){if(adapter){var adapterId=WebGPU.mgrAdapter.create(adapter);getWasmTableEntry(callback)(0,adapterId,0,userdata)}else{var messagePtr=allocateUTF8("WebGPU not available on this system (requestAdapter returned null)");getWasmTableEntry(callback)(1,0,messagePtr,userdata);_free(messagePtr)}})},function(ex){callUserCallback(function(){var messagePtr=allocateUTF8(ex.message);getWasmTableEntry(callback)(2,0,messagePtr,userdata);_free(messagePtr)})})}function _wgpuPipelineLayoutRelease(id){WebGPU.mgrPipelineLayout.release(id)}function _wgpuQuerySetDestroy(querySetId){WebGPU.mgrQuerySet.get(querySetId)["destroy"]()}function _wgpuQuerySetRelease(id){WebGPU.mgrQuerySet.release(id)}function _wgpuQueueOnSubmittedWorkDone(queueId,signalValue_low,signalValue_high,callback,userdata){var queue=WebGPU.mgrQueue.get(queueId);queue["onSubmittedWorkDone"]().then(function(){callUserCallback(function(){getWasmTableEntry(callback)(0,userdata)})},function(){callUserCallback(function(){getWasmTableEntry(callback)(1,userdata)})})}function _wgpuQueueRelease(id){WebGPU.mgrQueue.release(id)}function _wgpuQueueSubmit(queueId,commandCount,commands){var queue=WebGPU.mgrQueue.get(queueId);var cmds=Array.from(HEAP32.subarray(commands>>2,(commands>>2)+commandCount),function(id){return WebGPU.mgrCommandBuffer.get(id)});queue["submit"](cmds)}function _wgpuQueueWriteBuffer(queueId,bufferId,bufferOffset_low,bufferOffset_high,data,size){var queue=WebGPU.mgrQueue.get(queueId);var buffer=WebGPU.mgrBuffer.get(bufferId);var bufferOffset=bufferOffset_high*4294967296+bufferOffset_low;var subarray=HEAPU8.subarray(data,data+size);queue["writeBuffer"](buffer,bufferOffset,subarray,0,size)}function _wgpuQueueWriteTexture(queueId,destinationPtr,data,dataSize,dataLayoutPtr,writeSizePtr){var queue=WebGPU.mgrQueue.get(queueId);var destination=WebGPU.makeImageCopyTexture(destinationPtr);var dataLayout=WebGPU.makeTextureDataLayout(dataLayoutPtr);var writeSize=WebGPU.makeExtent3D(writeSizePtr);var subarray=HEAPU8.subarray(data,data+dataSize);queue["writeTexture"](destination,subarray,dataLayout,writeSize)}function _wgpuRenderPassEncoderDraw(passId,vertexCount,instanceCount,firstVertex,firstInstance){var pass=WebGPU.mgrRenderPassEncoder.get(passId);pass["draw"](vertexCount,instanceCount,firstVertex,firstInstance)}function _wgpuRenderPassEncoderDrawIndexed(passId,indexCount,instanceCount,firstIndex,baseVertex,firstInstance){var pass=WebGPU.mgrRenderPassEncoder.get(passId);pass["drawIndexed"](indexCount,instanceCount,firstIndex,baseVertex,firstInstance)}function _wgpuRenderPassEncoderDrawIndirect(passId,indirectBufferId,indirectOffset_low,indirectOffset_high){var indirectBuffer=WebGPU.mgrBuffer.get(indirectBufferId);var indirectOffset=indirectOffset_high*4294967296+indirectOffset_low;var pass=WebGPU.mgrRenderPassEncoder.get(passId);pass["drawIndirect"](indirectBuffer,indirectOffset)}function _wgpuRenderPassEncoderEnd(passId){var pass=WebGPU.mgrRenderPassEncoder.get(passId);pass["end"]()}function _wgpuRenderPassEncoderRelease(id){WebGPU.mgrRenderPassEncoder.release(id)}function _wgpuRenderPassEncoderSetBindGroup(passId,groupIndex,groupId,dynamicOffsetCount,dynamicOffsetsPtr){var pass=WebGPU.mgrRenderPassEncoder.get(passId);var group=WebGPU.mgrBindGroup.get(groupId);if(dynamicOffsetCount==0){pass["setBindGroup"](groupIndex,group)}else{var offsets=[];for(var i=0;i>2])}pass["setBindGroup"](groupIndex,group,offsets)}}function _wgpuRenderPassEncoderSetBlendConstant(passId,colorPtr){var pass=WebGPU.mgrRenderPassEncoder.get(passId);var color=WebGPU.makeColor(colorPtr);pass["setBlendConstant"](color)}function _wgpuRenderPassEncoderSetIndexBuffer(passId,bufferId,format,offset_low,offset_high,size_low,size_high){var pass=WebGPU.mgrRenderPassEncoder.get(passId);var buffer=WebGPU.mgrBuffer.get(bufferId);var offset=offset_high*4294967296+offset_low;var size=size_high===-1&&size_low===-1?undefined:size_high*4294967296+size_low;pass["setIndexBuffer"](buffer,WebGPU.IndexFormat[format],offset,size)}function _wgpuRenderPassEncoderSetPipeline(passId,pipelineId){var pass=WebGPU.mgrRenderPassEncoder.get(passId);var pipeline=WebGPU.mgrRenderPipeline.get(pipelineId);pass["setPipeline"](pipeline)}function _wgpuRenderPassEncoderSetScissorRect(passId,x,y,w,h){var pass=WebGPU.mgrRenderPassEncoder.get(passId);pass["setScissorRect"](x,y,w,h)}function _wgpuRenderPassEncoderSetStencilReference(passId,reference){var pass=WebGPU.mgrRenderPassEncoder.get(passId);pass["setStencilReference"](reference)}function _wgpuRenderPassEncoderSetVertexBuffer(passId,slot,bufferId,offset_low,offset_high,size_low,size_high){var pass=WebGPU.mgrRenderPassEncoder.get(passId);var buffer=WebGPU.mgrBuffer.get(bufferId);var offset=offset_high*4294967296+offset_low;var size=size_high===-1&&size_low===-1?undefined:size_high*4294967296+size_low;pass["setVertexBuffer"](slot,buffer,offset,size)}function _wgpuRenderPassEncoderSetViewport(passId,x,y,w,h,minDepth,maxDepth){var pass=WebGPU.mgrRenderPassEncoder.get(passId);pass["setViewport"](x,y,w,h,minDepth,maxDepth)}function _wgpuRenderPipelineRelease(id){WebGPU.mgrRenderPipeline.release(id)}function _wgpuSamplerRelease(id){WebGPU.mgrSampler.release(id)}function _wgpuShaderModuleRelease(id){WebGPU.mgrShaderModule.release(id)}function _wgpuSurfaceRelease(id){WebGPU.mgrSurface.release(id)}function _wgpuSwapChainGetCurrentTextureView(swapChainId){var context=WebGPU.mgrSwapChain.get(swapChainId);return WebGPU.mgrTextureView.create(context["getCurrentTexture"]()["createView"]())}function _wgpuSwapChainRelease(id){WebGPU.mgrSwapChain.release(id)}function _wgpuTextureCreateView(textureId,descriptor){var desc;if(descriptor){var mipLevelCount=HEAPU32[descriptor+20>>2];var arrayLayerCount=HEAPU32[descriptor+28>>2];desc={"format":WebGPU.TextureFormat[HEAPU32[descriptor+8>>2]],"dimension":WebGPU.TextureViewDimension[HEAPU32[descriptor+12>>2]],"baseMipLevel":HEAPU32[descriptor+16>>2],"mipLevelCount":mipLevelCount===4294967295?undefined:mipLevelCount,"baseArrayLayer":HEAPU32[descriptor+24>>2],"arrayLayerCount":arrayLayerCount===4294967295?undefined:arrayLayerCount,"aspect":WebGPU.TextureAspect[HEAPU32[descriptor+32>>2]]};var labelPtr=HEAPU32[descriptor+4>>2];if(labelPtr)desc["label"]=UTF8ToString(labelPtr)}var texture=WebGPU.mgrTexture.get(textureId);return WebGPU.mgrTextureView.create(texture["createView"](desc))}function _wgpuTextureDestroy(textureId){WebGPU.mgrTexture.get(textureId)["destroy"]()}function _wgpuTextureRelease(id){WebGPU.mgrTexture.release(id)}function _wgpuTextureViewRelease(id){WebGPU.mgrTextureView.release(id)}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}InternalError=Module["InternalError"]=extendError(Error,"InternalError");embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");init_ClassHandle();init_embind();init_RegisteredPointer();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");init_emval();WebGPU.initManagers();var asmLibraryArg={"h":__embind_finalize_value_object,"Ta":__embind_register_bigint,"na":__embind_register_bool,"m":__embind_register_class,"K":__embind_register_class_class_function,"q":__embind_register_class_constructor,"d":__embind_register_class_function,"c":__embind_register_class_property,"ma":__embind_register_emval,"Q":__embind_register_float,"s":__embind_register_integer,"r":__embind_register_memory_view,"R":__embind_register_std_string,"D":__embind_register_std_wstring,"i":__embind_register_value_object,"a":__embind_register_value_object_field,"oa":__embind_register_void,"k":__emval_as,"V":__emval_call_void_method,"b":__emval_decref,"W":__emval_get_method_caller,"g":__emval_get_property,"l":__emval_incref,"p":__emval_new_array,"n":__emval_new_cstring,"j":__emval_run_destructors,"o":__emval_set_property,"f":__emval_take_value,"e":_abort,"ka":_emscripten_memcpy_big,"C":_emscripten_resize_heap,"Ba":_emscripten_webgpu_get_device,"ha":_environ_get,"ia":_environ_sizes_get,"ja":_fd_write,"P":_setTempRet0,"Ga":_wgpuAdapterGetProperties,"J":_wgpuAdapterHasFeature,"Da":_wgpuAdapterRelease,"Ha":_wgpuBindGroupRelease,"ca":_wgpuBufferDestroy,"O":_wgpuBufferGetMappedRange,"ba":_wgpuBufferRelease,"B":_wgpuBufferUnmap,"N":_wgpuCommandBufferRelease,"Ja":_wgpuCommandEncoderBeginComputePass,"pa":_wgpuCommandEncoderBeginRenderPass,"Wa":_wgpuCommandEncoderCopyBufferToBuffer,"da":_wgpuCommandEncoderCopyBufferToTexture,"Ka":_wgpuCommandEncoderCopyTextureToTexture,"u":_wgpuCommandEncoderFinish,"x":_wgpuCommandEncoderRelease,"Ia":_wgpuComputePassEncoderDispatchWorkgroups,"Va":_wgpuComputePassEncoderDispatchWorkgroupsIndirect,"ya":_wgpuComputePassEncoderEnd,"wa":_wgpuComputePassEncoderRelease,"Sa":_wgpuComputePassEncoderSetBindGroup,"Ra":_wgpuComputePassEncoderSetPipeline,"S":_wgpuComputePipelineRelease,"M":_wgpuDeviceCreateBindGroup,"L":_wgpuDeviceCreateBindGroupLayout,"v":_wgpuDeviceCreateBuffer,"y":_wgpuDeviceCreateCommandEncoder,"va":_wgpuDeviceCreateComputePipeline,"xa":_wgpuDeviceCreatePipelineLayout,"ua":_wgpuDeviceCreateRenderPipeline,"ta":_wgpuDeviceCreateSampler,"G":_wgpuDeviceCreateShaderModule,"qa":_wgpuDeviceCreateSwapChain,"E":_wgpuDeviceCreateTexture,"Y":_wgpuDeviceGetQueue,"Ca":_wgpuDeviceRelease,"Aa":_wgpuInstanceCreateSurface,"Ea":_wgpuInstanceRelease,"za":_wgpuInstanceRequestAdapter,"U":_wgpuPipelineLayoutRelease,"_":_wgpuQuerySetDestroy,"Z":_wgpuQuerySetRelease,"Ua":_wgpuQueueOnSubmittedWorkDone,"I":_wgpuQueueRelease,"z":_wgpuQueueSubmit,"ga":_wgpuQueueWriteBuffer,"X":_wgpuQueueWriteTexture,"La":_wgpuRenderPassEncoderDraw,"ea":_wgpuRenderPassEncoderDrawIndexed,"Xa":_wgpuRenderPassEncoderDrawIndirect,"la":_wgpuRenderPassEncoderEnd,"Za":_wgpuRenderPassEncoderRelease,"A":_wgpuRenderPassEncoderSetBindGroup,"Pa":_wgpuRenderPassEncoderSetBlendConstant,"Ya":_wgpuRenderPassEncoderSetIndexBuffer,"Qa":_wgpuRenderPassEncoderSetPipeline,"Na":_wgpuRenderPassEncoderSetScissorRect,"Ma":_wgpuRenderPassEncoderSetStencilReference,"fa":_wgpuRenderPassEncoderSetVertexBuffer,"Oa":_wgpuRenderPassEncoderSetViewport,"T":_wgpuRenderPipelineRelease,"sa":_wgpuSamplerRelease,"H":_wgpuShaderModuleRelease,"Fa":_wgpuSurfaceRelease,"F":_wgpuSwapChainGetCurrentTextureView,"ra":_wgpuSwapChainRelease,"w":_wgpuTextureCreateView,"aa":_wgpuTextureDestroy,"$":_wgpuTextureRelease,"t":_wgpuTextureViewRelease};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["$a"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["bb"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["cb"]).apply(null,arguments)};var ___getTypeName=Module["___getTypeName"]=function(){return(___getTypeName=Module["___getTypeName"]=Module["asm"]["db"]).apply(null,arguments)};var ___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=function(){return(___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=Module["asm"]["eb"]).apply(null,arguments)};var dynCall_jii=Module["dynCall_jii"]=function(){return(dynCall_jii=Module["dynCall_jii"]=Module["asm"]["fb"]).apply(null,arguments)};var dynCall_viij=Module["dynCall_viij"]=function(){return(dynCall_viij=Module["dynCall_viij"]=Module["asm"]["gb"]).apply(null,arguments)};var dynCall_jiji=Module["dynCall_jiji"]=function(){return(dynCall_jiji=Module["dynCall_jiji"]=Module["asm"]["hb"]).apply(null,arguments)};var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve(Module);if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}run(); +var Module=typeof wasmDevice!="undefined"?wasmDevice:{};var readyPromiseResolve,readyPromiseReject;Module["ready"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=true;var ENVIRONMENT_IS_WORKER=false;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=(url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=title=>document.title=title}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var POINTER_SIZE=4;var tempRet0=0;var setTempRet0=value=>{tempRet0=value};var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort(text)}}var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heapOrArray,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){{if(Module["onAbort"]){Module["onAbort"](what)}}what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}var wasmBinaryFile;wasmBinaryFile="webgpu_wasm.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch=="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["$a"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["bb"];addOnInit(Module["asm"]["ab"]);removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(function(instance){return instance}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch=="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiationResult,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiationResult)})})}else{return instantiateArrayBuffer(receiveInstantiationResult)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync().catch(readyPromiseReject);return{}}function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){callbacks.shift()(Module)}}function handleException(e){if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)}var structRegistrations={};function runDestructors(destructors){while(destructors.length){var ptr=destructors.pop();var del=destructors.pop();del(ptr)}}function simpleReadValueFromPointer(pointer){return this["fromWireType"](HEAP32[pointer>>2])}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}return name}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n")(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,function(message){this.name=errorName;this.message=message;var stack=new Error(message).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}});errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}};return errorClass}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach(function(type){typeDependencies[type]=dependentTypes});function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i{if(registeredTypes.hasOwnProperty(dt)){typeConverters[i]=registeredTypes[dt]}else{unregisteredTypes.push(dt);if(!awaitingDependencies.hasOwnProperty(dt)){awaitingDependencies[dt]=[]}awaitingDependencies[dt].push(()=>{typeConverters[i]=registeredTypes[dt];++registered;if(registered===unregisteredTypes.length){onComplete(typeConverters)}})}});if(0===unregisteredTypes.length){onComplete(typeConverters)}}function __embind_finalize_value_object(structType){var reg=structRegistrations[structType];delete structRegistrations[structType];var rawConstructor=reg.rawConstructor;var rawDestructor=reg.rawDestructor;var fieldRecords=reg.fields;var fieldTypes=fieldRecords.map(field=>field.getterReturnType).concat(fieldRecords.map(field=>field.setterArgumentType));whenDependentTypesAreResolved([structType],fieldTypes,fieldTypes=>{var fields={};fieldRecords.forEach((field,i)=>{var fieldName=field.fieldName;var getterReturnType=fieldTypes[i];var getter=field.getter;var getterContext=field.getterContext;var setterArgumentType=fieldTypes[i+fieldRecords.length];var setter=field.setter;var setterContext=field.setterContext;fields[fieldName]={read:ptr=>{return getterReturnType["fromWireType"](getter(getterContext,ptr))},write:(ptr,o)=>{var destructors=[];setter(setterContext,ptr,setterArgumentType["toWireType"](destructors,o));runDestructors(destructors)}}});return[{name:reg.name,"fromWireType":function(ptr){var rv={};for(var i in fields){rv[i]=fields[i].read(ptr)}rawDestructor(ptr);return rv},"toWireType":function(destructors,o){for(var fieldName in fields){if(!(fieldName in o)){throw new TypeError('Missing field: "'+fieldName+'"')}}var ptr=rawConstructor();for(fieldName in fields){fields[fieldName].write(ptr,o[fieldName])}if(destructors!==null){destructors.push(rawDestructor,ptr)}return ptr},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:rawDestructor}]})}function __embind_register_bigint(primitiveType,name,size,minRange,maxRange){}function getShiftFromSize(size){switch(size){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+size)}}function embind_init_charCodes(){var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i)}embind_charCodes=codes}var embind_charCodes=undefined;function readLatin1String(ptr){var ret="";var c=ptr;while(HEAPU8[c]){ret+=embind_charCodes[HEAPU8[c++]]}return ret}var BindingError=undefined;function throwBindingError(message){throw new BindingError(message)}function registerType(rawType,registeredInstance,options={}){if(!("argPackAdvance"in registeredInstance)){throw new TypeError("registerType registeredInstance requires argPackAdvance")}var name=registeredInstance.name;if(!rawType){throwBindingError('type "'+name+'" must have a positive integer typeid pointer')}if(registeredTypes.hasOwnProperty(rawType)){if(options.ignoreDuplicateRegistrations){return}else{throwBindingError("Cannot register type '"+name+"' twice")}}registeredTypes[rawType]=registeredInstance;delete typeDependencies[rawType];if(awaitingDependencies.hasOwnProperty(rawType)){var callbacks=awaitingDependencies[rawType];delete awaitingDependencies[rawType];callbacks.forEach(cb=>cb())}}function __embind_register_bool(rawType,name,size,trueValue,falseValue){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(wt){return!!wt},"toWireType":function(destructors,o){return o?trueValue:falseValue},"argPackAdvance":8,"readValueFromPointer":function(pointer){var heap;if(size===1){heap=HEAP8}else if(size===2){heap=HEAP16}else if(size===4){heap=HEAP32}else{throw new TypeError("Unknown boolean type size: "+name)}return this["fromWireType"](heap[pointer>>shift])},destructorFunction:null})}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType}}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")}var finalizationRegistry=false;function detachFinalizer(handle){}function runDestructor($$){if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}}function releaseClassHandle($$){$$.count.value-=1;var toDelete=0===$$.count.value;if(toDelete){runDestructor($$)}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)}var registeredPointers={};function getInheritedInstanceCount(){return Object.keys(registeredInstances).length}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k])}}return rv}var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}}var delayFunction=undefined;function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes)}}function init_embind(){Module["getInheritedInstanceCount"]=getInheritedInstanceCount;Module["getLiveInheritedInstances"]=getLiveInheritedInstances;Module["flushPendingDeletes"]=flushPendingDeletes;Module["setDelayFunction"]=setDelayFunction}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return attachFinalizer(Object.create(prototype,{$$:{value:record}}))}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}function attachFinalizer(handle){if("undefined"===typeof FinalizationRegistry){attachFinalizer=handle=>handle;return handle}finalizationRegistry=new FinalizationRegistry(info=>{releaseClassHandle(info.$$)});attachFinalizer=handle=>{var $$=handle.$$;var hasSmartPtr=!!$$.smartPtr;if(hasSmartPtr){var info={$$:$$};finalizationRegistry.register(handle,info,handle)}return handle};detachFinalizer=handle=>finalizationRegistry.unregister(handle);return attachFinalizer(handle)}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=attachFinalizer(Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}}));clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}detachFinalizer(this);releaseClassHandle(this.$$);if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}}function ClassHandle_isDeleted(){return!this.$$.ptr}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}function init_ClassHandle(){ClassHandle.prototype["isAliasOf"]=ClassHandle_isAliasOf;ClassHandle.prototype["clone"]=ClassHandle_clone;ClassHandle.prototype["delete"]=ClassHandle_delete;ClassHandle.prototype["isDeleted"]=ClassHandle_isDeleted;ClassHandle.prototype["deleteLater"]=ClassHandle_deleteLater}function ClassHandle(){}function ensureOverloadTable(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError("Function '"+humanName+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+proto[methodName].overloadTable+")!")}return proto[methodName].overloadTable[arguments.length].apply(this,arguments)};proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError("Cannot register public name '"+name+"' twice")}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError("Cannot register multiple overloads of a function with the same number of arguments ("+numArguments+")!")}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError("Expected null or instance of "+desiredClass.name+", got an instance of "+ptrClass.name)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+embindRepr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle.$$){throwBindingError('Cannot pass "'+embindRepr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,Emval.toHandle(function(){clonedHandle["delete"]()}));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+embindRepr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+handle.$$.ptrType.name+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr)}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle["delete"]()}}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee;RegisteredPointer.prototype.destructor=RegisteredPointer_destructor;RegisteredPointer.prototype["argPackAdvance"]=8;RegisteredPointer.prototype["readValueFromPointer"]=simpleReadValueFromPointer;RegisteredPointer.prototype["deleteObject"]=RegisteredPointer_deleteObject;RegisteredPointer.prototype["fromWireType"]=RegisteredPointer_fromWireType}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&®isteredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function dynCallLegacy(sig,ptr,args){var f=Module["dynCall_"+sig];return args&&args.length?f.apply(null,[ptr].concat(args)):f.call(null,ptr)}var wasmTableMirror=[];function getWasmTableEntry(funcPtr){var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func}function dynCall(sig,ptr,args){if(sig.includes("j")){return dynCallLegacy(sig,ptr,args)}var rtn=getWasmTableEntry(ptr).apply(null,args);return rtn}function getDynCaller(sig,ptr){var argCache=[];return function(){argCache.length=0;Object.assign(argCache,arguments);return dynCall(sig,ptr,argCache)}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(){if(signature.includes("j")){return getDynCaller(signature,rawFunction)}return getWasmTableEntry(rawFunction)}var fp=makeDynCaller();if(typeof fp!="function"){throwBindingError("unknown function pointer with signature "+signature+": "+rawFunction)}return fp}var UnboundTypeError=undefined;function getTypeName(type){var ptr=___getTypeName(type);var rv=readLatin1String(ptr);_free(ptr);return rv}function throwUnboundTypeError(message,types){var unboundTypes=[];var seen={};function visit(type){if(seen[type]){return}if(registeredTypes[type]){return}if(typeDependencies[type]){typeDependencies[type].forEach(visit);return}unboundTypes.push(type);seen[type]=true}types.forEach(visit);throw new UnboundTypeError(message+": "+unboundTypes.map(getTypeName).join([", "]))}function __embind_register_class(rawType,rawPointerType,rawConstPointerType,baseClassRawType,getActualTypeSignature,getActualType,upcastSignature,upcast,downcastSignature,downcast,name,destructorSignature,rawDestructor){name=readLatin1String(name);getActualType=embind__requireFunction(getActualTypeSignature,getActualType);if(upcast){upcast=embind__requireFunction(upcastSignature,upcast)}if(downcast){downcast=embind__requireFunction(downcastSignature,downcast)}rawDestructor=embind__requireFunction(destructorSignature,rawDestructor);var legalFunctionName=makeLegalFunctionName(name);exposePublicSymbol(legalFunctionName,function(){throwUnboundTypeError("Cannot construct "+name+" due to unbound types",[baseClassRawType])});whenDependentTypesAreResolved([rawType,rawPointerType,rawConstPointerType],baseClassRawType?[baseClassRawType]:[],function(base){base=base[0];var baseClass;var basePrototype;if(baseClassRawType){baseClass=base.registeredClass;basePrototype=baseClass.instancePrototype}else{basePrototype=ClassHandle.prototype}var constructor=createNamedFunction(legalFunctionName,function(){if(Object.getPrototypeOf(this)!==instancePrototype){throw new BindingError("Use 'new' to construct "+name)}if(undefined===registeredClass.constructor_body){throw new BindingError(name+" has no accessible constructor")}var body=registeredClass.constructor_body[arguments.length];if(undefined===body){throw new BindingError("Tried to invoke ctor of "+name+" with invalid number of parameters ("+arguments.length+") - expected ("+Object.keys(registeredClass.constructor_body).toString()+") parameters instead!")}return body.apply(this,arguments)});var instancePrototype=Object.create(basePrototype,{constructor:{value:constructor}});constructor.prototype=instancePrototype;var registeredClass=new RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast);var referenceConverter=new RegisteredPointer(name,registeredClass,true,false,false);var pointerConverter=new RegisteredPointer(name+"*",registeredClass,false,false,false);var constPointerConverter=new RegisteredPointer(name+" const*",registeredClass,false,true,false);registeredPointers[rawType]={pointerType:pointerConverter,constPointerType:constPointerConverter};replacePublicSymbol(legalFunctionName,constructor);return[referenceConverter,pointerConverter,constPointerConverter]})}function new_(constructor,argumentList){if(!(constructor instanceof Function)){throw new TypeError("new_ called with constructor type "+typeof constructor+" which is not a function")}var dummy=createNamedFunction(constructor.name||"unknownFunctionName",function(){});dummy.prototype=constructor.prototype;var obj=new dummy;var r=constructor.apply(obj,argumentList);return r instanceof Object?r:obj}function craftInvokerFunction(humanName,argTypes,classType,cppInvokerFunc,cppTargetFunc){var argCount=argTypes.length;if(argCount<2){throwBindingError("argTypes array size mismatch! Must at least get return value and 'this' types!")}var isClassMethodFunc=argTypes[1]!==null&&classType!==null;var needsDestructorStack=false;for(var i=1;i0?", ":"")+argsListWired}invokerFnBody+=(returns?"var rv = ":"")+"invoker(fn"+(argsListWired.length>0?", ":"")+argsListWired+");\n";if(needsDestructorStack){invokerFnBody+="runDestructors(destructors);\n"}else{for(var i=isClassMethodFunc?1:2;i>2])}return array}function __embind_register_class_class_function(rawClassType,methodName,argCount,rawArgTypesAddr,invokerSignature,rawInvoker,fn){var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);methodName=readLatin1String(methodName);rawInvoker=embind__requireFunction(invokerSignature,rawInvoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName=classType.name+"."+methodName;function unboundTypesHandler(){throwUnboundTypeError("Cannot call "+humanName+" due to unbound types",rawArgTypes)}if(methodName.startsWith("@@")){methodName=Symbol[methodName.substring(2)]}var proto=classType.registeredClass.constructor;if(undefined===proto[methodName]){unboundTypesHandler.argCount=argCount-1;proto[methodName]=unboundTypesHandler}else{ensureOverloadTable(proto,methodName,humanName);proto[methodName].overloadTable[argCount-1]=unboundTypesHandler}whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));var func=craftInvokerFunction(humanName,invokerArgsArray,null,rawInvoker,fn);if(undefined===proto[methodName].overloadTable){func.argCount=argCount-1;proto[methodName]=func}else{proto[methodName].overloadTable[argCount-1]=func}return[]});return[]})}function __embind_register_class_constructor(rawClassType,argCount,rawArgTypesAddr,invokerSignature,invoker,rawConstructor){assert(argCount>0);var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);invoker=embind__requireFunction(invokerSignature,invoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName="constructor "+classType.name;if(undefined===classType.registeredClass.constructor_body){classType.registeredClass.constructor_body=[]}if(undefined!==classType.registeredClass.constructor_body[argCount-1]){throw new BindingError("Cannot register multiple constructors with identical number of parameters ("+(argCount-1)+") for class '"+classType.name+"'! Overload resolution is currently only performed using the parameter count, not actual type info!")}classType.registeredClass.constructor_body[argCount-1]=()=>{throwUnboundTypeError("Cannot construct "+classType.name+" due to unbound types",rawArgTypes)};whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){argTypes.splice(1,0,null);classType.registeredClass.constructor_body[argCount-1]=craftInvokerFunction(humanName,argTypes,null,invoker,rawConstructor);return[]});return[]})}function __embind_register_class_function(rawClassType,methodName,argCount,rawArgTypesAddr,invokerSignature,rawInvoker,context,isPureVirtual){var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);methodName=readLatin1String(methodName);rawInvoker=embind__requireFunction(invokerSignature,rawInvoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName=classType.name+"."+methodName;if(methodName.startsWith("@@")){methodName=Symbol[methodName.substring(2)]}if(isPureVirtual){classType.registeredClass.pureVirtualFunctions.push(methodName)}function unboundTypesHandler(){throwUnboundTypeError("Cannot call "+humanName+" due to unbound types",rawArgTypes)}var proto=classType.registeredClass.instancePrototype;var method=proto[methodName];if(undefined===method||undefined===method.overloadTable&&method.className!==classType.name&&method.argCount===argCount-2){unboundTypesHandler.argCount=argCount-2;unboundTypesHandler.className=classType.name;proto[methodName]=unboundTypesHandler}else{ensureOverloadTable(proto,methodName,humanName);proto[methodName].overloadTable[argCount-2]=unboundTypesHandler}whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){var memberFunction=craftInvokerFunction(humanName,argTypes,classType,rawInvoker,context);if(undefined===proto[methodName].overloadTable){memberFunction.argCount=argCount-2;proto[methodName]=memberFunction}else{proto[methodName].overloadTable[argCount-2]=memberFunction}return[]});return[]})}function validateThis(this_,classType,humanName){if(!(this_ instanceof Object)){throwBindingError(humanName+' with invalid "this": '+this_)}if(!(this_ instanceof classType.registeredClass.constructor)){throwBindingError(humanName+' incompatible with "this" of type '+this_.constructor.name)}if(!this_.$$.ptr){throwBindingError("cannot call emscripten binding method "+humanName+" on deleted object")}return upcastPointer(this_.$$.ptr,this_.$$.ptrType.registeredClass,classType.registeredClass)}function __embind_register_class_property(classType,fieldName,getterReturnType,getterSignature,getter,getterContext,setterArgumentType,setterSignature,setter,setterContext){fieldName=readLatin1String(fieldName);getter=embind__requireFunction(getterSignature,getter);whenDependentTypesAreResolved([],[classType],function(classType){classType=classType[0];var humanName=classType.name+"."+fieldName;var desc={get:function(){throwUnboundTypeError("Cannot access "+humanName+" due to unbound types",[getterReturnType,setterArgumentType])},enumerable:true,configurable:true};if(setter){desc.set=()=>{throwUnboundTypeError("Cannot access "+humanName+" due to unbound types",[getterReturnType,setterArgumentType])}}else{desc.set=v=>{throwBindingError(humanName+" is a read-only property")}}Object.defineProperty(classType.registeredClass.instancePrototype,fieldName,desc);whenDependentTypesAreResolved([],setter?[getterReturnType,setterArgumentType]:[getterReturnType],function(types){var getterReturnType=types[0];var desc={get:function(){var ptr=validateThis(this,classType,humanName+" getter");return getterReturnType["fromWireType"](getter(getterContext,ptr))},enumerable:true};if(setter){setter=embind__requireFunction(setterSignature,setter);var setterArgumentType=types[1];desc.set=function(v){var ptr=validateThis(this,classType,humanName+" setter");var destructors=[];setter(setterContext,ptr,setterArgumentType["toWireType"](destructors,v));runDestructors(destructors)}}Object.defineProperty(classType.registeredClass.instancePrototype,fieldName,desc);return[]});return[]})}var emval_free_list=[];var emval_handle_array=[{},{value:undefined},{value:null},{value:true},{value:false}];function __emval_decref(handle){if(handle>4&&0===--emval_handle_array[handle].refcount){emval_handle_array[handle]=undefined;emval_free_list.push(handle)}}function count_emval_handles(){var count=0;for(var i=5;i{if(!handle){throwBindingError("Cannot use deleted val. handle = "+handle)}return emval_handle_array[handle].value},toHandle:value=>{switch(value){case undefined:return 1;case null:return 2;case true:return 3;case false:return 4;default:{var handle=emval_free_list.length?emval_free_list.pop():emval_handle_array.length;emval_handle_array[handle]={refcount:1,value:value};return handle}}}};function __embind_register_emval(rawType,name){name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(handle){var rv=Emval.toValue(handle);__emval_decref(handle);return rv},"toWireType":function(destructors,value){return Emval.toHandle(value)},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:null})}function embindRepr(v){if(v===null){return"null"}var t=typeof v;if(t==="object"||t==="array"||t==="function"){return v.toString()}else{return""+v}}function floatReadValueFromPointer(name,shift){switch(shift){case 2:return function(pointer){return this["fromWireType"](HEAPF32[pointer>>2])};case 3:return function(pointer){return this["fromWireType"](HEAPF64[pointer>>3])};default:throw new TypeError("Unknown float type: "+name)}}function __embind_register_float(rawType,name,size){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(value){return value},"toWireType":function(destructors,value){return value},"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer]}:function readU8FromPointer(pointer){return HEAPU8[pointer]};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=value=>value;if(minRange===0){var bitshift=32-8*size;fromWireType=value=>value<>>bitshift}var isUnsignedType=name.includes("unsigned");var checkAssertions=(value,toTypeName)=>{};var toWireType;if(isUnsignedType){toWireType=function(destructors,value){checkAssertions(value,this.name);return value>>>0}}else{toWireType=function(destructors,value){checkAssertions(value,this.name);return value}}registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":toWireType,"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(buffer,data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);var stdStringIsUTF8=name==="std::string";registerType(rawType,{name:name,"fromWireType":function(value){var length=HEAPU32[value>>2];var payload=value+4;var str;if(stdStringIsUTF8){var decodeStartPtr=payload;for(var i=0;i<=length;++i){var currentBytePtr=payload+i;if(i==length||HEAPU8[currentBytePtr]==0){var maxRead=currentBytePtr-decodeStartPtr;var stringSegment=UTF8ToString(decodeStartPtr,maxRead);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+1}}}else{var a=new Array(length);for(var i=0;i>2]=length;if(stdStringIsUTF8&&valueIsOfTypeString){stringToUTF8(value,ptr,length+1)}else{if(valueIsOfTypeString){for(var i=0;i255){_free(ptr);throwBindingError("String has UTF-16 code units that do not fit in 8 bits")}HEAPU8[ptr+i]=charCode}}else{for(var i=0;i>1;var maxIdx=idx+maxBytesToRead/2;while(!(idx>=maxIdx)&&HEAPU16[idx])++idx;endPtr=idx<<1;if(endPtr-ptr>32&&UTF16Decoder){return UTF16Decoder.decode(HEAPU8.subarray(ptr,endPtr))}else{var str="";for(var i=0;!(i>=maxBytesToRead/2);++i){var codeUnit=HEAP16[ptr+i*2>>1];if(codeUnit==0)break;str+=String.fromCharCode(codeUnit)}return str}}function stringToUTF16(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr}function lengthBytesUTF16(str){return str.length*2}function UTF32ToString(ptr,maxBytesToRead){var i=0;var str="";while(!(i>=maxBytesToRead/4)){var utf32=HEAP32[ptr+i*4>>2];if(utf32==0)break;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}return str}function stringToUTF32(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr}function lengthBytesUTF32(str){var len=0;for(var i=0;i=55296&&codeUnit<=57343)++i;len+=4}return len}function __embind_register_std_wstring(rawType,charSize,name){name=readLatin1String(name);var decodeString,encodeString,getHeap,lengthBytesUTF,shift;if(charSize===2){decodeString=UTF16ToString;encodeString=stringToUTF16;lengthBytesUTF=lengthBytesUTF16;getHeap=()=>HEAPU16;shift=1}else if(charSize===4){decodeString=UTF32ToString;encodeString=stringToUTF32;lengthBytesUTF=lengthBytesUTF32;getHeap=()=>HEAPU32;shift=2}registerType(rawType,{name:name,"fromWireType":function(value){var length=HEAPU32[value>>2];var HEAP=getHeap();var str;var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i*charSize;if(i==length||HEAP[currentBytePtr>>shift]==0){var maxReadBytes=currentBytePtr-decodeStartPtr;var stringSegment=decodeString(decodeStartPtr,maxReadBytes);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+charSize}}_free(value);return str},"toWireType":function(destructors,value){if(!(typeof value=="string")){throwBindingError("Cannot pass non-string to C++ string type "+name)}var length=lengthBytesUTF(value);var ptr=_malloc(4+length+charSize);HEAPU32[ptr>>2]=length>>shift;encodeString(value,ptr+4,length+charSize);if(destructors!==null){destructors.push(_free,ptr)}return ptr},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:function(ptr){_free(ptr)}})}function __embind_register_value_object(rawType,name,constructorSignature,rawConstructor,destructorSignature,rawDestructor){structRegistrations[rawType]={name:readLatin1String(name),rawConstructor:embind__requireFunction(constructorSignature,rawConstructor),rawDestructor:embind__requireFunction(destructorSignature,rawDestructor),fields:[]}}function __embind_register_value_object_field(structType,fieldName,getterReturnType,getterSignature,getter,getterContext,setterArgumentType,setterSignature,setter,setterContext){structRegistrations[structType].fields.push({fieldName:readLatin1String(fieldName),getterReturnType:getterReturnType,getter:embind__requireFunction(getterSignature,getter),getterContext:getterContext,setterArgumentType:setterArgumentType,setter:embind__requireFunction(setterSignature,setter),setterContext:setterContext})}function __embind_register_void(rawType,name){name=readLatin1String(name);registerType(rawType,{isVoid:true,name:name,"argPackAdvance":0,"fromWireType":function(){return undefined},"toWireType":function(destructors,o){return undefined}})}function requireRegisteredType(rawType,humanName){var impl=registeredTypes[rawType];if(undefined===impl){throwBindingError(humanName+" has unknown type "+getTypeName(rawType))}return impl}function __emval_as(handle,returnType,destructorsRef){handle=Emval.toValue(handle);returnType=requireRegisteredType(returnType,"emval::as");var destructors=[];var rd=Emval.toHandle(destructors);HEAPU32[destructorsRef>>2]=rd;return returnType["toWireType"](destructors,handle)}var emval_symbols={};function getStringOrSymbol(address){var symbol=emval_symbols[address];if(symbol===undefined){return readLatin1String(address)}return symbol}var emval_methodCallers=[];function __emval_call_void_method(caller,handle,methodName,args){caller=emval_methodCallers[caller];handle=Emval.toValue(handle);methodName=getStringOrSymbol(methodName);caller(handle,methodName,null,args)}function emval_addMethodCaller(caller){var id=emval_methodCallers.length;emval_methodCallers.push(caller);return id}function emval_lookupTypes(argCount,argTypes){var a=new Array(argCount);for(var i=0;i>2],"parameter "+i)}return a}var emval_registeredMethods=[];function __emval_get_method_caller(argCount,argTypes){var types=emval_lookupTypes(argCount,argTypes);var retType=types[0];var signatureName=retType.name+"_$"+types.slice(1).map(function(t){return t.name}).join("_")+"$";var returnId=emval_registeredMethods[signatureName];if(returnId!==undefined){return returnId}var params=["retType"];var args=[retType];var argsList="";for(var i=0;i4){emval_handle_array[handle].refcount+=1}}function __emval_new_array(){return Emval.toHandle([])}function __emval_new_cstring(v){return Emval.toHandle(getStringOrSymbol(v))}function __emval_run_destructors(handle){var destructors=Emval.toValue(handle);runDestructors(destructors);__emval_decref(handle)}function __emval_set_property(handle,key,value){handle=Emval.toValue(handle);key=Emval.toValue(key);value=Emval.toValue(value);handle[key]=value}function __emval_take_value(type,arg){type=requireRegisteredType(type,"_emval_take_value");var v=type["readValueFromPointer"](arg);return Emval.toHandle(v)}function _abort(){abort("")}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function getHeapMax(){return 2147483648}function emscripten_realloc_buffer(size){try{wasmMemory.grow(size-buffer.byteLength+65535>>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}let alignUp=(x,multiple)=>x+(multiple-x%multiple)%multiple;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}var WebGPU={initManagers:function(){if(WebGPU.mgrDevice)return;function Manager(){this.objects={};this.nextId=1;this.create=function(object,wrapper){wrapper=wrapper||{};var id=this.nextId++;wrapper.refcount=1;wrapper.object=object;this.objects[id]=wrapper;return id};this.get=function(id){if(!id)return undefined;var o=this.objects[id];return o.object};this.reference=function(id){var o=this.objects[id];o.refcount++};this.release=function(id){var o=this.objects[id];o.refcount--;if(o.refcount<=0){delete this.objects[id]}}}WebGPU.mgrSurface=WebGPU.mgrSurface||new Manager;WebGPU.mgrSwapChain=WebGPU.mgrSwapChain||new Manager;WebGPU.mgrAdapter=WebGPU.mgrAdapter||new Manager;WebGPU.mgrDevice=WebGPU.mgrDevice||new Manager;WebGPU.mgrQueue=WebGPU.mgrQueue||new Manager;WebGPU.mgrCommandBuffer=WebGPU.mgrCommandBuffer||new Manager;WebGPU.mgrCommandEncoder=WebGPU.mgrCommandEncoder||new Manager;WebGPU.mgrRenderPassEncoder=WebGPU.mgrRenderPassEncoder||new Manager;WebGPU.mgrComputePassEncoder=WebGPU.mgrComputePassEncoder||new Manager;WebGPU.mgrBindGroup=WebGPU.mgrBindGroup||new Manager;WebGPU.mgrBuffer=WebGPU.mgrBuffer||new Manager;WebGPU.mgrSampler=WebGPU.mgrSampler||new Manager;WebGPU.mgrTexture=WebGPU.mgrTexture||new Manager;WebGPU.mgrTextureView=WebGPU.mgrTextureView||new Manager;WebGPU.mgrQuerySet=WebGPU.mgrQuerySet||new Manager;WebGPU.mgrBindGroupLayout=WebGPU.mgrBindGroupLayout||new Manager;WebGPU.mgrPipelineLayout=WebGPU.mgrPipelineLayout||new Manager;WebGPU.mgrRenderPipeline=WebGPU.mgrRenderPipeline||new Manager;WebGPU.mgrComputePipeline=WebGPU.mgrComputePipeline||new Manager;WebGPU.mgrShaderModule=WebGPU.mgrShaderModule||new Manager;WebGPU.mgrRenderBundleEncoder=WebGPU.mgrRenderBundleEncoder||new Manager;WebGPU.mgrRenderBundle=WebGPU.mgrRenderBundle||new Manager},makeColor:function(ptr){return{"r":HEAPF64[ptr>>3],"g":HEAPF64[ptr+8>>3],"b":HEAPF64[ptr+16>>3],"a":HEAPF64[ptr+24>>3]}},makeExtent3D:function(ptr){return{"width":HEAPU32[ptr>>2],"height":HEAPU32[ptr+4>>2],"depthOrArrayLayers":HEAPU32[ptr+8>>2]}},makeOrigin3D:function(ptr){return{"x":HEAPU32[ptr>>2],"y":HEAPU32[ptr+4>>2],"z":HEAPU32[ptr+8>>2]}},makeImageCopyTexture:function(ptr){return{"texture":WebGPU.mgrTexture.get(HEAPU32[ptr+4>>2]),"mipLevel":HEAPU32[ptr+8>>2],"origin":WebGPU.makeOrigin3D(ptr+12),"aspect":WebGPU.TextureAspect[HEAPU32[ptr+24>>2]]}},makeTextureDataLayout:function(ptr){var bytesPerRow=HEAPU32[ptr+16>>2];var rowsPerImage=HEAPU32[ptr+20>>2];return{"offset":HEAPU32[ptr+4+8>>2]*4294967296+HEAPU32[ptr+8>>2],"bytesPerRow":bytesPerRow===4294967295?undefined:bytesPerRow,"rowsPerImage":rowsPerImage===4294967295?undefined:rowsPerImage}},makeImageCopyBuffer:function(ptr){var layoutPtr=ptr+8;var bufferCopyView=WebGPU.makeTextureDataLayout(layoutPtr);bufferCopyView["buffer"]=WebGPU.mgrBuffer.get(HEAPU32[ptr+32>>2]);return bufferCopyView},makePipelineConstants:function(constantCount,constantsPtr){if(!constantCount)return;var constants={};for(var i=0;i>2]);constants[key]=HEAPF64[entryPtr+8>>3]}return constants},makeProgrammableStageDescriptor:function(ptr){if(!ptr)return undefined;return{"module":WebGPU.mgrShaderModule.get(HEAPU32[ptr+4>>2]),"entryPoint":UTF8ToString(HEAPU32[ptr+8>>2]),"constants":WebGPU.makePipelineConstants(HEAPU32[ptr+12>>2],HEAPU32[ptr+16>>2])}},DeviceLostReason:{undefined:0,destroyed:1},PreferredFormat:{rgba8unorm:18,bgra8unorm:23},AddressMode:["repeat","mirror-repeat","clamp-to-edge"],BlendFactor:["zero","one","src","one-minus-src","src-alpha","one-minus-src-alpha","dst","one-minus-dst","dst-alpha","one-minus-dst-alpha","src-alpha-saturated","constant","one-minus-constant"],BlendOperation:["add","subtract","reverse-subtract","min","max"],BufferBindingType:[,"uniform","storage","read-only-storage"],CompareFunction:[,"never","less","less-equal","greater","greater-equal","equal","not-equal","always"],CompilationInfoRequestStatus:["success","error","device-lost","unknown"],ComputePassTimestampLocation:["beginning","end"],CullMode:["none","front","back"],ErrorFilter:["validation","out-of-memory"],FeatureName:{0:undefined,1:"depth-clip-control",2:"depth24unorm-stencil8",3:"depth32float-stencil8",4:"timestamp-query",5:"pipeline-statistics-query",6:"texture-compression-bc",7:"texture-compression-etc2",8:"texture-compression-astc",9:"indirect-first-instance",1e3:"depth-clamping"},FilterMode:["nearest","linear"],FrontFace:["ccw","cw"],IndexFormat:[,"uint16","uint32"],LoadOp:[,"clear","load"],PipelineStatisticName:["vertex-shader-invocations","clipper-invocations","clipper-primitives-out","fragment-shader-invocations","compute-shader-invocations"],PowerPreference:[,"low-power","high-performance"],PredefinedColorSpace:[,"srgb"],PrimitiveTopology:["point-list","line-list","line-strip","triangle-list","triangle-strip"],QueryType:["occlusion","pipeline-statistics","timestamp"],RenderPassTimestampLocation:["beginning","end"],SamplerBindingType:[,"filtering","non-filtering","comparison"],StencilOperation:["keep","zero","replace","invert","increment-clamp","decrement-clamp","increment-wrap","decrement-wrap"],StorageTextureAccess:[,"write-only"],StoreOp:[,"store","discard"],TextureAspect:["all","stencil-only","depth-only"],TextureComponentType:["float","sint","uint","depth-comparison"],TextureDimension:["1d","2d","3d"],TextureFormat:[,"r8unorm","r8snorm","r8uint","r8sint","r16uint","r16sint","r16float","rg8unorm","rg8snorm","rg8uint","rg8sint","r32float","r32uint","r32sint","rg16uint","rg16sint","rg16float","rgba8unorm","rgba8unorm-srgb","rgba8snorm","rgba8uint","rgba8sint","bgra8unorm","bgra8unorm-srgb","rgb10a2unorm","rg11b10ufloat","rgb9e5ufloat","rg32float","rg32uint","rg32sint","rgba16uint","rgba16sint","rgba16float","rgba32float","rgba32uint","rgba32sint","stencil8","depth16unorm","depth24plus","depth24plus-stencil8","depth24unorm-stencil8","depth32float","depth32float-stencil8","bc1-rgba-unorm","bc1-rgba-unorm-srgb","bc2-rgba-unorm","bc2-rgba-unorm-srgb","bc3-rgba-unorm","bc3-rgba-unorm-srgb","bc4-r-unorm","bc4-r-snorm","bc5-rg-unorm","bc5-rg-snorm","bc6h-rgb-ufloat","bc6h-rgb-float","bc7-rgba-unorm","bc7-rgba-unorm-srgb","etc2-rgb8unorm","etc2-rgb8unorm-srgb","etc2-rgb8a1unorm","etc2-rgb8a1unorm-srgb","etc2-rgba8unorm","etc2-rgba8unorm-srgb","eac-r11unorm","eac-r11snorm","eac-rg11unorm","eac-rg11snorm","astc-4x4-unorm","astc-4x4-unorm-srgb","astc-5x4-unorm","astc-5x4-unorm-srgb","astc-5x5-unorm","astc-5x5-unorm-srgb","astc-6x5-unorm","astc-6x5-unorm-srgb","astc-6x6-unorm","astc-6x6-unorm-srgb","astc-8x5-unorm","astc-8x5-unorm-srgb","astc-8x6-unorm","astc-8x6-unorm-srgb","astc-8x8-unorm","astc-8x8-unorm-srgb","astc-10x5-unorm","astc-10x5-unorm-srgb","astc-10x6-unorm","astc-10x6-unorm-srgb","astc-10x8-unorm","astc-10x8-unorm-srgb","astc-10x10-unorm","astc-10x10-unorm-srgb","astc-12x10-unorm","astc-12x10-unorm-srgb","astc-12x12-unorm","astc-12x12-unorm-srgb"],TextureSampleType:[,"float","unfilterable-float","depth","sint","uint"],TextureViewDimension:[,"1d","2d","2d-array","cube","cube-array","3d"],VertexFormat:[,"uint8x2","uint8x4","sint8x2","sint8x4","unorm8x2","unorm8x4","snorm8x2","snorm8x4","uint16x2","uint16x4","sint16x2","sint16x4","unorm16x2","unorm16x4","snorm16x2","snorm16x4","float16x2","float16x4","float32","float32x2","float32x3","float32x4","uint32","uint32x2","uint32x3","uint32x4","sint32","sint32x2","sint32x3","sint32x4"],VertexStepMode:["vertex","instance"],FeatureNameString2Enum:{undefined:"0","depth-clip-control":"1","depth24unorm-stencil8":"2","depth32float-stencil8":"3","timestamp-query":"4","pipeline-statistics-query":"5","texture-compression-bc":"6","texture-compression-etc2":"7","texture-compression-astc":"8","indirect-first-instance":"9","depth-clamping":"1000"}};function _emscripten_webgpu_get_device(){var device=Module["preinitializedWebGPUDevice"];var deviceWrapper={queueId:WebGPU.mgrQueue.create(device["queue"])};return WebGPU.mgrDevice.create(device,deviceWrapper)}var ENV={};function getExecutableName(){return thisProgram||"./this.program"}function getEnvStrings(){if(!getEnvStrings.strings){var lang=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={"USER":"web_user","LOGNAME":"web_user","PATH":"/","PWD":"/","HOME":"/home/web_user","LANG":lang,"_":getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(x+"="+env[x])}getEnvStrings.strings=strings}return getEnvStrings.strings}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}var SYSCALLS={varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret}};function _environ_get(__environ,environ_buf){var bufSize=0;getEnvStrings().forEach(function(string,i){var ptr=environ_buf+bufSize;HEAPU32[__environ+i*4>>2]=ptr;writeAsciiToMemory(string,ptr);bufSize+=string.length+1});return 0}function _environ_sizes_get(penviron_count,penviron_buf_size){var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});HEAPU32[penviron_buf_size>>2]=bufSize;return 0}var printCharBuffers=[null,[],[]];function printChar(stream,curr){var buffer=printCharBuffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}}function _fd_write(fd,iov,iovcnt,pnum){var num=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;for(var j=0;j>2]=num;return 0}function _setTempRet0(val){setTempRet0(val)}function _wgpuAdapterGetProperties(adapterId,properties){HEAP32[properties+4>>2]=0;HEAP32[properties+8>>2]=0;HEAP32[properties+12>>2]=0;HEAP32[properties+16>>2]=0;HEAP32[properties+20>>2]=3;HEAP32[properties+24>>2]=1}function _wgpuAdapterHasFeature(adapterId,featureEnumValue){var adapter=WebGPU.mgrAdapter.get(adapterId);return adapter.features.has(WebGPU.FeatureName[featureEnumValue])}function _wgpuAdapterRelease(id){WebGPU.mgrAdapter.release(id)}function _wgpuBindGroupRelease(id){WebGPU.mgrBindGroup.release(id)}function _wgpuBufferDestroy(bufferId){WebGPU.mgrBuffer.get(bufferId)["destroy"]()}function _wgpuBufferGetMappedRange(bufferId,offset,size){var bufferWrapper=WebGPU.mgrBuffer.objects[bufferId];if(size===0)warnOnce("getMappedRange size=0 no longer means WGPU_WHOLE_MAP_SIZE");size=size>>>0;if(size===4294967295)size=undefined;if(bufferWrapper.mapMode!==2){return 0}var mapped;try{mapped=bufferWrapper.object["getMappedRange"](offset,size)}catch(ex){return 0}var data=_malloc(mapped.byteLength);HEAPU8.fill(0,data,mapped.byteLength);bufferWrapper.onUnmap.push(function(){new Uint8Array(mapped).set(HEAPU8.subarray(data,data+mapped.byteLength));_free(data)});return data}function _wgpuBufferRelease(id){WebGPU.mgrBuffer.release(id)}function _wgpuBufferUnmap(bufferId){var bufferWrapper=WebGPU.mgrBuffer.objects[bufferId];if(!bufferWrapper.onUnmap){return}for(var i=0;i>2]),"queryIndex":HEAPU32[twPtr+4>>2],"location":WebGPU.ComputePassTimestampLocation[HEAPU32[twPtr+8>>2]]}}function makeComputePassTimestampWrites(count,twPtr){var timestampWrites=[];for(var i=0;i>2];if(labelPtr)desc["label"]=UTF8ToString(labelPtr);var timestampWriteCount=HEAPU32[descriptor+8>>2];if(timestampWriteCount){desc["timestampWrites"]=makeComputePassTimestampWrites(timestampWriteCount,HEAPU32[descriptor+12>>2])}}var commandEncoder=WebGPU.mgrCommandEncoder.get(encoderId);return WebGPU.mgrComputePassEncoder.create(commandEncoder["beginComputePass"](desc))}function _wgpuCommandEncoderBeginRenderPass(encoderId,descriptor){function makeColorAttachment(caPtr){var viewPtr=HEAPU32[caPtr>>2];if(viewPtr===0){return undefined}var loadOpInt=HEAPU32[caPtr+8>>2];var storeOpInt=HEAPU32[caPtr+12>>2];var clearValue=WebGPU.makeColor(caPtr+16);return{"view":WebGPU.mgrTextureView.get(viewPtr),"resolveTarget":WebGPU.mgrTextureView.get(HEAPU32[caPtr+4>>2]),"clearValue":clearValue,"loadOp":WebGPU.LoadOp[loadOpInt],"storeOp":WebGPU.StoreOp[storeOpInt]}}function makeColorAttachments(count,caPtr){var attachments=[];for(var i=0;i>2]),"depthClearValue":HEAPF32[dsaPtr+12>>2],"depthLoadOp":WebGPU.LoadOp[HEAPU32[dsaPtr+4>>2]],"depthStoreOp":WebGPU.StoreOp[HEAPU32[dsaPtr+8>>2]],"depthReadOnly":HEAP8[dsaPtr+16>>0]!==0,"stencilClearValue":HEAPU32[dsaPtr+28>>2],"stencilLoadOp":WebGPU.LoadOp[HEAPU32[dsaPtr+20>>2]],"stencilStoreOp":WebGPU.StoreOp[HEAPU32[dsaPtr+24>>2]],"stencilReadOnly":HEAP8[dsaPtr+32>>0]!==0}}function makeRenderPassTimestampWrite(twPtr){return{"querySet":WebGPU.mgrQuerySet.get(HEAPU32[twPtr>>2]),"queryIndex":HEAPU32[twPtr+4>>2],"location":WebGPU.RenderPassTimestampLocation[HEAPU32[twPtr+8>>2]]}}function makeRenderPassTimestampWrites(count,twPtr){var timestampWrites=[];for(var i=0;i>2],HEAPU32[descriptor+12>>2]),"depthStencilAttachment":makeDepthStencilAttachment(HEAPU32[descriptor+16>>2]),"occlusionQuerySet":WebGPU.mgrQuerySet.get(HEAPU32[descriptor+20>>2])};var labelPtr=HEAPU32[descriptor+4>>2];if(labelPtr)desc["label"]=UTF8ToString(labelPtr);var timestampWriteCount=HEAPU32[descriptor+24>>2];if(timestampWriteCount){desc["timestampWrites"]=makeRenderPassTimestampWrites(timestampWriteCount,HEAPU32[descriptor+28>>2])}return desc}var desc=makeRenderPassDescriptor(descriptor);var commandEncoder=WebGPU.mgrCommandEncoder.get(encoderId);return WebGPU.mgrRenderPassEncoder.create(commandEncoder["beginRenderPass"](desc))}function _wgpuCommandEncoderCopyBufferToBuffer(encoderId,srcId,srcOffset_low,srcOffset_high,dstId,dstOffset_low,dstOffset_high,size_low,size_high){var commandEncoder=WebGPU.mgrCommandEncoder.get(encoderId);var src=WebGPU.mgrBuffer.get(srcId);var dst=WebGPU.mgrBuffer.get(dstId);commandEncoder["copyBufferToBuffer"](src,srcOffset_high*4294967296+srcOffset_low,dst,dstOffset_high*4294967296+dstOffset_low,size_high*4294967296+size_low)}function _wgpuCommandEncoderCopyBufferToTexture(encoderId,srcPtr,dstPtr,copySizePtr){var commandEncoder=WebGPU.mgrCommandEncoder.get(encoderId);var copySize=WebGPU.makeExtent3D(copySizePtr);commandEncoder["copyBufferToTexture"](WebGPU.makeImageCopyBuffer(srcPtr),WebGPU.makeImageCopyTexture(dstPtr),copySize)}function _wgpuCommandEncoderCopyTextureToTexture(encoderId,srcPtr,dstPtr,copySizePtr){var commandEncoder=WebGPU.mgrCommandEncoder.get(encoderId);var copySize=WebGPU.makeExtent3D(copySizePtr);commandEncoder["copyTextureToTexture"](WebGPU.makeImageCopyTexture(srcPtr),WebGPU.makeImageCopyTexture(dstPtr),copySize)}function _wgpuCommandEncoderFinish(encoderId){var commandEncoder=WebGPU.mgrCommandEncoder.get(encoderId);return WebGPU.mgrCommandBuffer.create(commandEncoder["finish"]())}function _wgpuCommandEncoderRelease(id){WebGPU.mgrCommandEncoder.release(id)}function _wgpuComputePassEncoderDispatchWorkgroups(passId,x,y,z){var pass=WebGPU.mgrComputePassEncoder.get(passId);if(pass["dispatchWorkgroups"]){pass["dispatchWorkgroups"](x,y,z)}else{pass["dispatch"](x,y,z)}}function _wgpuComputePassEncoderDispatchWorkgroupsIndirect(passId,indirectBufferId,indirectOffset_low,indirectOffset_high){var indirectBuffer=WebGPU.mgrBuffer.get(indirectBufferId);var indirectOffset=indirectOffset_high*4294967296+indirectOffset_low;var pass=WebGPU.mgrComputePassEncoder.get(passId);if(pass["dispatchWorkgroupsIndirect"]){pass["dispatchWorkgroupsIndirect"](indirectBuffer,indirectOffset)}else{pass["dispatchIndirect"](indirectBuffer,indirectOffset)}}function _wgpuComputePassEncoderEnd(passId){var pass=WebGPU.mgrComputePassEncoder.get(passId);pass["end"]()}function _wgpuComputePassEncoderRelease(id){WebGPU.mgrComputePassEncoder.release(id)}function _wgpuComputePassEncoderSetBindGroup(passId,groupIndex,groupId,dynamicOffsetCount,dynamicOffsetsPtr){var pass=WebGPU.mgrComputePassEncoder.get(passId);var group=WebGPU.mgrBindGroup.get(groupId);if(dynamicOffsetCount==0){pass["setBindGroup"](groupIndex,group)}else{var offsets=[];for(var i=0;i>2])}pass["setBindGroup"](groupIndex,group,offsets)}}function _wgpuComputePassEncoderSetPipeline(passId,pipelineId){var pass=WebGPU.mgrComputePassEncoder.get(passId);var pipeline=WebGPU.mgrComputePipeline.get(pipelineId);pass["setPipeline"](pipeline)}function _wgpuComputePipelineRelease(id){WebGPU.mgrComputePipeline.release(id)}function _wgpuDeviceCreateBindGroup(deviceId,descriptor){function makeEntry(entryPtr){var bufferId=HEAPU32[entryPtr+8>>2];var samplerId=HEAPU32[entryPtr+32>>2];var textureViewId=HEAPU32[entryPtr+36>>2];var binding=HEAPU32[entryPtr+4>>2];if(bufferId){var size_low=HEAPU32[entryPtr+24>>2];var size_high=HEAPU32[entryPtr+28>>2];var size=size_high===-1&&size_low===-1?undefined:size_high*4294967296+size_low;return{"binding":binding,"resource":{"buffer":WebGPU.mgrBuffer.get(bufferId),"offset":HEAPU32[entryPtr+4+16>>2]*4294967296+HEAPU32[entryPtr+16>>2],"size":size}}}else if(samplerId){return{"binding":binding,"resource":WebGPU.mgrSampler.get(samplerId)}}else{return{"binding":binding,"resource":WebGPU.mgrTextureView.get(textureViewId)}}}function makeEntries(count,entriesPtrs){var entries=[];for(var i=0;i>2]),"entries":makeEntries(HEAPU32[descriptor+12>>2],HEAPU32[descriptor+16>>2])};var labelPtr=HEAPU32[descriptor+4>>2];if(labelPtr)desc["label"]=UTF8ToString(labelPtr);var device=WebGPU.mgrDevice.get(deviceId);return WebGPU.mgrBindGroup.create(device["createBindGroup"](desc))}function _wgpuDeviceCreateBindGroupLayout(deviceId,descriptor){function makeBufferEntry(entryPtr){var typeInt=HEAPU32[entryPtr+4>>2];if(!typeInt)return undefined;return{"type":WebGPU.BufferBindingType[typeInt],"hasDynamicOffset":HEAP8[entryPtr+8>>0]!==0,"minBindingSize":HEAPU32[entryPtr+4+16>>2]*4294967296+HEAPU32[entryPtr+16>>2]}}function makeSamplerEntry(entryPtr){var typeInt=HEAPU32[entryPtr+4>>2];if(!typeInt)return undefined;return{"type":WebGPU.SamplerBindingType[typeInt]}}function makeTextureEntry(entryPtr){var sampleTypeInt=HEAPU32[entryPtr+4>>2];if(!sampleTypeInt)return undefined;return{"sampleType":WebGPU.TextureSampleType[sampleTypeInt],"viewDimension":WebGPU.TextureViewDimension[HEAPU32[entryPtr+8>>2]],"multisampled":HEAP8[entryPtr+12>>0]!==0}}function makeStorageTextureEntry(entryPtr){var accessInt=HEAPU32[entryPtr+4>>2];if(!accessInt)return undefined;return{"access":WebGPU.StorageTextureAccess[accessInt],"format":WebGPU.TextureFormat[HEAPU32[entryPtr+8>>2]],"viewDimension":WebGPU.TextureViewDimension[HEAPU32[entryPtr+12>>2]]}}function makeEntry(entryPtr){return{"binding":HEAPU32[entryPtr+4>>2],"visibility":HEAPU32[entryPtr+8>>2],"buffer":makeBufferEntry(entryPtr+16),"sampler":makeSamplerEntry(entryPtr+40),"texture":makeTextureEntry(entryPtr+48),"storageTexture":makeStorageTextureEntry(entryPtr+64)}}function makeEntries(count,entriesPtrs){var entries=[];for(var i=0;i>2],HEAPU32[descriptor+12>>2])};var labelPtr=HEAPU32[descriptor+4>>2];if(labelPtr)desc["label"]=UTF8ToString(labelPtr);var device=WebGPU.mgrDevice.get(deviceId);return WebGPU.mgrBindGroupLayout.create(device["createBindGroupLayout"](desc))}function _wgpuDeviceCreateBuffer(deviceId,descriptor){var mappedAtCreation=HEAP8[descriptor+24>>0]!==0;var desc={"label":undefined,"usage":HEAPU32[descriptor+8>>2],"size":HEAPU32[descriptor+4+16>>2]*4294967296+HEAPU32[descriptor+16>>2],"mappedAtCreation":mappedAtCreation};var labelPtr=HEAPU32[descriptor+4>>2];if(labelPtr)desc["label"]=UTF8ToString(labelPtr);var device=WebGPU.mgrDevice.get(deviceId);var bufferWrapper={};var id=WebGPU.mgrBuffer.create(device["createBuffer"](desc),bufferWrapper);if(mappedAtCreation){bufferWrapper.mapMode=2;bufferWrapper.onUnmap=[]}return id}function _wgpuDeviceCreateCommandEncoder(deviceId,descriptor){var desc;if(descriptor){desc={"label":undefined};var labelPtr=HEAPU32[descriptor+4>>2];if(labelPtr)desc["label"]=UTF8ToString(labelPtr)}var device=WebGPU.mgrDevice.get(deviceId);return WebGPU.mgrCommandEncoder.create(device["createCommandEncoder"](desc))}function _wgpuDeviceCreateComputePipeline(deviceId,descriptor){var desc={"label":undefined,"layout":WebGPU.mgrPipelineLayout.get(HEAPU32[descriptor+8>>2]),"compute":WebGPU.makeProgrammableStageDescriptor(descriptor+12)};var labelPtr=HEAPU32[descriptor+4>>2];if(labelPtr)desc["label"]=UTF8ToString(labelPtr);var device=WebGPU.mgrDevice.get(deviceId);return WebGPU.mgrComputePipeline.create(device["createComputePipeline"](desc))}function _wgpuDeviceCreatePipelineLayout(deviceId,descriptor){var bglCount=HEAPU32[descriptor+8>>2];var bglPtr=HEAPU32[descriptor+12>>2];var bgls=[];for(var i=0;i>2]))}var desc={"label":undefined,"bindGroupLayouts":bgls};var labelPtr=HEAPU32[descriptor+4>>2];if(labelPtr)desc["label"]=UTF8ToString(labelPtr);var device=WebGPU.mgrDevice.get(deviceId);return WebGPU.mgrPipelineLayout.create(device["createPipelineLayout"](desc))}function _wgpuDeviceCreateRenderPipeline(deviceId,descriptor){function makePrimitiveState(rsPtr){if(!rsPtr)return undefined;return{"topology":WebGPU.PrimitiveTopology[HEAPU32[rsPtr+4>>2]],"stripIndexFormat":WebGPU.IndexFormat[HEAPU32[rsPtr+8>>2]],"frontFace":WebGPU.FrontFace[HEAPU32[rsPtr+12>>2]],"cullMode":WebGPU.CullMode[HEAPU32[rsPtr+16>>2]]}}function makeBlendComponent(bdPtr){if(!bdPtr)return undefined;return{"operation":WebGPU.BlendOperation[HEAPU32[bdPtr>>2]],"srcFactor":WebGPU.BlendFactor[HEAPU32[bdPtr+4>>2]],"dstFactor":WebGPU.BlendFactor[HEAPU32[bdPtr+8>>2]]}}function makeBlendState(bsPtr){if(!bsPtr)return undefined;return{"alpha":makeBlendComponent(bsPtr+12),"color":makeBlendComponent(bsPtr+0)}}function makeColorState(csPtr){var formatInt=HEAPU32[csPtr+4>>2];return formatInt===0?undefined:{"format":WebGPU.TextureFormat[formatInt],"blend":makeBlendState(HEAPU32[csPtr+8>>2]),"writeMask":HEAPU32[csPtr+12>>2]}}function makeColorStates(count,csArrayPtr){var states=[];for(var i=0;i>2]],"failOp":WebGPU.StencilOperation[HEAPU32[ssfPtr+4>>2]],"depthFailOp":WebGPU.StencilOperation[HEAPU32[ssfPtr+8>>2]],"passOp":WebGPU.StencilOperation[HEAPU32[ssfPtr+12>>2]]}}function makeDepthStencilState(dssPtr){if(!dssPtr)return undefined;return{"format":WebGPU.TextureFormat[HEAPU32[dssPtr+4>>2]],"depthWriteEnabled":HEAP8[dssPtr+8>>0]!==0,"depthCompare":WebGPU.CompareFunction[HEAPU32[dssPtr+12>>2]],"stencilFront":makeStencilStateFace(dssPtr+16),"stencilBack":makeStencilStateFace(dssPtr+32),"stencilReadMask":HEAPU32[dssPtr+48>>2],"stencilWriteMask":HEAPU32[dssPtr+52>>2],"depthBias":HEAPU32[dssPtr+56>>2],"depthBiasSlopeScale":HEAPF32[dssPtr+60>>2],"depthBiasClamp":HEAPF32[dssPtr+64>>2]}}function makeVertexAttribute(vaPtr){return{"format":WebGPU.VertexFormat[HEAPU32[vaPtr>>2]],"offset":HEAPU32[vaPtr+4+8>>2]*4294967296+HEAPU32[vaPtr+8>>2],"shaderLocation":HEAPU32[vaPtr+16>>2]}}function makeVertexAttributes(count,vaArrayPtr){var vas=[];for(var i=0;i>2]*4294967296+HEAPU32[vbPtr>>2],"stepMode":WebGPU.VertexStepMode[HEAPU32[vbPtr+8>>2]],"attributes":makeVertexAttributes(HEAPU32[vbPtr+12>>2],HEAPU32[vbPtr+16>>2])}}function makeVertexBuffers(count,vbArrayPtr){if(!count)return undefined;var vbs=[];for(var i=0;i>2]),"entryPoint":UTF8ToString(HEAPU32[viPtr+8>>2]),"constants":WebGPU.makePipelineConstants(HEAPU32[viPtr+12>>2],HEAPU32[viPtr+16>>2]),"buffers":makeVertexBuffers(HEAPU32[viPtr+20>>2],HEAPU32[viPtr+24>>2])}}function makeMultisampleState(msPtr){if(!msPtr)return undefined;return{"count":HEAPU32[msPtr+4>>2],"mask":HEAPU32[msPtr+8>>2],"alphaToCoverageEnabled":HEAP8[msPtr+12>>0]!==0}}function makeFragmentState(fsPtr){if(!fsPtr)return undefined;return{"module":WebGPU.mgrShaderModule.get(HEAPU32[fsPtr+4>>2]),"entryPoint":UTF8ToString(HEAPU32[fsPtr+8>>2]),"constants":WebGPU.makePipelineConstants(HEAPU32[fsPtr+12>>2],HEAPU32[fsPtr+16>>2]),"targets":makeColorStates(HEAPU32[fsPtr+20>>2],HEAPU32[fsPtr+24>>2])}}var desc={"label":undefined,"layout":WebGPU.mgrPipelineLayout.get(HEAPU32[descriptor+8>>2]),"vertex":makeVertexState(descriptor+12),"primitive":makePrimitiveState(descriptor+40),"depthStencil":makeDepthStencilState(HEAPU32[descriptor+60>>2]),"multisample":makeMultisampleState(descriptor+64),"fragment":makeFragmentState(HEAPU32[descriptor+80>>2])};var labelPtr=HEAPU32[descriptor+4>>2];if(labelPtr)desc["label"]=UTF8ToString(labelPtr);var device=WebGPU.mgrDevice.get(deviceId);return WebGPU.mgrRenderPipeline.create(device["createRenderPipeline"](desc))}function _wgpuDeviceCreateSampler(deviceId,descriptor){var desc={"label":undefined,"addressModeU":WebGPU.AddressMode[HEAPU32[descriptor+8>>2]],"addressModeV":WebGPU.AddressMode[HEAPU32[descriptor+12>>2]],"addressModeW":WebGPU.AddressMode[HEAPU32[descriptor+16>>2]],"magFilter":WebGPU.FilterMode[HEAPU32[descriptor+20>>2]],"minFilter":WebGPU.FilterMode[HEAPU32[descriptor+24>>2]],"mipmapFilter":WebGPU.FilterMode[HEAPU32[descriptor+28>>2]],"lodMinClamp":HEAPF32[descriptor+32>>2],"lodMaxClamp":HEAPF32[descriptor+36>>2],"compare":WebGPU.CompareFunction[HEAPU32[descriptor+40>>2]]};var labelPtr=HEAPU32[descriptor+4>>2];if(labelPtr)desc["label"]=UTF8ToString(labelPtr);var device=WebGPU.mgrDevice.get(deviceId);return WebGPU.mgrSampler.create(device["createSampler"](desc))}function _wgpuDeviceCreateShaderModule(deviceId,descriptor){var nextInChainPtr=HEAPU32[descriptor>>2];var sType=HEAPU32[nextInChainPtr+4>>2];var desc={"label":undefined,"code":""};var labelPtr=HEAPU32[descriptor+4>>2];if(labelPtr)desc["label"]=UTF8ToString(labelPtr);switch(sType){case 5:{var count=HEAPU32[nextInChainPtr+8>>2];var start=HEAPU32[nextInChainPtr+12>>2];desc["code"]=HEAPU32.subarray(start>>2,(start>>2)+count);break}case 6:{var sourcePtr=HEAPU32[nextInChainPtr+8>>2];if(sourcePtr){desc["code"]=UTF8ToString(sourcePtr)}break}}var device=WebGPU.mgrDevice.get(deviceId);return WebGPU.mgrShaderModule.create(device["createShaderModule"](desc))}function _wgpuDeviceCreateSwapChain(deviceId,surfaceId,descriptor){var device=WebGPU.mgrDevice.get(deviceId);var context=WebGPU.mgrSurface.get(surfaceId);var canvasSize=[HEAPU32[descriptor+16>>2],HEAPU32[descriptor+20>>2]];if(canvasSize[0]!==0){context["canvas"]["width"]=canvasSize[0]}if(canvasSize[1]!==0){context["canvas"]["height"]=canvasSize[1]}var configuration={"device":device,"format":WebGPU.TextureFormat[HEAPU32[descriptor+12>>2]],"usage":HEAPU32[descriptor+8>>2],"alphaMode":"opaque"};context["configure"](configuration);return WebGPU.mgrSwapChain.create(context)}function _wgpuDeviceCreateTexture(deviceId,descriptor){var desc={"label":undefined,"size":WebGPU.makeExtent3D(descriptor+16),"mipLevelCount":HEAPU32[descriptor+32>>2],"sampleCount":HEAPU32[descriptor+36>>2],"dimension":WebGPU.TextureDimension[HEAPU32[descriptor+12>>2]],"format":WebGPU.TextureFormat[HEAPU32[descriptor+28>>2]],"usage":HEAPU32[descriptor+8>>2]};var labelPtr=HEAPU32[descriptor+4>>2];if(labelPtr)desc["label"]=UTF8ToString(labelPtr);var viewFormatCount=HEAPU32[descriptor+40>>2];if(viewFormatCount){var viewFormatsPtr=HEAPU32[descriptor+44>>2];desc["viewFormats"]=Array.from(HEAP32.subarray(viewFormatsPtr>>2,(viewFormatsPtr>>2)+viewFormatCount),function(format){return WebGPU.TextureFormat[format]})}var device=WebGPU.mgrDevice.get(deviceId);return WebGPU.mgrTexture.create(device["createTexture"](desc))}function _wgpuDeviceGetQueue(deviceId){var queueId=WebGPU.mgrDevice.objects[deviceId].queueId;WebGPU.mgrQueue.reference(queueId);return queueId}function _wgpuDeviceRelease(id){WebGPU.mgrDevice.release(id)}function maybeCStringToJsString(cString){return cString>2?UTF8ToString(cString):cString}var specialHTMLTargets=[0,document,window];function findEventTarget(target){target=maybeCStringToJsString(target);var domElement=specialHTMLTargets[target]||document.querySelector(target);return domElement}function findCanvasEventTarget(target){return findEventTarget(target)}function _wgpuInstanceCreateSurface(instanceId,descriptor){var nextInChainPtr=HEAPU32[descriptor>>2];var descriptorFromCanvasHTMLSelector=nextInChainPtr;var selectorPtr=HEAPU32[descriptorFromCanvasHTMLSelector+8>>2];var canvas=findCanvasEventTarget(selectorPtr);var context=canvas.getContext("webgpu");if(!context)return 0;var labelPtr=HEAPU32[descriptor+4>>2];if(labelPtr)context.surfaceLabelWebGPU=UTF8ToString(labelPtr);return WebGPU.mgrSurface.create(context)}function _wgpuInstanceRelease(){}function callUserCallback(func){if(ABORT){return}try{func()}catch(e){handleException(e)}}function allocateUTF8(str){var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8Array(str,HEAP8,ret,size);return ret}function _wgpuInstanceRequestAdapter(instanceId,options,callback,userdata){var opts;if(options){opts={"powerPreference":WebGPU.PowerPreference[HEAPU32[options+8>>2]],"forceFallbackAdapter":HEAP8[options+12>>0]!==0}}if(!("gpu"in navigator)){var messagePtr=allocateUTF8("WebGPU not available on this browser (navigator.gpu is not available)");getWasmTableEntry(callback)(1,0,messagePtr,userdata);_free(messagePtr);return}navigator["gpu"]["requestAdapter"](opts).then(function(adapter){callUserCallback(function(){if(adapter){var adapterId=WebGPU.mgrAdapter.create(adapter);getWasmTableEntry(callback)(0,adapterId,0,userdata)}else{var messagePtr=allocateUTF8("WebGPU not available on this system (requestAdapter returned null)");getWasmTableEntry(callback)(1,0,messagePtr,userdata);_free(messagePtr)}})},function(ex){callUserCallback(function(){var messagePtr=allocateUTF8(ex.message);getWasmTableEntry(callback)(2,0,messagePtr,userdata);_free(messagePtr)})})}function _wgpuPipelineLayoutRelease(id){WebGPU.mgrPipelineLayout.release(id)}function _wgpuQuerySetDestroy(querySetId){WebGPU.mgrQuerySet.get(querySetId)["destroy"]()}function _wgpuQuerySetRelease(id){WebGPU.mgrQuerySet.release(id)}function _wgpuQueueOnSubmittedWorkDone(queueId,signalValue_low,signalValue_high,callback,userdata){var queue=WebGPU.mgrQueue.get(queueId);queue["onSubmittedWorkDone"]().then(function(){callUserCallback(function(){getWasmTableEntry(callback)(0,userdata)})},function(){callUserCallback(function(){getWasmTableEntry(callback)(1,userdata)})})}function _wgpuQueueRelease(id){WebGPU.mgrQueue.release(id)}function _wgpuQueueSubmit(queueId,commandCount,commands){var queue=WebGPU.mgrQueue.get(queueId);var cmds=Array.from(HEAP32.subarray(commands>>2,(commands>>2)+commandCount),function(id){return WebGPU.mgrCommandBuffer.get(id)});queue["submit"](cmds)}function _wgpuQueueWriteBuffer(queueId,bufferId,bufferOffset_low,bufferOffset_high,data,size){var queue=WebGPU.mgrQueue.get(queueId);var buffer=WebGPU.mgrBuffer.get(bufferId);var bufferOffset=bufferOffset_high*4294967296+bufferOffset_low;var subarray=HEAPU8.subarray(data,data+size);queue["writeBuffer"](buffer,bufferOffset,subarray,0,size)}function _wgpuQueueWriteTexture(queueId,destinationPtr,data,dataSize,dataLayoutPtr,writeSizePtr){var queue=WebGPU.mgrQueue.get(queueId);var destination=WebGPU.makeImageCopyTexture(destinationPtr);var dataLayout=WebGPU.makeTextureDataLayout(dataLayoutPtr);var writeSize=WebGPU.makeExtent3D(writeSizePtr);var subarray=HEAPU8.subarray(data,data+dataSize);queue["writeTexture"](destination,subarray,dataLayout,writeSize)}function _wgpuRenderPassEncoderDraw(passId,vertexCount,instanceCount,firstVertex,firstInstance){var pass=WebGPU.mgrRenderPassEncoder.get(passId);pass["draw"](vertexCount,instanceCount,firstVertex,firstInstance)}function _wgpuRenderPassEncoderDrawIndexed(passId,indexCount,instanceCount,firstIndex,baseVertex,firstInstance){var pass=WebGPU.mgrRenderPassEncoder.get(passId);pass["drawIndexed"](indexCount,instanceCount,firstIndex,baseVertex,firstInstance)}function _wgpuRenderPassEncoderDrawIndexedIndirect(passId,indirectBufferId,indirectOffset_low,indirectOffset_high){var indirectBuffer=WebGPU.mgrBuffer.get(indirectBufferId);var indirectOffset=indirectOffset_high*4294967296+indirectOffset_low;var pass=WebGPU.mgrRenderPassEncoder.get(passId);pass["drawIndexedIndirect"](indirectBuffer,indirectOffset)}function _wgpuRenderPassEncoderDrawIndirect(passId,indirectBufferId,indirectOffset_low,indirectOffset_high){var indirectBuffer=WebGPU.mgrBuffer.get(indirectBufferId);var indirectOffset=indirectOffset_high*4294967296+indirectOffset_low;var pass=WebGPU.mgrRenderPassEncoder.get(passId);pass["drawIndirect"](indirectBuffer,indirectOffset)}function _wgpuRenderPassEncoderEnd(passId){var pass=WebGPU.mgrRenderPassEncoder.get(passId);pass["end"]()}function _wgpuRenderPassEncoderRelease(id){WebGPU.mgrRenderPassEncoder.release(id)}function _wgpuRenderPassEncoderSetBindGroup(passId,groupIndex,groupId,dynamicOffsetCount,dynamicOffsetsPtr){var pass=WebGPU.mgrRenderPassEncoder.get(passId);var group=WebGPU.mgrBindGroup.get(groupId);if(dynamicOffsetCount==0){pass["setBindGroup"](groupIndex,group)}else{var offsets=[];for(var i=0;i>2])}pass["setBindGroup"](groupIndex,group,offsets)}}function _wgpuRenderPassEncoderSetBlendConstant(passId,colorPtr){var pass=WebGPU.mgrRenderPassEncoder.get(passId);var color=WebGPU.makeColor(colorPtr);pass["setBlendConstant"](color)}function _wgpuRenderPassEncoderSetIndexBuffer(passId,bufferId,format,offset_low,offset_high,size_low,size_high){var pass=WebGPU.mgrRenderPassEncoder.get(passId);var buffer=WebGPU.mgrBuffer.get(bufferId);var offset=offset_high*4294967296+offset_low;var size=size_high===-1&&size_low===-1?undefined:size_high*4294967296+size_low;pass["setIndexBuffer"](buffer,WebGPU.IndexFormat[format],offset,size)}function _wgpuRenderPassEncoderSetPipeline(passId,pipelineId){var pass=WebGPU.mgrRenderPassEncoder.get(passId);var pipeline=WebGPU.mgrRenderPipeline.get(pipelineId);pass["setPipeline"](pipeline)}function _wgpuRenderPassEncoderSetScissorRect(passId,x,y,w,h){var pass=WebGPU.mgrRenderPassEncoder.get(passId);pass["setScissorRect"](x,y,w,h)}function _wgpuRenderPassEncoderSetStencilReference(passId,reference){var pass=WebGPU.mgrRenderPassEncoder.get(passId);pass["setStencilReference"](reference)}function _wgpuRenderPassEncoderSetVertexBuffer(passId,slot,bufferId,offset_low,offset_high,size_low,size_high){var pass=WebGPU.mgrRenderPassEncoder.get(passId);var buffer=WebGPU.mgrBuffer.get(bufferId);var offset=offset_high*4294967296+offset_low;var size=size_high===-1&&size_low===-1?undefined:size_high*4294967296+size_low;pass["setVertexBuffer"](slot,buffer,offset,size)}function _wgpuRenderPassEncoderSetViewport(passId,x,y,w,h,minDepth,maxDepth){var pass=WebGPU.mgrRenderPassEncoder.get(passId);pass["setViewport"](x,y,w,h,minDepth,maxDepth)}function _wgpuRenderPipelineRelease(id){WebGPU.mgrRenderPipeline.release(id)}function _wgpuSamplerRelease(id){WebGPU.mgrSampler.release(id)}function _wgpuShaderModuleRelease(id){WebGPU.mgrShaderModule.release(id)}function _wgpuSurfaceRelease(id){WebGPU.mgrSurface.release(id)}function _wgpuSwapChainGetCurrentTextureView(swapChainId){var context=WebGPU.mgrSwapChain.get(swapChainId);return WebGPU.mgrTextureView.create(context["getCurrentTexture"]()["createView"]())}function _wgpuSwapChainRelease(id){WebGPU.mgrSwapChain.release(id)}function _wgpuTextureCreateView(textureId,descriptor){var desc;if(descriptor){var mipLevelCount=HEAPU32[descriptor+20>>2];var arrayLayerCount=HEAPU32[descriptor+28>>2];desc={"format":WebGPU.TextureFormat[HEAPU32[descriptor+8>>2]],"dimension":WebGPU.TextureViewDimension[HEAPU32[descriptor+12>>2]],"baseMipLevel":HEAPU32[descriptor+16>>2],"mipLevelCount":mipLevelCount===4294967295?undefined:mipLevelCount,"baseArrayLayer":HEAPU32[descriptor+24>>2],"arrayLayerCount":arrayLayerCount===4294967295?undefined:arrayLayerCount,"aspect":WebGPU.TextureAspect[HEAPU32[descriptor+32>>2]]};var labelPtr=HEAPU32[descriptor+4>>2];if(labelPtr)desc["label"]=UTF8ToString(labelPtr)}var texture=WebGPU.mgrTexture.get(textureId);return WebGPU.mgrTextureView.create(texture["createView"](desc))}function _wgpuTextureDestroy(textureId){WebGPU.mgrTexture.get(textureId)["destroy"]()}function _wgpuTextureRelease(id){WebGPU.mgrTexture.release(id)}function _wgpuTextureViewRelease(id){WebGPU.mgrTextureView.release(id)}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}InternalError=Module["InternalError"]=extendError(Error,"InternalError");embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");init_ClassHandle();init_embind();init_RegisteredPointer();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");init_emval();WebGPU.initManagers();var asmLibraryArg={"h":__embind_finalize_value_object,"Ua":__embind_register_bigint,"wa":__embind_register_bool,"m":__embind_register_class,"T":__embind_register_class_class_function,"q":__embind_register_class_constructor,"d":__embind_register_class_function,"c":__embind_register_class_property,"va":__embind_register_emval,"Z":__embind_register_float,"s":__embind_register_integer,"r":__embind_register_memory_view,"_":__embind_register_std_string,"J":__embind_register_std_wstring,"i":__embind_register_value_object,"a":__embind_register_value_object_field,"xa":__embind_register_void,"k":__emval_as,"da":__emval_call_void_method,"b":__emval_decref,"ea":__emval_get_method_caller,"g":__emval_get_property,"l":__emval_incref,"p":__emval_new_array,"n":__emval_new_cstring,"j":__emval_run_destructors,"o":__emval_set_property,"f":__emval_take_value,"e":_abort,"ua":_emscripten_memcpy_big,"H":_emscripten_resize_heap,"Ga":_emscripten_webgpu_get_device,"ra":_environ_get,"sa":_environ_sizes_get,"ta":_fd_write,"Y":_setTempRet0,"La":_wgpuAdapterGetProperties,"S":_wgpuAdapterHasFeature,"Ia":_wgpuAdapterRelease,"U":_wgpuBindGroupRelease,"la":_wgpuBufferDestroy,"G":_wgpuBufferGetMappedRange,"R":_wgpuBufferRelease,"F":_wgpuBufferUnmap,"E":_wgpuCommandBufferRelease,"Na":_wgpuCommandEncoderBeginComputePass,"M":_wgpuCommandEncoderBeginRenderPass,"Xa":_wgpuCommandEncoderCopyBufferToBuffer,"ma":_wgpuCommandEncoderCopyBufferToTexture,"Oa":_wgpuCommandEncoderCopyTextureToTexture,"v":_wgpuCommandEncoderFinish,"x":_wgpuCommandEncoderRelease,"Ma":_wgpuComputePassEncoderDispatchWorkgroups,"Wa":_wgpuComputePassEncoderDispatchWorkgroupsIndirect,"Da":_wgpuComputePassEncoderEnd,"Ca":_wgpuComputePassEncoderRelease,"Ta":_wgpuComputePassEncoderSetBindGroup,"Sa":_wgpuComputePassEncoderSetPipeline,"aa":_wgpuComputePipelineRelease,"D":_wgpuDeviceCreateBindGroup,"C":_wgpuDeviceCreateBindGroupLayout,"B":_wgpuDeviceCreateBuffer,"y":_wgpuDeviceCreateCommandEncoder,"Ba":_wgpuDeviceCreateComputePipeline,"P":_wgpuDeviceCreatePipelineLayout,"O":_wgpuDeviceCreateRenderPipeline,"$":_wgpuDeviceCreateSampler,"u":_wgpuDeviceCreateShaderModule,"ya":_wgpuDeviceCreateSwapChain,"K":_wgpuDeviceCreateTexture,"ga":_wgpuDeviceGetQueue,"Ha":_wgpuDeviceRelease,"Fa":_wgpuInstanceCreateSurface,"Ja":_wgpuInstanceRelease,"Ea":_wgpuInstanceRequestAdapter,"ca":_wgpuPipelineLayoutRelease,"ia":_wgpuQuerySetDestroy,"ha":_wgpuQuerySetRelease,"Va":_wgpuQueueOnSubmittedWorkDone,"Q":_wgpuQueueRelease,"z":_wgpuQueueSubmit,"qa":_wgpuQueueWriteBuffer,"fa":_wgpuQueueWriteTexture,"V":_wgpuRenderPassEncoderDraw,"Pa":_wgpuRenderPassEncoderDrawIndexed,"Za":_wgpuRenderPassEncoderDrawIndexedIndirect,"Ya":_wgpuRenderPassEncoderDrawIndirect,"I":_wgpuRenderPassEncoderEnd,"X":_wgpuRenderPassEncoderRelease,"A":_wgpuRenderPassEncoderSetBindGroup,"Ra":_wgpuRenderPassEncoderSetBlendConstant,"_a":_wgpuRenderPassEncoderSetIndexBuffer,"W":_wgpuRenderPassEncoderSetPipeline,"na":_wgpuRenderPassEncoderSetScissorRect,"Qa":_wgpuRenderPassEncoderSetStencilReference,"pa":_wgpuRenderPassEncoderSetVertexBuffer,"oa":_wgpuRenderPassEncoderSetViewport,"ba":_wgpuRenderPipelineRelease,"Aa":_wgpuSamplerRelease,"N":_wgpuShaderModuleRelease,"Ka":_wgpuSurfaceRelease,"L":_wgpuSwapChainGetCurrentTextureView,"za":_wgpuSwapChainRelease,"w":_wgpuTextureCreateView,"ka":_wgpuTextureDestroy,"ja":_wgpuTextureRelease,"t":_wgpuTextureViewRelease};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["ab"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["cb"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["db"]).apply(null,arguments)};var ___getTypeName=Module["___getTypeName"]=function(){return(___getTypeName=Module["___getTypeName"]=Module["asm"]["eb"]).apply(null,arguments)};var ___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=function(){return(___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=Module["asm"]["fb"]).apply(null,arguments)};var dynCall_jii=Module["dynCall_jii"]=function(){return(dynCall_jii=Module["dynCall_jii"]=Module["asm"]["gb"]).apply(null,arguments)};var dynCall_viij=Module["dynCall_viij"]=function(){return(dynCall_viij=Module["dynCall_viij"]=Module["asm"]["hb"]).apply(null,arguments)};var dynCall_jiji=Module["dynCall_jiji"]=function(){return(dynCall_jiji=Module["dynCall_jiji"]=Module["asm"]["ib"]).apply(null,arguments)};var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve(Module);if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}run(); return wasmDevice.ready diff --git a/native/cocos/renderer/gfx-wgpu/WGPUUtils.cpp b/native/cocos/renderer/gfx-wgpu/WGPUUtils.cpp index f4bd4f63b8f..2c8e4b4e4b3 100644 --- a/native/cocos/renderer/gfx-wgpu/WGPUUtils.cpp +++ b/native/cocos/renderer/gfx-wgpu/WGPUUtils.cpp @@ -132,20 +132,20 @@ fn frag_main() -> @location(0) vec4 { shaderDescFrag.label = "clearQuadFrag"; clearPassData.fragShader = wgpuDeviceCreateShaderModule(wgpuDevice, &shaderDescFrag); - WGPUBindGroupLayoutEntry textureEntry; - textureEntry.binding = 0; - textureEntry.visibility = WGPUShaderStage_Fragment; - textureEntry.texture.sampleType = WGPUTextureSampleType_Undefined; - textureEntry.texture.viewDimension = WGPUTextureViewDimension_2D; - textureEntry.texture.multisampled = false; - textureEntry.buffer.type = WGPUBufferBindingType_Uniform; - textureEntry.sampler.type = WGPUSamplerBindingType_Undefined; - textureEntry.storageTexture.access = WGPUStorageTextureAccess_Undefined; + WGPUBindGroupLayoutEntry bufferEntry; + bufferEntry.binding = 0; + bufferEntry.visibility = WGPUShaderStage_Fragment; + bufferEntry.texture.sampleType = WGPUTextureSampleType_Undefined; + bufferEntry.buffer.type = WGPUBufferBindingType_Uniform; + bufferEntry.buffer.hasDynamicOffset = false; + bufferEntry.buffer.minBindingSize = 16; + bufferEntry.sampler.type = WGPUSamplerBindingType_Undefined; + bufferEntry.storageTexture.access = WGPUStorageTextureAccess_Undefined; WGPUBindGroupLayoutDescriptor bgLayoutDesc; bgLayoutDesc.label = "clearPassBGLayout"; bgLayoutDesc.entryCount = 1; - bgLayoutDesc.entries = &textureEntry; + bgLayoutDesc.entries = &bufferEntry; clearPassData.bindGroupLayout = wgpuDeviceCreateBindGroupLayout(wgpuDevice, &bgLayoutDesc); WGPUPipelineLayoutDescriptor pipelineLayoutDesc; diff --git a/native/external-config.json b/native/external-config.json index 33b5a243f50..a8af410feae 100644 --- a/native/external-config.json +++ b/native/external-config.json @@ -3,6 +3,6 @@ "type": "github", "owner": "cocos-creator", "name": "engine-native-external", - "checkout": "v3.6.2-5" + "checkout": "v3.6.2-6" } } \ No newline at end of file From 83a2717facdbdff216d7c4a420abaf670a4b3a18 Mon Sep 17 00:00:00 2001 From: minggo Date: Tue, 25 Oct 2022 16:38:38 +0800 Subject: [PATCH 077/829] Fix module import (#13140) * fix core module import style * import murmurhash2_32_gc from core module * do not export visibleRect --- cocos/2d/assembler/graphics/types.ts | 2 +- .../graphics/webgl/graphics-assembler.ts | 2 +- cocos/2d/assembler/graphics/webgl/impl.ts | 2 +- cocos/2d/assembler/label/bmfont.ts | 3 +- cocos/2d/assembler/label/bmfontUtils.ts | 4 +- cocos/2d/assembler/label/font-utils.ts | 3 +- cocos/2d/assembler/label/letter-font.ts | 4 +- cocos/2d/assembler/label/letter.ts | 5 +- cocos/2d/assembler/label/ttf.ts | 3 +- cocos/2d/assembler/label/ttfUtils.ts | 10 ++- cocos/2d/assembler/sprite/bar-filled.ts | 3 +- cocos/2d/assembler/sprite/radial-filled.ts | 2 +- cocos/2d/assembler/sprite/sliced.ts | 2 +- cocos/2d/assembler/sprite/tiled.ts | 2 +- cocos/2d/assembler/utils.ts | 3 +- cocos/2d/assets/bitmap-font.ts | 6 +- cocos/2d/assets/font.ts | 4 +- cocos/2d/assets/label-atlas.ts | 4 +- cocos/2d/assets/sprite-atlas.ts | 5 +- cocos/2d/assets/sprite-frame.ts | 7 +- cocos/2d/assets/ttf-font.ts | 7 +- cocos/2d/components/deprecated.ts | 18 +++-- cocos/2d/components/graphics.ts | 6 +- cocos/2d/components/label-outline.ts | 5 +- cocos/2d/components/label-shadow.ts | 2 +- cocos/2d/components/label.ts | 6 +- cocos/2d/components/mask.ts | 7 +- cocos/2d/components/rich-text.ts | 13 ++-- cocos/2d/components/sprite.ts | 7 +- cocos/2d/components/ui-mesh-renderer.ts | 5 +- cocos/2d/components/ui-opacity.ts | 4 +- cocos/2d/event/pointer-event-dispatcher.ts | 2 +- cocos/2d/framework/canvas.ts | 14 ++-- cocos/2d/framework/deprecated-1.2.0.ts | 2 +- cocos/2d/framework/deprecated-3.0.0.ts | 2 +- cocos/2d/framework/deprecated-3.6.0.ts | 2 +- cocos/2d/framework/deprecated.ts | 11 ++- cocos/2d/framework/render-root-2d.ts | 8 +-- cocos/2d/framework/sprite-renderer.ts | 7 +- cocos/2d/framework/ui-renderer-manager.ts | 3 +- cocos/2d/framework/ui-renderer.ts | 7 +- cocos/2d/framework/ui-transform.ts | 12 ++-- cocos/2d/index.ts | 4 +- cocos/2d/renderer/batcher-2d.ts | 17 ++--- cocos/2d/renderer/deprecated.ts | 3 +- cocos/2d/renderer/draw-batch.ts | 4 +- cocos/2d/renderer/linear-buffer-accessor.ts | 5 +- cocos/2d/renderer/mesh-buffer.ts | 3 +- cocos/2d/renderer/render-data.ts | 5 +- cocos/2d/renderer/static-vb-accessor.ts | 4 +- cocos/2d/renderer/vertex-format.ts | 10 +-- cocos/2d/utils/dynamic-atlas/atlas-manager.ts | 15 ++-- cocos/2d/utils/dynamic-atlas/atlas.ts | 4 +- cocos/2d/utils/font-loader.ts | 2 +- cocos/2d/utils/html-text-parser.ts | 4 +- cocos/3d/assets/deprecated.ts | 2 +- cocos/3d/assets/mesh.jsb.ts | 5 +- cocos/3d/assets/mesh.ts | 70 +++++++++---------- cocos/3d/assets/skeleton.ts | 8 +-- cocos/3d/framework/deprecated.ts | 6 +- cocos/3d/framework/mesh-renderer.ts | 9 +-- cocos/3d/lights/deprecated.ts | 12 ++-- .../3d/lights/directional-light-component.ts | 56 +++++++-------- cocos/3d/lights/light-component.ts | 8 +-- cocos/3d/lights/sphere-light-component.ts | 10 +-- cocos/3d/lights/spot-light-component.ts | 20 +++--- cocos/3d/misc/batch-utils.ts | 2 +- cocos/3d/misc/buffer.ts | 2 +- cocos/3d/misc/create-mesh.jsb.ts | 4 +- cocos/3d/misc/create-mesh.ts | 2 +- cocos/3d/models/baked-skinning-model.jsb.ts | 13 ++-- cocos/3d/models/baked-skinning-model.ts | 7 +- cocos/3d/models/morph-model.jsb.ts | 4 +- cocos/3d/models/skinning-model.jsb.ts | 4 +- cocos/3d/models/skinning-model.ts | 12 ++-- .../skeletal-animation/data-pool-manager.ts | 4 +- cocos/3d/skeletal-animation/deprecated.ts | 5 +- .../skeletal-animation-blending.ts | 2 +- .../skeletal-animation-data-hub.ts | 4 +- .../skeletal-animation-state.ts | 5 +- .../skeletal-animation-utils.ts | 21 +++--- .../skeletal-animation/skeletal-animation.ts | 6 +- cocos/3d/skinned-mesh-renderer/deprecated.ts | 9 ++- .../skinned-mesh-batch-renderer.ts | 8 +-- .../skinned-mesh-renderer.ts | 4 +- cocos/animation/animation-clip.ts | 19 ++--- cocos/animation/animation-component.ts | 11 ++- cocos/animation/animation-curve.ts | 10 ++- cocos/animation/animation-manager.ts | 8 +-- cocos/animation/animation-state.ts | 28 ++++---- cocos/animation/compression.ts | 2 +- cocos/animation/cross-fade.ts | 2 +- cocos/animation/cubic-spline-value.ts | 2 +- .../embedded-animation-clip-player.ts | 2 +- .../embedded-particle-system-player.ts | 2 +- .../exotic-animation/exotic-animation.ts | 2 +- cocos/animation/global-animation-manager.ts | 4 +- cocos/animation/legacy-clip-data.ts | 5 +- .../__tmp__/graph-from-description.ts | 2 +- .../marionette/animation-blend-2d.ts | 2 +- cocos/animation/marionette/animation-graph.ts | 5 +- cocos/animation/marionette/blend-2d.ts | 2 +- cocos/animation/marionette/graph-debug.ts | 2 +- cocos/animation/marionette/graph-eval.ts | 3 +- cocos/animation/playable.ts | 2 +- cocos/animation/skeletal-animation-utils.ts | 2 +- cocos/animation/target-path.ts | 2 +- cocos/animation/tracks/color-track.ts | 2 +- cocos/animation/tracks/quat-track.ts | 2 +- cocos/animation/tracks/size-track.ts | 2 +- cocos/animation/tracks/track.ts | 5 +- cocos/animation/tracks/untyped-track.ts | 4 +- cocos/animation/tracks/vector-track.ts | 3 +- cocos/animation/transform-utils.ts | 2 +- .../value-proxy-factories/uniform.ts | 2 +- cocos/asset/assets/texture-base.ts | 2 +- cocos/audio/audio-clip.ts | 4 +- cocos/audio/audio-source.ts | 2 +- cocos/audio/deprecated.ts | 2 +- cocos/audio/index.ts | 5 +- cocos/core/deprecated.ts | 2 +- cocos/core/index.ts | 3 +- cocos/core/platform/visible-rect.ts | 4 +- cocos/core/scheduler.ts | 2 +- cocos/core/system.ts | 2 +- cocos/deprecated.ts | 2 +- cocos/dragon-bones/ArmatureDisplay.ts | 24 +++---- cocos/dragon-bones/ArmatureSystem.ts | 5 +- cocos/dragon-bones/CCArmatureDisplay.ts | 3 +- cocos/dragon-bones/CCFactory.ts | 5 +- cocos/dragon-bones/CCTextureData.ts | 2 +- cocos/dragon-bones/DragonBonesAsset.ts | 7 +- cocos/dragon-bones/DragonBonesAtlasAsset.ts | 4 +- cocos/dragon-bones/assembler/simple.ts | 5 +- cocos/dragon-bones/deprecated.ts | 2 +- cocos/game/deprecated.ts | 2 +- cocos/game/director.ts | 53 ++++++-------- cocos/game/game.ts | 17 ++--- cocos/game/splash-screen.ts | 14 ++-- cocos/gfx/base/input-assembler.ts | 2 +- cocos/gfx/base/render-pass.ts | 2 +- cocos/gfx/base/states/buffer-barrier.ts | 2 +- cocos/gfx/base/states/general-barrier.ts | 2 +- cocos/gfx/base/states/texture-barrier.ts | 2 +- cocos/gfx/deprecated-3.0.0.ts | 9 ++- cocos/gfx/deprecated-3.5.0.ts | 2 +- cocos/gfx/device-manager.ts | 24 +++---- cocos/gfx/empty/empty-device.ts | 5 +- cocos/gfx/index.ems.ts | 4 +- cocos/gfx/index.jsb.ts | 4 +- cocos/gfx/polyfill-legacy-cc.ts | 4 +- cocos/gi/light-probe/auto-placement.ts | 2 +- cocos/gi/light-probe/delaunay.ts | 5 +- cocos/gi/light-probe/light-probe-group.ts | 3 +- cocos/gi/light-probe/light-probe.ts | 11 ++- cocos/gi/light-probe/sh.ts | 6 +- cocos/input/deprecated-3.3.0.ts | 2 +- cocos/input/deprecated-3.4.0.ts | 2 +- cocos/input/deprecated.ts | 5 +- cocos/input/input.ts | 12 ++-- cocos/input/system-event.ts | 9 ++- cocos/input/types/event-enum.ts | 4 +- cocos/input/types/event/event-mouse.ts | 23 +++--- cocos/input/types/event/event-touch.ts | 2 +- cocos/input/types/event/event.ts | 4 +- cocos/input/types/touch.ts | 31 ++++---- cocos/misc/camera-component.ts | 28 ++++---- cocos/misc/deprecated.ts | 8 +-- cocos/render-scene/core/pass.ts | 2 +- cocos/rendering/render-pipeline.ts | 2 +- cocos/root.jsb.ts | 5 +- cocos/root.ts | 26 +++---- cocos/tween/tween-system.ts | 5 +- cocos/ui/editbox/edit-box-impl.ts | 4 +- cocos/ui/view.ts | 17 ++--- cocos/ui/widget-manager.ts | 11 ++- cocos/ui/widget.ts | 28 ++++---- cocos/video/video-player-impl-web.ts | 3 +- editor/exports/offline-mappings.ts | 2 +- exports/base.ts | 2 - native/cocos/core/Root.cpp | 4 +- native/cocos/core/Root.h | 1 + .../renderer/gfx-vulkan/VKCommandBuffer.cpp | 2 +- native/cocos/renderer/gfx-vulkan/VKDevice.cpp | 2 +- .../pipeline/custom/NativeExecutor.cpp | 1 - .../pipeline/custom/NativePipelineImpl.cpp | 3 +- 186 files changed, 547 insertions(+), 736 deletions(-) diff --git a/cocos/2d/assembler/graphics/types.ts b/cocos/2d/assembler/graphics/types.ts index 5028c19c04b..81e7e0838d0 100644 --- a/cocos/2d/assembler/graphics/types.ts +++ b/cocos/2d/assembler/graphics/types.ts @@ -24,7 +24,7 @@ THE SOFTWARE. */ -import { ccenum } from '../../../core/value-types/enum'; +import { ccenum } from '../../../core'; /** * @en Enum for LineCap. diff --git a/cocos/2d/assembler/graphics/webgl/graphics-assembler.ts b/cocos/2d/assembler/graphics/webgl/graphics-assembler.ts index a397147dac4..571a2818038 100644 --- a/cocos/2d/assembler/graphics/webgl/graphics-assembler.ts +++ b/cocos/2d/assembler/graphics/webgl/graphics-assembler.ts @@ -23,7 +23,7 @@ THE SOFTWARE. */ import { JSB } from 'internal:constants'; -import { Color, Vec3 } from '../../../../core/math'; +import { Color, Vec3 } from '../../../../core'; import { IAssembler } from '../../../renderer/base'; import { MeshRenderData } from '../../../renderer/render-data'; import { IBatcher } from '../../../renderer/i-batcher'; diff --git a/cocos/2d/assembler/graphics/webgl/impl.ts b/cocos/2d/assembler/graphics/webgl/impl.ts index 3e171534c59..ff858923392 100644 --- a/cocos/2d/assembler/graphics/webgl/impl.ts +++ b/cocos/2d/assembler/graphics/webgl/impl.ts @@ -24,7 +24,7 @@ */ import { JSB } from 'internal:constants'; -import { Color, Vec2 } from '../../../../core/math'; +import { Color, Vec2 } from '../../../../core'; import { Graphics } from '../../../components'; import { MeshRenderData } from '../../../renderer/render-data'; import { RenderDrawInfoType } from '../../../renderer/render-draw-info'; diff --git a/cocos/2d/assembler/label/bmfont.ts b/cocos/2d/assembler/label/bmfont.ts index fcfe388d51c..c07bd3fb300 100644 --- a/cocos/2d/assembler/label/bmfont.ts +++ b/cocos/2d/assembler/label/bmfont.ts @@ -24,8 +24,7 @@ */ import { SpriteFrame } from '../../assets/sprite-frame'; -import * as js from '../../../core/utils/js'; -import { Color, Rect } from '../../../core/math'; +import { Color, Rect, js } from '../../../core'; import { IBatcher } from '../../renderer/i-batcher'; import { Label } from '../../components/label'; import { IAssembler } from '../../renderer/base'; diff --git a/cocos/2d/assembler/label/bmfontUtils.ts b/cocos/2d/assembler/label/bmfontUtils.ts index 17540ccd529..d8424ddebc9 100644 --- a/cocos/2d/assembler/label/bmfontUtils.ts +++ b/cocos/2d/assembler/label/bmfontUtils.ts @@ -24,10 +24,10 @@ */ import { JSB } from 'internal:constants'; -import { BitmapFont, IConfig, FontLetterDefinition, FontAtlas } from '../../assets/bitmap-font'; +import { IConfig, FontLetterDefinition, FontAtlas } from '../../assets/bitmap-font'; import { SpriteFrame } from '../../assets/sprite-frame'; import { isUnicodeCJK, isUnicodeSpace } from '../../utils/text-utils'; -import { Rect, Size, Vec2 } from '../../../core/math'; +import { Rect, Size, Vec2 } from '../../../core'; import { HorizontalTextAlignment, VerticalTextAlignment, Label, Overflow, CacheMode } from '../../components/label'; import { UITransform } from '../../framework/ui-transform'; import { LetterAtlas, shareLabelInfo } from './font-utils'; diff --git a/cocos/2d/assembler/label/font-utils.ts b/cocos/2d/assembler/label/font-utils.ts index 821123f1ff6..9ddc0f2113d 100644 --- a/cocos/2d/assembler/label/font-utils.ts +++ b/cocos/2d/assembler/label/font-utils.ts @@ -24,13 +24,12 @@ */ import { FontAtlas } from '../../assets/bitmap-font'; -import { Color } from '../../../core/math'; +import { Color, macro, warnID } from '../../../core'; import { ImageAsset, Texture2D } from '../../../asset/assets'; import { PixelFormat } from '../../../asset/assets/asset-enum'; import { BufferTextureCopy } from '../../../gfx'; import { safeMeasureText, BASELINE_RATIO, MIDDLE_RATIO, getBaselineOffset } from '../../utils/text-utils'; import { director, Director } from '../../../game/director'; -import { macro, warnID } from '../../../core'; export interface ISharedLabelData { canvas: HTMLCanvasElement; diff --git a/cocos/2d/assembler/label/letter-font.ts b/cocos/2d/assembler/label/letter-font.ts index 3df91d01021..8f8e122565f 100644 --- a/cocos/2d/assembler/label/letter-font.ts +++ b/cocos/2d/assembler/label/letter-font.ts @@ -23,7 +23,7 @@ THE SOFTWARE. */ -import { mixin } from '../../../core/utils/js'; +import { js } from '../../../core'; import { Label, LabelOutline } from '../../components'; import { bmfontUtils } from './bmfontUtils'; import { shareLabelInfo, LetterAtlas, computeHash } from './font-utils'; @@ -34,7 +34,7 @@ const _isBold = false; let _shareAtlas: LetterAtlas | null = null; -export const letterFont = mixin(bmfontUtils, { +export const letterFont = js.mixin(bmfontUtils, { getAssemblerData () { if (!_shareAtlas) { _shareAtlas = new LetterAtlas(_atlasWidth, _atlasHeight); diff --git a/cocos/2d/assembler/label/letter.ts b/cocos/2d/assembler/label/letter.ts index cb1d79b4735..30f95c405d0 100644 --- a/cocos/2d/assembler/label/letter.ts +++ b/cocos/2d/assembler/label/letter.ts @@ -23,13 +23,12 @@ THE SOFTWARE. */ -import { addon } from '../../../core/utils/js'; +import { js, Color } from '../../../core'; import { IBatcher } from '../../renderer/i-batcher'; import { Label } from '../../components/label'; import { fillMeshVertices3D } from '../utils'; import { bmfont } from './bmfont'; import { letterFont } from './letter-font'; -import { Color } from '../../../core/math/color'; const tempColor = new Color(255, 255, 255, 255); @@ -56,4 +55,4 @@ export const letter = { appendQuad: bmfont.appendQuad, }; -addon(letter, letterFont); +js.addon(letter, letterFont); diff --git a/cocos/2d/assembler/label/ttf.ts b/cocos/2d/assembler/label/ttf.ts index 8784886f6d2..d717ae259d2 100644 --- a/cocos/2d/assembler/label/ttf.ts +++ b/cocos/2d/assembler/label/ttf.ts @@ -28,8 +28,7 @@ * @module ui-assembler */ -import * as js from '../../../core/utils/js'; -import { Color } from '../../../core/math'; +import { Color, js } from '../../../core'; import { IBatcher } from '../../renderer/i-batcher'; import { Label } from '../../components/label'; import { IAssembler } from '../../renderer/base'; diff --git a/cocos/2d/assembler/label/ttfUtils.ts b/cocos/2d/assembler/label/ttfUtils.ts index 2d27b82f592..70b6be9386f 100644 --- a/cocos/2d/assembler/label/ttfUtils.ts +++ b/cocos/2d/assembler/label/ttfUtils.ts @@ -27,12 +27,10 @@ import { JSB } from 'internal:constants'; import { SpriteFrame } from '../../assets'; import { Texture2D } from '../../../asset/assets'; import { fragmentText, safeMeasureText, getBaselineOffset, BASELINE_RATIO } from '../../utils/text-utils'; -import { Color, Size, Vec2, Rect } from '../../../core/math'; +import { Color, Size, Vec2, Rect, logID, cclegacy } from '../../../core'; import { HorizontalTextAlignment, Label, LabelOutline, VerticalTextAlignment, LabelShadow } from '../../components'; import { ISharedLabelData, LetterRenderTexture } from './font-utils'; -import { logID } from '../../../core/platform/debug'; import { UITransform } from '../../framework/ui-transform'; -import { legacyCC } from '../../../core/global-exports'; import { dynamicAtlasManager } from '../../utils/dynamic-atlas/atlas-manager'; import { BlendFactor } from '../../../gfx'; import { WrapMode } from '../../../asset/assets/asset-enum'; @@ -341,11 +339,11 @@ export const ttfUtils = { if (comp.renderData) { comp.renderData.textureDirty = true; } - if (legacyCC.director.root && legacyCC.director.root.batcher2D) { + if (cclegacy.director.root && cclegacy.director.root.batcher2D) { if (JSB) { - legacyCC.director.root.batcher2D._releaseDescriptorSetCache(tex.getGFXTexture(), tex.getGFXSampler()); + cclegacy.director.root.batcher2D._releaseDescriptorSetCache(tex.getGFXTexture(), tex.getGFXSampler()); } else { - legacyCC.director.root.batcher2D._releaseDescriptorSetCache(tex.getHash()); + cclegacy.director.root.batcher2D._releaseDescriptorSetCache(tex.getHash()); } } } diff --git a/cocos/2d/assembler/sprite/bar-filled.ts b/cocos/2d/assembler/sprite/bar-filled.ts index 88b566464fd..71567f26f5d 100644 --- a/cocos/2d/assembler/sprite/bar-filled.ts +++ b/cocos/2d/assembler/sprite/bar-filled.ts @@ -23,12 +23,11 @@ THE SOFTWARE. */ -import { Mat4 } from '../../../core/math'; +import { Mat4, errorID } from '../../../core'; import { IRenderData, RenderData } from '../../renderer/render-data'; import { IBatcher } from '../../renderer/i-batcher'; import { Sprite } from '../../components'; import { IAssembler } from '../../renderer/base'; -import { errorID } from '../../../core/platform/debug'; import { dynamicAtlasManager } from '../../utils/dynamic-atlas/atlas-manager'; import { StaticVBChunk } from '../../renderer/static-vb-accessor'; diff --git a/cocos/2d/assembler/sprite/radial-filled.ts b/cocos/2d/assembler/sprite/radial-filled.ts index 340227efbe8..e85bfb5cd4e 100644 --- a/cocos/2d/assembler/sprite/radial-filled.ts +++ b/cocos/2d/assembler/sprite/radial-filled.ts @@ -25,7 +25,7 @@ import { JSB } from 'internal:constants'; import { SpriteFrame } from '../../assets'; -import { Mat4, Vec2 } from '../../../core/math'; +import { Mat4, Vec2 } from '../../../core'; import { IRenderData, RenderData } from '../../renderer/render-data'; import { IBatcher } from '../../renderer/i-batcher'; import { Sprite, UIOpacity } from '../../components'; diff --git a/cocos/2d/assembler/sprite/sliced.ts b/cocos/2d/assembler/sprite/sliced.ts index c1a4bef45a8..0800a0f9750 100644 --- a/cocos/2d/assembler/sprite/sliced.ts +++ b/cocos/2d/assembler/sprite/sliced.ts @@ -23,7 +23,7 @@ THE SOFTWARE. */ -import { Color, Mat4, Vec3 } from '../../../core/math'; +import { Color, Mat4, Vec3 } from '../../../core'; import { IRenderData, RenderData } from '../../renderer/render-data'; import { IBatcher } from '../../renderer/i-batcher'; import { Sprite } from '../../components'; diff --git a/cocos/2d/assembler/sprite/tiled.ts b/cocos/2d/assembler/sprite/tiled.ts index ddc847da74e..d335206b880 100644 --- a/cocos/2d/assembler/sprite/tiled.ts +++ b/cocos/2d/assembler/sprite/tiled.ts @@ -25,7 +25,7 @@ import { JSB } from 'internal:constants'; import { IUV, SpriteFrame } from '../../assets'; -import { Mat4, Vec3, Color } from '../../../core/math'; +import { Mat4, Vec3, Color } from '../../../core'; import { IRenderData, RenderData } from '../../renderer/render-data'; import { IBatcher } from '../../renderer/i-batcher'; import { Sprite } from '../../components/sprite'; diff --git a/cocos/2d/assembler/utils.ts b/cocos/2d/assembler/utils.ts index 0ebd53b9759..a837c3d4489 100644 --- a/cocos/2d/assembler/utils.ts +++ b/cocos/2d/assembler/utils.ts @@ -23,12 +23,11 @@ THE SOFTWARE. */ -import { Color, Mat4 } from '../../core/math'; +import { Color, Mat4, clamp } from '../../core'; import { RenderData } from '../renderer/render-data'; import { IBatcher } from '../renderer/i-batcher'; import { Node } from '../../scene-graph/node'; import { FormatInfos } from '../../gfx'; -import { clamp } from '../../core'; const m = new Mat4(); diff --git a/cocos/2d/assets/bitmap-font.ts b/cocos/2d/assets/bitmap-font.ts index ecbda85704a..0a5d26b8f10 100644 --- a/cocos/2d/assets/bitmap-font.ts +++ b/cocos/2d/assets/bitmap-font.ts @@ -27,9 +27,7 @@ import { ccclass, type, serializable, editable } from 'cc.decorator'; import { Font } from './font'; import { SpriteFrame } from './sprite-frame'; -import { legacyCC } from '../../core/global-exports'; -import { js } from '../../core/utils'; -import { warn } from '../../core/platform/debug'; +import { cclegacy, js, warn } from '../../core'; export interface IConfig { [key: string]: any; @@ -166,4 +164,4 @@ export class BitmapFont extends Font { } } -legacyCC.BitmapFont = BitmapFont; +cclegacy.BitmapFont = BitmapFont; diff --git a/cocos/2d/assets/font.ts b/cocos/2d/assets/font.ts index 44d54ee8cc7..4d77298510a 100644 --- a/cocos/2d/assets/font.ts +++ b/cocos/2d/assets/font.ts @@ -26,7 +26,7 @@ import { ccclass } from 'cc.decorator'; import { Asset } from '../../asset/assets'; -import { legacyCC } from '../../core/global-exports'; +import { cclegacy } from '../../core'; /** * @en Class for Font handling. @@ -36,4 +36,4 @@ import { legacyCC } from '../../core/global-exports'; export class Font extends Asset { } -legacyCC.Font = Font; +cclegacy.Font = Font; diff --git a/cocos/2d/assets/label-atlas.ts b/cocos/2d/assets/label-atlas.ts index 339c480c182..34dc356a24d 100644 --- a/cocos/2d/assets/label-atlas.ts +++ b/cocos/2d/assets/label-atlas.ts @@ -26,7 +26,7 @@ import { ccclass } from 'cc.decorator'; import { BitmapFont } from './bitmap-font'; -import { legacyCC } from '../../core/global-exports'; +import { cclegacy } from '../../core'; /** * @en Class for LabelAtlas handling. * @zh 艺术数字字体资源类。 @@ -36,4 +36,4 @@ import { legacyCC } from '../../core/global-exports'; export class LabelAtlas extends BitmapFont { } -legacyCC.LabelAtlas = LabelAtlas; +cclegacy.LabelAtlas = LabelAtlas; diff --git a/cocos/2d/assets/sprite-atlas.ts b/cocos/2d/assets/sprite-atlas.ts index a8a7bfb0408..97b559a7225 100644 --- a/cocos/2d/assets/sprite-atlas.ts +++ b/cocos/2d/assets/sprite-atlas.ts @@ -26,10 +26,9 @@ import { EDITOR, TEST } from 'internal:constants'; import { ccclass, serializable, editable } from 'cc.decorator'; -import * as js from '../../core/utils/js'; import { Asset } from '../../asset/assets'; import { SpriteFrame } from './sprite-frame'; -import { legacyCC } from '../../core/global-exports'; +import { cclegacy, js } from '../../core'; interface ISpriteAtlasSerializeData{ name: string; @@ -138,4 +137,4 @@ export class SpriteAtlas extends Asset { } } -legacyCC.SpriteAtlas = SpriteAtlas; +cclegacy.SpriteAtlas = SpriteAtlas; diff --git a/cocos/2d/assets/sprite-frame.ts b/cocos/2d/assets/sprite-frame.ts index 8fee066ea58..c752b979390 100644 --- a/cocos/2d/assets/sprite-frame.ts +++ b/cocos/2d/assets/sprite-frame.ts @@ -27,15 +27,12 @@ import { ccclass } from 'cc.decorator'; import { EDITOR, TEST, BUILD } from 'internal:constants'; -import { Mat4, Rect, Size, Vec2, Vec3, Vec4 } from '../../core/math'; +import { Mat4, Rect, Size, Vec2, Vec3, Vec4, cclegacy, errorID, warnID, js } from '../../core'; import { Asset } from '../../asset/assets/asset'; import { TextureBase } from '../../asset/assets/texture-base'; -import { legacyCC } from '../../core/global-exports'; import { ImageAsset, ImageSource } from '../../asset/assets/image-asset'; import { Texture2D } from '../../asset/assets/texture-2d'; -import { errorID, warnID } from '../../core/platform/debug'; import { dynamicAtlasManager } from '../utils/dynamic-atlas/atlas-manager'; -import { js } from '../../core/utils/js'; import { Mesh } from '../../3d/assets/mesh'; import { createMesh } from '../../3d/misc'; import { Attribute, AttributeName, Format, PrimitiveMode } from '../../gfx'; @@ -1586,4 +1583,4 @@ export class SpriteFrame extends Asset { } } -legacyCC.SpriteFrame = SpriteFrame; +cclegacy.SpriteFrame = SpriteFrame; diff --git a/cocos/2d/assets/ttf-font.ts b/cocos/2d/assets/ttf-font.ts index 6e1c7ad23ee..1c21a3da4db 100644 --- a/cocos/2d/assets/ttf-font.ts +++ b/cocos/2d/assets/ttf-font.ts @@ -25,9 +25,8 @@ */ import { ccclass, string, override, serializable } from 'cc.decorator'; -import { extname } from '../../core/utils/path'; +import { path, cclegacy } from '../../core'; import { Font } from './font'; -import { legacyCC } from '../../core/global-exports'; /** * @en Class for TTFFont asset. @@ -58,7 +57,7 @@ export class TTFFont extends Font { */ @override get _nativeDep () { - return { uuid: this._uuid, __nativeName__: this._native, ext: extname(this._native), __isNative__: true }; + return { uuid: this._uuid, __nativeName__: this._native, ext: path.extname(this._native), __isNative__: true }; } public initDefault (uuid?: string) { @@ -67,4 +66,4 @@ export class TTFFont extends Font { } } -legacyCC.TTFFont = TTFFont; +cclegacy.TTFFont = TTFFont; diff --git a/cocos/2d/components/deprecated.ts b/cocos/2d/components/deprecated.ts index 037a4e834c7..873ac16b387 100644 --- a/cocos/2d/components/deprecated.ts +++ b/cocos/2d/components/deprecated.ts @@ -32,30 +32,28 @@ import { UIMeshRenderer } from './ui-mesh-renderer'; import { Graphics } from './graphics'; import { UIStaticBatch } from './ui-static-batch'; import { UIOpacity } from './ui-opacity'; -import { js } from '../../core/utils/js'; -import { legacyCC } from '../../core/global-exports'; -import { replaceProperty } from '../../core/utils'; +import { js, cclegacy, replaceProperty } from '../../core'; /** * Alias of [[Mask]] * @deprecated Since v1.2 */ export { Mask as MaskComponent }; -legacyCC.MaskComponent = Mask; +cclegacy.MaskComponent = Mask; js.setClassAlias(Mask, 'cc.MaskComponent'); /** * Alias of [[Label]] * @deprecated Since v1.2 */ export { Label as LabelComponent }; -legacyCC.LabelComponent = Label; +cclegacy.LabelComponent = Label; js.setClassAlias(Label, 'cc.LabelComponent'); /** * Alias of [[LabelOutline]] * @deprecated Since v1.2 */ export { LabelOutline as LabelOutlineComponent }; -legacyCC.LabelOutlineComponent = LabelOutline; +cclegacy.LabelOutlineComponent = LabelOutline; js.setClassAlias(LabelOutline, 'cc.LabelOutlineComponent'); /** @@ -63,28 +61,28 @@ js.setClassAlias(LabelOutline, 'cc.LabelOutlineComponent'); * @deprecated Since v1.2 */ export { RichText as RichTextComponent }; -legacyCC.RichTextComponent = RichText; +cclegacy.RichTextComponent = RichText; js.setClassAlias(RichText, 'cc.RichTextComponent'); /** * Alias of [[Sprite]] * @deprecated Since v1.2 */ export { Sprite as SpriteComponent }; -legacyCC.SpriteComponent = Sprite; +cclegacy.SpriteComponent = Sprite; js.setClassAlias(Sprite, 'cc.SpriteComponent'); /** * Alias of [[UIMeshRenderer]] * @deprecated Since v1.2 */ export { UIMeshRenderer as UIModelComponent }; -legacyCC.UIModelComponent = UIMeshRenderer; +cclegacy.UIModelComponent = UIMeshRenderer; js.setClassAlias(UIMeshRenderer, 'cc.UIModelComponent'); /** * Alias of [[Graphics]] * @deprecated Since v1.2 */ export { Graphics as GraphicsComponent }; -legacyCC.GraphicsComponent = Graphics; +cclegacy.GraphicsComponent = Graphics; js.setClassAlias(Graphics, 'cc.GraphicsComponent'); /** * Alias of [[UIStaticBatch]] diff --git a/cocos/2d/components/graphics.ts b/cocos/2d/components/graphics.ts index 7b91f87187a..5cc61b74f25 100644 --- a/cocos/2d/components/graphics.ts +++ b/cocos/2d/components/graphics.ts @@ -29,7 +29,7 @@ import { JSB } from 'internal:constants'; import { builtinResMgr } from '../../asset/asset-manager'; import { InstanceMaterialType, UIRenderer } from '../framework/ui-renderer'; import { director } from '../../game/director'; -import { Color } from '../../core/math'; +import { Color, warnID, cclegacy } from '../../core'; import { scene } from '../../render-scene'; import { IAssembler } from '../renderer/base'; import { IBatcher } from '../renderer/i-batcher'; @@ -38,8 +38,6 @@ import { Impl } from '../assembler/graphics/webgl/impl'; import { RenderingSubMesh } from '../../asset/assets'; import { Format, PrimitiveMode, Attribute, Device, BufferUsageBit, BufferInfo, MemoryUsageBit, deviceManager } from '../../gfx'; import { vfmtPosColor, getAttributeStride, getComponentPerVertex } from '../renderer/vertex-format'; -import { legacyCC } from '../../core/global-exports'; -import { warnID } from '../../core/platform/debug'; import { NativeUIModelProxy } from '../renderer/native-2d'; import { RenderEntity, RenderEntityType } from '../renderer/render-entity'; @@ -755,4 +753,4 @@ export class Graphics extends UIRenderer { } } -legacyCC.Graphics = Graphics; +cclegacy.Graphics = Graphics; diff --git a/cocos/2d/components/label-outline.ts b/cocos/2d/components/label-outline.ts index 48f3e448096..accffb34ab5 100644 --- a/cocos/2d/components/label-outline.ts +++ b/cocos/2d/components/label-outline.ts @@ -26,9 +26,8 @@ import { ccclass, help, executionOrder, menu, tooltip, requireComponent, executeInEditMode, serializable } from 'cc.decorator'; import { Component } from '../../scene-graph/component'; -import { Color } from '../../core/math'; +import { Color, cclegacy } from '../../core'; import { Label } from './label'; -import { legacyCC } from '../../core/global-exports'; /** * @en @@ -129,4 +128,4 @@ export class LabelOutline extends Component { } } -legacyCC.LabelOutline = LabelOutline; +cclegacy.LabelOutline = LabelOutline; diff --git a/cocos/2d/components/label-shadow.ts b/cocos/2d/components/label-shadow.ts index f8dba9663cd..fbf7b016225 100644 --- a/cocos/2d/components/label-shadow.ts +++ b/cocos/2d/components/label-shadow.ts @@ -26,7 +26,7 @@ import { ccclass, help, executionOrder, menu, tooltip, requireComponent, executeInEditMode, serializable } from 'cc.decorator'; import { Component } from '../../scene-graph/component'; -import { Color, Vec2 } from '../../core/math'; +import { Color, Vec2 } from '../../core'; import { Label } from './label'; /** diff --git a/cocos/2d/components/label.ts b/cocos/2d/components/label.ts index a578451a0e9..42d79ebe953 100644 --- a/cocos/2d/components/label.ts +++ b/cocos/2d/components/label.ts @@ -29,16 +29,14 @@ import { BYTEDANCE, EDITOR, JSB } from 'internal:constants'; import { minigame } from 'pal/minigame'; import { BitmapFont, Font, SpriteFrame } from '../assets'; import { ImageAsset, Texture2D } from '../../asset/assets'; -import { ccenum } from '../../core/value-types/enum'; +import { ccenum, cclegacy, Color } from '../../core'; import { IBatcher } from '../renderer/i-batcher'; import { FontAtlas } from '../assets/bitmap-font'; import { CanvasPool, ISharedLabelData, LetterRenderTexture } from '../assembler/label/font-utils'; import { InstanceMaterialType, UIRenderer } from '../framework/ui-renderer'; import { TextureBase } from '../../asset/assets/texture-base'; import { PixelFormat } from '../../asset/assets/asset-enum'; -import { legacyCC } from '../../core/global-exports'; import { BlendFactor } from '../../gfx'; -import { Color } from '../../core'; const tempColor = Color.WHITE.clone(); /** @@ -887,4 +885,4 @@ export class Label extends UIRenderer { } } -legacyCC.Label = Label; +cclegacy.Label = Label; diff --git a/cocos/2d/components/mask.ts b/cocos/2d/components/mask.ts index f7265c3f172..42be488fe87 100644 --- a/cocos/2d/components/mask.ts +++ b/cocos/2d/components/mask.ts @@ -26,12 +26,9 @@ import { ccclass, help, executionOrder, menu, tooltip, displayOrder, type, visible, serializable, range, slide, executeInEditMode } from 'cc.decorator'; import { JSB } from 'internal:constants'; -import { clamp, Color, Mat4, Vec2, Vec3 } from '../../core/math'; -import { ccenum } from '../../core/value-types/enum'; +import { clamp, Color, Mat4, Vec2, Vec3, warnID, cclegacy, ccenum } from '../../core'; import { Graphics } from './graphics'; import { TransformBit } from '../../scene-graph/node-enum'; -import { warnID } from '../../core'; -import { legacyCC } from '../../core/global-exports'; import { Stage } from '../renderer/stencil-manager'; import { NodeEventProcessor } from '../../scene-graph/node-event-processor'; import { MaskMode } from '../renderer/render-entity'; @@ -670,4 +667,4 @@ export class Mask extends Component { NodeEventProcessor._maskComp = Mask; -legacyCC.Mask = Mask; +cclegacy.Mask = Mask; diff --git a/cocos/2d/components/rich-text.ts b/cocos/2d/components/rich-text.ts index 31d1ea350ef..a02159bc7fd 100644 --- a/cocos/2d/components/rich-text.ts +++ b/cocos/2d/components/rich-text.ts @@ -28,19 +28,16 @@ import { ccclass, executeInEditMode, executionOrder, help, menu, tooltip, multil import { DEBUG, DEV, EDITOR } from 'internal:constants'; import { Font, SpriteAtlas, TTFFont, SpriteFrame } from '../assets'; import { EventTouch } from '../../input/types'; -import { assert, warnID } from '../../core/platform'; +import { assert, warnID, Color, Vec2, CCObject, cclegacy } from '../../core'; +import Pool from '../../core/utils/pool'; import { BASELINE_RATIO, fragmentText, isUnicodeCJK, isUnicodeSpace, getEnglishWordPartAtFirst, getEnglishWordPartAtLast } from '../utils/text-utils'; import { HtmlTextParser, IHtmlTextParserResultObj, IHtmlTextParserStack } from '../utils/html-text-parser'; -import Pool from '../../core/utils/pool'; -import { Color, Vec2 } from '../../core/math'; import { Node } from '../../scene-graph'; import { CacheMode, HorizontalTextAlignment, Label, VerticalTextAlignment } from './label'; import { LabelOutline } from './label-outline'; import { Sprite } from './sprite'; import { UITransform } from '../framework'; -import { legacyCC } from '../../core/global-exports'; import { Component } from '../../scene-graph/component'; -import { CCObject } from '../../core'; import { NodeEventType } from '../../scene-graph/node-event'; const _htmlTextParser = new HtmlTextParser(); @@ -54,7 +51,7 @@ const labelPool = new Pool((seg: ISegment) => { if (DEV) { assert(!seg.node.parent, 'Recycling node\'s parent should be null!'); } - if (!legacyCC.isValid(seg.node)) { + if (!cclegacy.isValid(seg.node)) { return false; } else { const outline = seg.node.getComponent(LabelOutline); @@ -69,7 +66,7 @@ const imagePool = new Pool((seg: ISegment) => { if (DEV) { assert(!seg.node.parent, 'Recycling node\'s parent should be null!'); } - return legacyCC.isValid(seg.node) as boolean; + return cclegacy.isValid(seg.node) as boolean; }, 10); // @@ -1284,4 +1281,4 @@ export class RichText extends Component { } } -legacyCC.RichText = RichText; +cclegacy.RichText = RichText; diff --git a/cocos/2d/components/sprite.ts b/cocos/2d/components/sprite.ts index a0f790d7abf..d07ab4faa4f 100644 --- a/cocos/2d/components/sprite.ts +++ b/cocos/2d/components/sprite.ts @@ -28,16 +28,13 @@ import { ccclass, help, executionOrder, menu, tooltip, displayOrder, type, range import { BUILD, EDITOR } from 'internal:constants'; import { SpriteAtlas } from '../assets/sprite-atlas'; import { SpriteFrame } from '../assets/sprite-frame'; -import { Vec2 } from '../../core/math'; -import { ccenum } from '../../core/value-types/enum'; -import { clamp } from '../../core/math/utils'; +import { Vec2, cclegacy, ccenum, clamp } from '../../core'; import { IBatcher } from '../renderer/i-batcher'; import { UIRenderer, InstanceMaterialType } from '../framework/ui-renderer'; import { PixelFormat } from '../../asset/assets/asset-enum'; import { TextureBase } from '../../asset/assets/texture-base'; import { Material, RenderTexture } from '../../asset/assets'; import { NodeEventType } from '../../scene-graph/node-event'; -import { legacyCC } from '../../core/global-exports'; /** * @en @@ -688,4 +685,4 @@ export class Sprite extends UIRenderer { } } -legacyCC.Sprite = Sprite; +cclegacy.Sprite = Sprite; diff --git a/cocos/2d/components/ui-mesh-renderer.ts b/cocos/2d/components/ui-mesh-renderer.ts index 515500d4ba0..d723cf76274 100644 --- a/cocos/2d/components/ui-mesh-renderer.ts +++ b/cocos/2d/components/ui-mesh-renderer.ts @@ -31,12 +31,11 @@ import { RenderPriority } from '../../rendering/define'; import { IBatcher } from '../renderer/i-batcher'; import { Stage } from '../renderer/stencil-manager'; import { Component } from '../../scene-graph/component'; -import { legacyCC } from '../../core/global-exports'; import { NativeUIModelProxy } from '../renderer/native-2d'; import { uiRendererManager } from '../framework/ui-renderer-manager'; import { RenderEntity, RenderEntityType } from '../renderer/render-entity'; import { MeshRenderData, RenderData } from '../renderer/render-data'; -import { assert } from '../../core'; +import { assert, cclegacy } from '../../core'; import { RenderDrawInfoType } from '../renderer/render-draw-info'; /** @@ -257,4 +256,4 @@ export class UIMeshRenderer extends Component { } } -legacyCC.UIMeshRenderer = UIMeshRenderer; +cclegacy.UIMeshRenderer = UIMeshRenderer; diff --git a/cocos/2d/components/ui-opacity.ts b/cocos/2d/components/ui-opacity.ts index a6d75ebe9fa..d98fcff3d26 100644 --- a/cocos/2d/components/ui-opacity.ts +++ b/cocos/2d/components/ui-opacity.ts @@ -26,7 +26,7 @@ import { ccclass, disallowMultiple, editable, executeInEditMode, executionOrder, help, menu, serializable, tooltip } from 'cc.decorator'; import { JSB } from 'internal:constants'; import { Component } from '../../scene-graph/component'; -import { clampf } from '../../core/utils/misc'; +import { misc } from '../../core'; import { UIRenderer } from '../framework/ui-renderer'; import { Node } from '../../scene-graph'; @@ -63,7 +63,7 @@ export class UIOpacity extends Component { if (this._opacity === value) { return; } - value = clampf(value, 0, 255); + value = misc.clampf(value, 0, 255); this._opacity = value; this.node._uiProps.localOpacity = value / 255; diff --git a/cocos/2d/event/pointer-event-dispatcher.ts b/cocos/2d/event/pointer-event-dispatcher.ts index 0616b9cdbd8..5f2ec269f38 100644 --- a/cocos/2d/event/pointer-event-dispatcher.ts +++ b/cocos/2d/event/pointer-event-dispatcher.ts @@ -27,7 +27,7 @@ import { Node } from '../../scene-graph/node'; import { Input, input } from '../../input'; import { Event, EventMouse, EventTouch } from '../../input/types'; import { DispatcherEventType, NodeEventProcessor } from '../../scene-graph/node-event-processor'; -import { js } from '../../core/utils/js'; +import { js } from '../../core'; import { InputEventType } from '../../input/types/event-enum'; import { EventDispatcherPriority, IEventDispatcher } from '../../input/input'; diff --git a/cocos/2d/framework/canvas.ts b/cocos/2d/framework/canvas.ts index 073702881b6..c30e6c179dc 100644 --- a/cocos/2d/framework/canvas.ts +++ b/cocos/2d/framework/canvas.ts @@ -29,13 +29,9 @@ import { ccclass, help, disallowMultiple, executeInEditMode, import { EDITOR } from 'internal:constants'; import { Camera } from '../../misc/camera-component'; import { Widget } from '../../ui/widget'; -import { Vec3 } from '../../core/math'; +import { Vec3, screen, Enum, cclegacy, visibleRect } from '../../core'; import { view } from '../../ui/view'; -import { legacyCC } from '../../core/global-exports'; -import { Enum } from '../../core/value-types/enum'; -import visibleRect from '../../core/platform/visible-rect'; import { RenderRoot2D } from './render-root-2d'; -import { screen } from '../../core'; import { NodeEventType } from '../../scene-graph/node-event'; const _worldPos = new Vec3(); @@ -177,12 +173,12 @@ export class Canvas extends RenderRoot2D { if (EDITOR) { // Constantly align canvas node in edit mode - legacyCC.director.on(legacyCC.Director.EVENT_AFTER_UPDATE, this._fitDesignResolution!, this); + cclegacy.director.on(cclegacy.Director.EVENT_AFTER_UPDATE, this._fitDesignResolution!, this); // In Editor can not edit these attrs. // (Position in Node, contentSize in uiTransform) // (anchor in uiTransform, but it can edit, this is different from cocos creator) - this._objFlags |= legacyCC.Object.Flags.IsPositionLocked | legacyCC.Object.Flags.IsSizeLocked | legacyCC.Object.Flags.IsAnchorLocked; + this._objFlags |= cclegacy.Object.Flags.IsPositionLocked | cclegacy.Object.Flags.IsSizeLocked | cclegacy.Object.Flags.IsAnchorLocked; } else { // In Editor dont need resized camera when scene window resize this.node.on(NodeEventType.TRANSFORM_CHANGED, this._thisOnCameraResized); @@ -207,7 +203,7 @@ export class Canvas extends RenderRoot2D { super.onDestroy(); if (EDITOR) { - legacyCC.director.off(legacyCC.Director.EVENT_AFTER_UPDATE, this._fitDesignResolution!, this); + cclegacy.director.off(cclegacy.Director.EVENT_AFTER_UPDATE, this._fitDesignResolution!, this); } else { this.node.off(NodeEventType.TRANSFORM_CHANGED, this._thisOnCameraResized); } @@ -238,4 +234,4 @@ export class Canvas extends RenderRoot2D { } } -legacyCC.Canvas = Canvas; +cclegacy.Canvas = Canvas; diff --git a/cocos/2d/framework/deprecated-1.2.0.ts b/cocos/2d/framework/deprecated-1.2.0.ts index fa046b78937..ba782c06295 100644 --- a/cocos/2d/framework/deprecated-1.2.0.ts +++ b/cocos/2d/framework/deprecated-1.2.0.ts @@ -23,7 +23,7 @@ THE SOFTWARE. */ -import { deprecateModuleExportedName } from '../../core/utils/x-deprecated'; +import { deprecateModuleExportedName } from '../../core'; deprecateModuleExportedName({ RenderComponent: { diff --git a/cocos/2d/framework/deprecated-3.0.0.ts b/cocos/2d/framework/deprecated-3.0.0.ts index 33415e7524c..cce4aa36194 100644 --- a/cocos/2d/framework/deprecated-3.0.0.ts +++ b/cocos/2d/framework/deprecated-3.0.0.ts @@ -23,7 +23,7 @@ THE SOFTWARE. */ -import { deprecateModuleExportedName } from '../../core/utils/x-deprecated'; +import { deprecateModuleExportedName } from '../../core'; deprecateModuleExportedName({ UIRenderable: { diff --git a/cocos/2d/framework/deprecated-3.6.0.ts b/cocos/2d/framework/deprecated-3.6.0.ts index 16a6220d62f..3ec1e9dc0ee 100644 --- a/cocos/2d/framework/deprecated-3.6.0.ts +++ b/cocos/2d/framework/deprecated-3.6.0.ts @@ -23,7 +23,7 @@ THE SOFTWARE. */ -import { deprecateModuleExportedName } from '../../core/utils/x-deprecated'; +import { deprecateModuleExportedName } from '../../core'; deprecateModuleExportedName({ Renderable2D: { diff --git a/cocos/2d/framework/deprecated.ts b/cocos/2d/framework/deprecated.ts index 69223363d98..9ee35441710 100644 --- a/cocos/2d/framework/deprecated.ts +++ b/cocos/2d/framework/deprecated.ts @@ -24,14 +24,11 @@ */ /* eslint-disable @typescript-eslint/no-unsafe-return */ -import { markAsWarning, removeProperty, replaceProperty } from '../../core/utils'; +import { markAsWarning, removeProperty, replaceProperty, js, Color, cclegacy } from '../../core'; import { UIComponent } from './ui-component'; import { UITransform } from './ui-transform'; import { UIRenderer } from './ui-renderer'; import { Canvas } from './canvas'; -import { js } from '../../core/utils/js'; -import { legacyCC } from '../../core/global-exports'; -import { Color } from '../../core/math/color'; removeProperty(UIComponent.prototype, 'UIComponent', [ { @@ -130,7 +127,7 @@ markAsWarning(UITransform.prototype, 'UITransform.prototype', [ * @deprecated Since v1.2 */ export { UITransform as UITransformComponent }; -legacyCC.UITransformComponent = UITransform; +cclegacy.UITransformComponent = UITransform; js.setClassAlias(UITransform, 'cc.UITransformComponent'); /** @@ -150,7 +147,7 @@ js.setClassAlias(UIRenderer, 'cc.RenderComponent'); * @deprecated Since v1.2 */ export { Canvas as CanvasComponent }; -legacyCC.CanvasComponent = Canvas; +cclegacy.CanvasComponent = Canvas; js.setClassAlias(Canvas, 'cc.CanvasComponent'); /** @@ -158,5 +155,5 @@ js.setClassAlias(Canvas, 'cc.CanvasComponent'); * @deprecated Since v3.6 */ export { UIRenderer as Renderable2D }; -legacyCC.internal.Renderable2D = UIRenderer; +cclegacy.internal.Renderable2D = UIRenderer; js.setClassAlias(UIRenderer, 'cc.Renderable2D'); diff --git a/cocos/2d/framework/render-root-2d.ts b/cocos/2d/framework/render-root-2d.ts index 73322c6ee75..8a561714691 100644 --- a/cocos/2d/framework/render-root-2d.ts +++ b/cocos/2d/framework/render-root-2d.ts @@ -26,7 +26,7 @@ import { ccclass, disallowMultiple, executeInEditMode, executionOrder, menu, requireComponent } from 'cc.decorator'; import { Component } from '../../scene-graph/component'; -import { legacyCC } from '../../core/global-exports'; +import { cclegacy } from '../../core'; import { UITransform } from './ui-transform'; @ccclass('cc.RenderRoot2D') @@ -37,14 +37,14 @@ import { UITransform } from './ui-transform'; @executeInEditMode export class RenderRoot2D extends Component { public onEnable () { - legacyCC.director.root!.batcher2D.addScreen(this); + cclegacy.director.root!.batcher2D.addScreen(this); } public onDisable () { - legacyCC.director.root!.batcher2D.removeScreen(this); + cclegacy.director.root!.batcher2D.removeScreen(this); } public onDestroy () { - legacyCC.director.root!.batcher2D.removeScreen(this); + cclegacy.director.root!.batcher2D.removeScreen(this); } } diff --git a/cocos/2d/framework/sprite-renderer.ts b/cocos/2d/framework/sprite-renderer.ts index f2982c1ec7e..a936a1b503e 100644 --- a/cocos/2d/framework/sprite-renderer.ts +++ b/cocos/2d/framework/sprite-renderer.ts @@ -25,8 +25,7 @@ import { ccclass, executeInEditMode, executionOrder, help, menu, serializable, type, visible } from 'cc.decorator'; import { builtinResMgr } from '../../asset/asset-manager'; import { Material } from '../../asset/assets'; -import { Color, Vec2 } from '../../core'; -import { legacyCC } from '../../core/global-exports'; +import { Color, Vec2, cclegacy } from '../../core'; import { ModelLocalBindings } from '../../rendering/define'; import { Model } from '../../render-scene/scene'; import { Root } from '../../root'; @@ -134,7 +133,7 @@ export class SpriteRenderer extends ModelRenderer { public onDestroy () { if (this._model) { - legacyCC.director.root.destroyModel(this._model); + cclegacy.director.root.destroyModel(this._model); this._model = null; this._models.length = 0; } @@ -163,7 +162,7 @@ export class SpriteRenderer extends ModelRenderer { } protected _createModel () { - const model = this._model = (legacyCC.director.root as Root).createModel(Model); + const model = this._model = (cclegacy.director.root as Root).createModel(Model); model.visFlags = this.visibility; model.node = model.transform = this.node; this._models.length = 0; diff --git a/cocos/2d/framework/ui-renderer-manager.ts b/cocos/2d/framework/ui-renderer-manager.ts index 3d598477d8c..351298c9e98 100644 --- a/cocos/2d/framework/ui-renderer-manager.ts +++ b/cocos/2d/framework/ui-renderer-manager.ts @@ -1,6 +1,5 @@ import { DEBUG } from 'internal:constants'; -import { assert } from '../../core/platform/debug'; -import { js } from '../../core/utils/js'; +import { assert, js } from '../../core'; import { UIMeshRenderer } from '../components'; import { UIRenderer } from './ui-renderer'; diff --git a/cocos/2d/framework/ui-renderer.ts b/cocos/2d/framework/ui-renderer.ts index bbf736601a2..c6788f0f474 100644 --- a/cocos/2d/framework/ui-renderer.ts +++ b/cocos/2d/framework/ui-renderer.ts @@ -28,8 +28,7 @@ import { ccclass, executeInEditMode, requireComponent, tooltip, type, displayOrder, serializable, override, visible, displayName, disallowAnimation, } from 'cc.decorator'; -import { Color } from '../../core/math'; -import { ccenum } from '../../core/value-types/enum'; +import { Color, assert, ccenum, cclegacy } from '../../core'; import { builtinResMgr } from '../../asset/asset-manager'; import { Material } from '../../asset/assets'; import { BlendFactor } from '../../gfx'; @@ -40,12 +39,10 @@ import { Node } from '../../scene-graph'; import { TransformBit } from '../../scene-graph/node-enum'; import { UITransform } from './ui-transform'; import { Stage } from '../renderer/stencil-manager'; -import { legacyCC } from '../../core/global-exports'; import { NodeEventType } from '../../scene-graph/node-event'; import { Renderer } from '../../misc/renderer'; import { RenderEntity, RenderEntityType } from '../renderer/render-entity'; import { uiRendererManager } from './ui-renderer-manager'; -import { assert } from '../../core'; import { RenderDrawInfoType } from '../renderer/render-draw-info'; import { director } from '../../game'; @@ -574,4 +571,4 @@ export class UIRenderer extends Renderer { } } -legacyCC.internal.UIRenderer = UIRenderer; +cclegacy.internal.UIRenderer = UIRenderer; diff --git a/cocos/2d/framework/ui-transform.ts b/cocos/2d/framework/ui-transform.ts index 3312438b998..18650a5aaca 100644 --- a/cocos/2d/framework/ui-transform.ts +++ b/cocos/2d/framework/ui-transform.ts @@ -26,13 +26,9 @@ import { ccclass, help, executeInEditMode, executionOrder, menu, tooltip, displayOrder, serializable, disallowMultiple } from 'cc.decorator'; import { EDITOR } from 'internal:constants'; import { Component, Node } from '../../scene-graph'; -import { Mat4, Rect, Size, Vec2, Vec3 } from '../../core/math'; -import { AABB } from '../../core/geometry'; +import { Mat4, Rect, Size, Vec2, Vec3, geometry, warnID, visibleRect, approx, EPSILON } from '../../core'; import { Director, director } from '../../game/director'; -import { warnID } from '../../core/platform/debug'; import { NodeEventType } from '../../scene-graph/node-event'; -import visibleRect from '../../core/platform/visible-rect'; -import { approx, EPSILON } from '../../core/math/utils'; import { IMask } from '../../scene-graph/node-event-processor'; import { Mask } from '../components/mask'; @@ -681,7 +677,7 @@ export class UITransform extends Component { * @zh * 计算出此 UI_2D 节点在世界空间下的 aabb 包围盒 */ - public getComputeAABB (out?: AABB) { + public getComputeAABB (out?: geometry.AABB) { const width = this._contentSize.width; const height = this._contentSize.height; _rect.set( @@ -698,10 +694,10 @@ export class UITransform extends Component { const h = _rect.height / 2; const l = 0.001; if (out != null) { - AABB.set(out, px, py, pz, w, h, l); + geometry.AABB.set(out, px, py, pz, w, h, l); return out; } else { - return new AABB(px, py, pz, w, h, l); + return new geometry.AABB(px, py, pz, w, h, l); } } diff --git a/cocos/2d/index.ts b/cocos/2d/index.ts index 4a43401e4a1..34575073530 100644 --- a/cocos/2d/index.ts +++ b/cocos/2d/index.ts @@ -33,7 +33,7 @@ import { import { RenderData, MeshRenderData } from './renderer/render-data'; import { MeshBuffer } from './renderer/mesh-buffer'; import { StencilManager } from './renderer/stencil-manager'; -import { legacyCC } from '../core/global-exports'; +import { cclegacy } from '../core'; import './event'; import './renderer/batcher-2d'; @@ -56,7 +56,7 @@ export { earcut, }; -legacyCC.UI = { +cclegacy.UI = { MeshBuffer, spriteAssembler, graphicsAssembler, diff --git a/cocos/2d/renderer/batcher-2d.ts b/cocos/2d/renderer/batcher-2d.ts index 4b8bbcd99e7..dc317a30663 100644 --- a/cocos/2d/renderer/batcher-2d.ts +++ b/cocos/2d/renderer/batcher-2d.ts @@ -30,17 +30,14 @@ import { Material } from '../../asset/assets/material'; import { RenderRoot2D, UIRenderer } from '../framework'; import { Texture, Device, Attribute, Sampler, DescriptorSetInfo, Buffer, BufferInfo, BufferUsageBit, MemoryUsageBit, DescriptorSet, InputAssembler, deviceManager, PrimitiveMode } from '../../gfx'; -import { Pool } from '../../core/memop'; -import { CachedArray } from '../../core/memop/cached-array'; +import { CachedArray, Pool, Mat4, cclegacy } from '../../core'; import { Root } from '../../root'; import { Node } from '../../scene-graph'; import { Stage, StencilManager } from './stencil-manager'; import { DrawBatch2D } from './draw-batch'; -import { legacyCC } from '../../core/global-exports'; import { ModelLocalBindings, UBOLocal } from '../../rendering/define'; import { SpriteFrame } from '../assets'; import { TextureBase } from '../../asset/assets/texture-base'; -import { Mat4 } from '../../core/math'; import { IBatcher } from './i-batcher'; import { StaticVBAccessor } from './static-vb-accessor'; import { assertIsTrue } from '../../core/data/utils/asserts'; @@ -163,7 +160,7 @@ export class Batcher2D implements IBatcher { StencilManager.sharedManager!.destroy(); if (this._maskClearModel && this._maskModelMesh) { - legacyCC.director.root.destroyModel(this._maskClearModel); + cclegacy.director.root.destroyModel(this._maskClearModel); this._maskModelMesh.destroy(); } if (this._maskClearMtl) { @@ -556,7 +553,7 @@ export class Batcher2D implements IBatcher { dssHash = StencilManager.sharedManager!.getStencilHash(comp.stencilStage); } - const stamp = legacyCC.director.getTotalFrames(); + const stamp = cclegacy.director.getTotalFrames(); if (model) { model.updateTransform(stamp); model.updateUBOs(stamp); @@ -860,7 +857,7 @@ export class Batcher2D implements IBatcher { if (!this._maskClearModel) { this._maskClearMtl = builtinResMgr.get('default-clear-stencil'); - this._maskClearModel = legacyCC.director.root.createModel(scene.Model); + this._maskClearModel = cclegacy.director.root.createModel(scene.Model); const stride = getAttributeStride(vfmt); const gfxDevice: Device = deviceManager.gfxDevice; const vertexBuffer = gfxDevice.createBuffer(new BufferInfo( @@ -906,7 +903,7 @@ export class Batcher2D implements IBatcher { } const model = this._maskClearModel!; - const stamp = legacyCC.director.getTotalFrames(); + const stamp = cclegacy.director.getTotalFrames(); if (model) { model.updateTransform(stamp); model.updateUBOs(stamp); @@ -1052,7 +1049,7 @@ class DescriptorSetCache { } public getDescriptorSet (batch: DrawBatch2D): DescriptorSet { - const root = legacyCC.director.root; + const root = cclegacy.director.root; let hash; if (batch.useLocalData) { const caches = this._localDescriptorSetCache; @@ -1131,4 +1128,4 @@ class DescriptorSetCache { } } -legacyCC.internal.Batcher2D = Batcher2D; +cclegacy.internal.Batcher2D = Batcher2D; diff --git a/cocos/2d/renderer/deprecated.ts b/cocos/2d/renderer/deprecated.ts index fb79fba44a6..b793c64f2b2 100644 --- a/cocos/2d/renderer/deprecated.ts +++ b/cocos/2d/renderer/deprecated.ts @@ -26,10 +26,9 @@ import * as VertexFormat from './vertex-format'; import { Batcher2D } from './batcher-2d'; import { DrawBatch2D } from './draw-batch'; -import { markAsWarning, replaceProperty, removeProperty } from '../../core/utils/x-deprecated'; +import { markAsWarning, replaceProperty, removeProperty, warnID } from '../../core'; import { MeshBuffer } from './mesh-buffer'; import { MeshRenderData } from './render-data'; -import { warnID } from '../../core'; export { VertexFormat as UIVertexFormat }; diff --git a/cocos/2d/renderer/draw-batch.ts b/cocos/2d/renderer/draw-batch.ts index c497ff548bb..b2af7c42f00 100644 --- a/cocos/2d/renderer/draw-batch.ts +++ b/cocos/2d/renderer/draw-batch.ts @@ -28,7 +28,7 @@ import { Texture, Sampler, InputAssembler, DescriptorSet, Shader } from '../../g import { Node } from '../../scene-graph'; import { Model } from '../../render-scene/scene/model'; import { Layers } from '../../scene-graph/layers'; -import { legacyCC } from '../../core/global-exports'; +import { cclegacy } from '../../core'; import { Pass } from '../../render-scene/core/pass'; import { IBatcher } from './i-batcher'; @@ -115,7 +115,7 @@ export class DrawBatch2D { for (let i = 0; i < passes.length; i++) { if (!this._passes[i]) { - this._passes[i] = new Pass(legacyCC.director.root); + this._passes[i] = new Pass(cclegacy.director.root); } const mtlPass = passes[i]; const passInUse = this._passes[i]; diff --git a/cocos/2d/renderer/linear-buffer-accessor.ts b/cocos/2d/renderer/linear-buffer-accessor.ts index 8b26bd871f3..ba8e5a2bcfe 100644 --- a/cocos/2d/renderer/linear-buffer-accessor.ts +++ b/cocos/2d/renderer/linear-buffer-accessor.ts @@ -23,12 +23,11 @@ THE SOFTWARE. */ -import { InputAssembler, Device, Attribute } from '../../core/gfx'; +import { InputAssembler, Device, Attribute } from '../../gfx'; import { MeshBuffer } from './mesh-buffer'; import { BufferAccessor } from './buffer-accessor'; -import { assertID } from '../../core/platform/debug'; +import { assertID, macro } from '../../core'; import { assertIsNonNullable } from '../../core/data/utils/asserts'; -import { macro } from '../../core/platform/macro'; export class LinearBufferAccessor extends BufferAccessor { public static IB_SCALE = 4; // ib size scale based on vertex count diff --git a/cocos/2d/renderer/mesh-buffer.ts b/cocos/2d/renderer/mesh-buffer.ts index c9f76463bf8..a1d8a8ace1e 100644 --- a/cocos/2d/renderer/mesh-buffer.ts +++ b/cocos/2d/renderer/mesh-buffer.ts @@ -26,8 +26,7 @@ import { JSB } from 'internal:constants'; import { Device, BufferUsageBit, MemoryUsageBit, Attribute, Buffer, BufferInfo, InputAssembler, InputAssemblerInfo } from '../../gfx'; import { getAttributeStride } from './vertex-format'; -import { getError, warnID } from '../../core/platform/debug'; -import { sys } from '../../core'; +import { sys, getError, warnID } from '../../core'; import { assertIsTrue } from '../../core/data/utils/asserts'; import { NativeUIMeshBuffer } from './native-2d'; diff --git a/cocos/2d/renderer/render-data.ts b/cocos/2d/renderer/render-data.ts index c6d80ddfd19..0d995e169c2 100644 --- a/cocos/2d/renderer/render-data.ts +++ b/cocos/2d/renderer/render-data.ts @@ -27,9 +27,7 @@ import { DEBUG, JSB } from 'internal:constants'; import { director } from '../../game/director'; import { Material } from '../../asset/assets/material'; import { TextureBase } from '../../asset/assets/texture-base'; -import { Color } from '../../core/math'; -import { Pool, RecyclePool } from '../../core/memop'; -import { murmurhash2_32_gc } from '../../core/algorithm/murmurhash2_gc'; +import { Color, Pool, RecyclePool, murmurhash2_32_gc, assert } from '../../core'; import { SpriteFrame } from '../assets/sprite-frame'; import { UIRenderer } from '../framework/ui-renderer'; import { StaticVBAccessor, StaticVBChunk } from './static-vb-accessor'; @@ -39,7 +37,6 @@ import { assertIsTrue } from '../../core/data/utils/asserts'; import { RenderDrawInfo, RenderDrawInfoType } from './render-draw-info'; import { Batcher2D } from './batcher-2d'; import { RenderEntity, RenderEntityType } from './render-entity'; -import { assert } from '../../core'; /** * @deprecated since v3.5.0, this is an engine private interface that will be removed in the future. diff --git a/cocos/2d/renderer/static-vb-accessor.ts b/cocos/2d/renderer/static-vb-accessor.ts index bbafd08762f..79730c2ada9 100644 --- a/cocos/2d/renderer/static-vb-accessor.ts +++ b/cocos/2d/renderer/static-vb-accessor.ts @@ -27,10 +27,8 @@ import { JSB } from 'internal:constants'; import { Device, Attribute } from '../../gfx'; import { MeshBuffer } from './mesh-buffer'; import { BufferAccessor } from './buffer-accessor'; -import { assertID, errorID } from '../../core/platform/debug'; +import { assertID, errorID, Pool, macro } from '../../core'; import { assertIsTrue } from '../../core/data/utils/asserts'; -import { Pool } from '../../core/memop/pool'; -import { macro } from '../../core/platform/macro'; import { director } from '../../game'; interface IFreeEntry { diff --git a/cocos/2d/renderer/vertex-format.ts b/cocos/2d/renderer/vertex-format.ts index de3db5628ae..a2726c335a7 100644 --- a/cocos/2d/renderer/vertex-format.ts +++ b/cocos/2d/renderer/vertex-format.ts @@ -24,7 +24,7 @@ */ import { AttributeName, Format, FormatInfos, Attribute } from '../../gfx'; -import { legacyCC } from '../../core/global-exports'; +import { cclegacy } from '../../core'; /** * @en Vertex format with vector 3 position attribute @@ -129,7 +129,7 @@ export function getAttributeStride (attrs: Attribute[]) { return count; } -legacyCC.internal.vfmtPosUvColor = vfmtPosUvColor; -legacyCC.internal.vfmtPosUvTwoColor = vfmtPosUvTwoColor; -legacyCC.internal.vfmtPosUvColor4B = vfmtPosUvColor4B; -legacyCC.internal.vfmtPosUvTwoColor4B = vfmtPosUvTwoColor4B; +cclegacy.internal.vfmtPosUvColor = vfmtPosUvColor; +cclegacy.internal.vfmtPosUvTwoColor = vfmtPosUvTwoColor; +cclegacy.internal.vfmtPosUvColor4B = vfmtPosUvColor4B; +cclegacy.internal.vfmtPosUvTwoColor4B = vfmtPosUvTwoColor4B; diff --git a/cocos/2d/utils/dynamic-atlas/atlas-manager.ts b/cocos/2d/utils/dynamic-atlas/atlas-manager.ts index dfba21e6575..538e29b7f2c 100644 --- a/cocos/2d/utils/dynamic-atlas/atlas-manager.ts +++ b/cocos/2d/utils/dynamic-atlas/atlas-manager.ts @@ -1,9 +1,6 @@ import { EDITOR } from 'internal:constants'; -import { System } from '../../../core'; +import { System, macro, js, cclegacy } from '../../../core'; import { Filter } from '../../../asset/assets/asset-enum'; -import { legacyCC } from '../../../core/global-exports'; -import { macro } from '../../../core/platform'; -import { js } from '../../../core/utils/js'; import { Atlas } from './atlas'; import { director } from '../../../game'; @@ -35,10 +32,10 @@ export class DynamicAtlasManager extends System { if (value) { this.reset(); - legacyCC.director.on(legacyCC.Director.EVENT_BEFORE_SCENE_LAUNCH, this.beforeSceneLoad, this); + cclegacy.director.on(cclegacy.Director.EVENT_BEFORE_SCENE_LAUNCH, this.beforeSceneLoad, this); } else { this.reset(); - legacyCC.director.off(legacyCC.Director.EVENT_BEFORE_SCENE_LAUNCH, this.beforeSceneLoad, this); + cclegacy.director.off(cclegacy.Director.EVENT_BEFORE_SCENE_LAUNCH, this.beforeSceneLoad, this); } this._enabled = value; @@ -142,7 +139,7 @@ export class DynamicAtlasManager extends System { * @param spriteFrame the sprite frame that will be inserted in the atlas. */ public insertSpriteFrame (spriteFrame) { - if (EDITOR && !legacyCC.GAME_VIEW) return null; + if (EDITOR && !cclegacy.GAME_VIEW) return null; if (!this._enabled || this._atlasIndex === this._maxAtlasCount || !spriteFrame || spriteFrame._original) return null; @@ -241,7 +238,7 @@ export class DynamicAtlasManager extends System { * @param frame the sprite frame that will be packed in the dynamic atlas. */ public packToDynamicAtlas (comp, frame) { - if ((EDITOR && !legacyCC.GAME_VIEW) || !this._enabled) return; + if ((EDITOR && !cclegacy.GAME_VIEW) || !this._enabled) return; if (frame && !frame._original && frame.packable && frame.texture && frame.texture.width > 0 && frame.texture.height > 0) { const packedFrame = this.insertSpriteFrame(frame); @@ -256,4 +253,4 @@ export const dynamicAtlasManager: DynamicAtlasManager = DynamicAtlasManager.inst director.registerSystem('dynamicAtlasManager', dynamicAtlasManager, 0); -legacyCC.internal.dynamicAtlasManager = dynamicAtlasManager; +cclegacy.internal.dynamicAtlasManager = dynamicAtlasManager; diff --git a/cocos/2d/utils/dynamic-atlas/atlas.ts b/cocos/2d/utils/dynamic-atlas/atlas.ts index 06e06be6534..aca7860f6c3 100644 --- a/cocos/2d/utils/dynamic-atlas/atlas.ts +++ b/cocos/2d/utils/dynamic-atlas/atlas.ts @@ -2,7 +2,7 @@ import { PixelFormat } from '../../../asset/assets/asset-enum'; import { ImageAsset } from '../../../asset/assets/image-asset'; import { Texture2D } from '../../../asset/assets/texture-2d'; import { BufferTextureCopy } from '../../../gfx'; -import { legacyCC } from '../../../core/global-exports'; +import { cclegacy } from '../../../core'; import { SpriteFrame } from '../../assets/sprite-frame'; const space = 2; @@ -75,7 +75,7 @@ export class Atlas { return null; } - if (legacyCC.internal.dynamicAtlasManager.textureBleeding) { + if (cclegacy.internal.dynamicAtlasManager.textureBleeding) { // Smaller frame is more likely to be affected by linear filter if (width <= 8 || height <= 8) { this._texture.drawTextureAt(texture.image!, this._x - 1, this._y - 1); diff --git a/cocos/2d/utils/font-loader.ts b/cocos/2d/utils/font-loader.ts index e9e3e891b62..ec96471bc05 100644 --- a/cocos/2d/utils/font-loader.ts +++ b/cocos/2d/utils/font-loader.ts @@ -23,7 +23,7 @@ THE SOFTWARE. */ -import { warnID } from '../../core/platform/debug'; +import { warnID } from '../../core'; import { safeMeasureText } from './text-utils'; import { CompleteCallback, IDownloadParseOptions } from '../../asset/asset-manager/shared'; import downloader from '../../asset/asset-manager/downloader'; diff --git a/cocos/2d/utils/html-text-parser.ts b/cocos/2d/utils/html-text-parser.ts index 237f1b88428..96bb0bb8084 100644 --- a/cocos/2d/utils/html-text-parser.ts +++ b/cocos/2d/utils/html-text-parser.ts @@ -25,7 +25,7 @@ */ import { TEST } from 'internal:constants'; -import { legacyCC } from '../../core/global-exports'; +import { cclegacy } from '../../core'; /** * @deprecated since v3.5.0, this is an engine private interface that will be removed in the future. @@ -431,5 +431,5 @@ export class HtmlTextParser { } if (TEST) { - legacyCC._Test.HtmlTextParser = HtmlTextParser; + cclegacy._Test.HtmlTextParser = HtmlTextParser; } diff --git a/cocos/3d/assets/deprecated.ts b/cocos/3d/assets/deprecated.ts index b570e2fec1b..a87cbf46d62 100644 --- a/cocos/3d/assets/deprecated.ts +++ b/cocos/3d/assets/deprecated.ts @@ -23,7 +23,7 @@ THE SOFTWARE. */ -import { removeProperty, replaceProperty } from '../../core/utils'; +import { removeProperty, replaceProperty } from '../../core'; import { Mesh } from './mesh'; replaceProperty(Mesh.prototype, 'Mesh.prototype', [ diff --git a/cocos/3d/assets/mesh.jsb.ts b/cocos/3d/assets/mesh.jsb.ts index 1d73e394036..3ce19bc1aaf 100644 --- a/cocos/3d/assets/mesh.jsb.ts +++ b/cocos/3d/assets/mesh.jsb.ts @@ -23,8 +23,7 @@ THE SOFTWARE. */ import { ccclass, serializable } from 'cc.decorator'; -import { legacyCC } from '../../core/global-exports'; -import { Vec3 } from '../../core/math'; +import { cclegacy, Vec3 } from '../../core'; declare const jsb: any; @@ -158,7 +157,7 @@ meshAssetProto.onLoaded = function () { originOnLoaded.apply(this); }; -legacyCC.Mesh = jsb.Mesh; +cclegacy.Mesh = jsb.Mesh; // handle meta data, it is generated automatically const MeshProto = Mesh.prototype; diff --git a/cocos/3d/assets/mesh.ts b/cocos/3d/assets/mesh.ts index 402ef0f4209..4faf8f2151b 100644 --- a/cocos/3d/assets/mesh.ts +++ b/cocos/3d/assets/mesh.ts @@ -29,17 +29,13 @@ import { IDynamicGeometry } from '../../primitive/define'; import { assertIsTrue } from '../../core/data/utils/asserts'; import { BufferBlob } from '../misc/buffer-blob'; import { Skeleton } from './skeleton'; -import { AABB } from '../../core/geometry'; -import { legacyCC } from '../../core/global-exports'; +import { geometry, cclegacy, sys, warnID, Mat4, Quat, Vec3 } from '../../core'; import { murmurhash2_32_gc } from '../../core/algorithm/murmurhash2_gc'; -import { sys } from '../../core/platform/sys'; -import { warnID } from '../../core/platform/debug'; import { RenderingSubMesh } from '../../asset/assets'; import { Attribute, Device, Buffer, BufferInfo, AttributeName, BufferUsageBit, Feature, Format, FormatInfos, FormatType, MemoryUsageBit, PrimitiveMode, getTypedArrayConstructor, DrawInfo, FormatInfo, deviceManager, } from '../../gfx'; -import { Mat4, Quat, Vec3 } from '../../core/math'; import { Morph } from './morph'; import { MorphRendering, createMorphRendering } from './morph-rendering'; @@ -153,7 +149,7 @@ export declare namespace Mesh { * @en dynamic submesh bounds * @zh 动态子模型包围盒。 */ - bounds: AABB[]; + bounds: geometry.AABB[]; } /** @@ -344,7 +340,7 @@ export class Mesh extends Asset { private _renderingSubMeshes: RenderingSubMesh[] | null = null; - private _boneSpaceBounds: Map = new Map(); + private _boneSpaceBounds: Map = new Map(); private _jointBufferIndices: number[] | null = null; @@ -510,9 +506,9 @@ export class Mesh extends Asset { * @en update dynamic sub mesh geometry * @zh 更新动态子网格的几何数据 * @param primitiveIndex @en sub mesh index @zh 子网格索引 - * @param geometry @en sub mesh geometry data @zh 子网格几何数据 + * @param dynamicGeometry @en sub mesh geometry data @zh 子网格几何数据 */ - public updateSubMesh (primitiveIndex: number, geometry: IDynamicGeometry) { + public updateSubMesh (primitiveIndex: number, dynamicGeometry: IDynamicGeometry) { if (!this._struct.dynamic) { warnID(14200); return; @@ -524,29 +520,29 @@ export class Mesh extends Asset { } const buffers: Float32Array[] = []; - if (geometry.positions.length > 0) { - buffers.push(geometry.positions); + if (dynamicGeometry.positions.length > 0) { + buffers.push(dynamicGeometry.positions); } - if (geometry.normals && geometry.normals.length > 0) { - buffers.push(geometry.normals); + if (dynamicGeometry.normals && dynamicGeometry.normals.length > 0) { + buffers.push(dynamicGeometry.normals); } - if (geometry.uvs && geometry.uvs.length > 0) { - buffers.push(geometry.uvs); + if (dynamicGeometry.uvs && dynamicGeometry.uvs.length > 0) { + buffers.push(dynamicGeometry.uvs); } - if (geometry.tangents && geometry.tangents.length > 0) { - buffers.push(geometry.tangents); + if (dynamicGeometry.tangents && dynamicGeometry.tangents.length > 0) { + buffers.push(dynamicGeometry.tangents); } - if (geometry.colors && geometry.colors.length > 0) { - buffers.push(geometry.colors); + if (dynamicGeometry.colors && dynamicGeometry.colors.length > 0) { + buffers.push(dynamicGeometry.colors); } - if (geometry.customAttributes) { - for (let k = 0; k < geometry.customAttributes.length; k++) { - buffers.push(geometry.customAttributes[k].values); + if (dynamicGeometry.customAttributes) { + for (let k = 0; k < dynamicGeometry.customAttributes.length; k++) { + buffers.push(dynamicGeometry.customAttributes[k].values); } } @@ -580,11 +576,11 @@ export class Mesh extends Asset { if (primitive.indexView) { const indexView = primitive.indexView; const stride = indexView.stride; - const indexCount = (stride === 2) ? geometry.indices16!.length : geometry.indices32!.length; + const indexCount = (stride === 2) ? dynamicGeometry.indices16!.length : dynamicGeometry.indices32!.length; const updateSize = indexCount * stride; const dstBuffer = new Uint8Array(this._data.buffer, indexView.offset, updateSize); - const srcBuffer = (stride === 2) ? new Uint8Array(geometry.indices16!.buffer, geometry.indices16!.byteOffset, updateSize) - : new Uint8Array(geometry.indices32!.buffer, geometry.indices32!.byteOffset, updateSize); + const srcBuffer = (stride === 2) ? new Uint8Array(dynamicGeometry.indices16!.buffer, dynamicGeometry.indices16!.byteOffset, updateSize) + : new Uint8Array(dynamicGeometry.indices32!.buffer, dynamicGeometry.indices32!.byteOffset, updateSize); const indexBuffer = subMesh.indexBuffer!; assertIsTrue(indexCount <= info.maxSubMeshIndices, 'Too many indices.'); @@ -598,15 +594,15 @@ export class Mesh extends Asset { } // update bound - if (geometry.minPos && geometry.maxPos) { - const minPos = new Vec3(geometry.minPos.x, geometry.minPos.y, geometry.minPos.z); - const maxPos = new Vec3(geometry.maxPos.x, geometry.maxPos.y, geometry.maxPos.z); + if (dynamicGeometry.minPos && dynamicGeometry.maxPos) { + const minPos = new Vec3(dynamicGeometry.minPos.x, dynamicGeometry.minPos.y, dynamicGeometry.minPos.z); + const maxPos = new Vec3(dynamicGeometry.maxPos.x, dynamicGeometry.maxPos.y, dynamicGeometry.maxPos.z); if (!dynamic.bounds[primitiveIndex]) { - dynamic.bounds[primitiveIndex] = new AABB(); + dynamic.bounds[primitiveIndex] = new geometry.AABB(); } - AABB.fromPoints(dynamic.bounds[primitiveIndex], minPos, maxPos); + geometry.AABB.fromPoints(dynamic.bounds[primitiveIndex], minPos, maxPos); const subMin = new Vec3(); const subMax = new Vec3(); @@ -685,12 +681,12 @@ export class Mesh extends Asset { if (this._boneSpaceBounds.has(skeleton.hash)) { return this._boneSpaceBounds.get(skeleton.hash)!; } - const bounds: (AABB | null)[] = []; + const bounds: (geometry.AABB | null)[] = []; this._boneSpaceBounds.set(skeleton.hash, bounds); const valid: boolean[] = []; const { bindposes } = skeleton; for (let i = 0; i < bindposes.length; i++) { - bounds.push(new AABB(Infinity, Infinity, Infinity, -Infinity, -Infinity, -Infinity)); + bounds.push(new geometry.AABB(Infinity, Infinity, Infinity, -Infinity, -Infinity, -Infinity)); valid.push(false); } const { primitives } = this._struct; @@ -716,7 +712,7 @@ export class Mesh extends Asset { } for (let i = 0; i < bindposes.length; i++) { const b = bounds[i]!; - if (!valid[i]) { bounds[i] = null; } else { AABB.fromPoints(b, b.center, b.halfExtents); } + if (!valid[i]) { bounds[i] = null; } else { geometry.AABB.fromPoints(b, b.center, b.halfExtents); } } return bounds; } @@ -738,7 +734,7 @@ export class Mesh extends Asset { const vec3_temp = new Vec3(); const rotate = worldMatrix && new Quat(); - const boundingBox = worldMatrix && new AABB(); + const boundingBox = worldMatrix && new geometry.AABB(); if (rotate) { worldMatrix!.getRotation(rotate); } @@ -751,7 +747,7 @@ export class Mesh extends Asset { Vec3.multiplyScalar(boundingBox!.center, boundingBox!.center, 0.5); Vec3.subtract(boundingBox!.halfExtents, struct.maxPosition, struct.minPosition); Vec3.multiplyScalar(boundingBox!.halfExtents, boundingBox!.halfExtents, 0.5); - AABB.transform(boundingBox!, boundingBox!, worldMatrix); + geometry.AABB.transform(boundingBox!, boundingBox!, worldMatrix); Vec3.add(struct.maxPosition, boundingBox!.center, boundingBox!.halfExtents); Vec3.subtract(struct.minPosition, boundingBox!.center, boundingBox!.halfExtents); } @@ -997,7 +993,7 @@ export class Mesh extends Asset { Vec3.multiplyScalar(boundingBox!.center, boundingBox!.center, 0.5); Vec3.subtract(boundingBox!.halfExtents, mesh._struct.maxPosition, mesh._struct.minPosition); Vec3.multiplyScalar(boundingBox!.halfExtents, boundingBox!.halfExtents, 0.5); - AABB.transform(boundingBox!, boundingBox!, worldMatrix); + geometry.AABB.transform(boundingBox!, boundingBox!, worldMatrix); Vec3.add(vec3_temp, boundingBox!.center, boundingBox!.halfExtents); Vec3.max(meshStruct.maxPosition, meshStruct.maxPosition, vec3_temp); Vec3.subtract(vec3_temp, boundingBox!.center, boundingBox!.halfExtents); @@ -1329,7 +1325,7 @@ export class Mesh extends Asset { this._data = globalEmptyMeshBuffer; } } -legacyCC.Mesh = Mesh; +cclegacy.Mesh = Mesh; function getOffset (attributes: Attribute[], attributeIndex: number) { let result = 0; diff --git a/cocos/3d/assets/skeleton.ts b/cocos/3d/assets/skeleton.ts index a836a24c6cc..ca9ea5b1fc1 100644 --- a/cocos/3d/assets/skeleton.ts +++ b/cocos/3d/assets/skeleton.ts @@ -24,12 +24,10 @@ */ import { ccclass, type, serializable } from 'cc.decorator'; -import { CCString } from '../../core/data/utils/attribute'; -import { Mat4 } from '../../core/math'; +import { CCString, Mat4, cclegacy } from '../../core'; import { murmurhash2_32_gc } from '../../core/algorithm/murmurhash2_gc'; import type { DataPoolManager } from '../skeletal-animation/data-pool-manager'; import { Asset } from '../../asset/assets/asset'; -import { legacyCC } from '../../core/global-exports'; /** * @en The skeleton asset. It stores the path related to [[SkinnedMeshRenderer.skinningRoot]] of all bones and its bind pose matrix. @@ -110,7 +108,7 @@ export class Skeleton extends Asset { } public destroy () { - (legacyCC.director.root?.dataPoolManager as DataPoolManager)?.releaseSkeleton(this); + (cclegacy.director.root?.dataPoolManager as DataPoolManager)?.releaseSkeleton(this); return super.destroy(); } @@ -124,4 +122,4 @@ export class Skeleton extends Asset { } } -legacyCC.Skeleton = Skeleton; +cclegacy.Skeleton = Skeleton; diff --git a/cocos/3d/framework/deprecated.ts b/cocos/3d/framework/deprecated.ts index dcc249d860f..b4bb3e7d77b 100644 --- a/cocos/3d/framework/deprecated.ts +++ b/cocos/3d/framework/deprecated.ts @@ -23,10 +23,8 @@ THE SOFTWARE. */ -import { removeProperty } from '../../core/utils'; +import { removeProperty, js, cclegacy } from '../../core'; import { MeshRenderer } from './mesh-renderer'; -import { js } from '../../core/utils/js'; -import { legacyCC } from '../../core/global-exports'; removeProperty(MeshRenderer.prototype, 'MeshRenderer.prototype', [ { @@ -42,5 +40,5 @@ removeProperty(MeshRenderer.prototype, 'MeshRenderer.prototype', [ * @deprecated Since v1.2 */ export { MeshRenderer as ModelComponent }; -legacyCC.ModelComponent = MeshRenderer; +cclegacy.ModelComponent = MeshRenderer; js.setClassAlias(MeshRenderer, 'cc.ModelComponent'); diff --git a/cocos/3d/framework/mesh-renderer.ts b/cocos/3d/framework/mesh-renderer.ts index f057dcb7e88..9bca2d4905a 100644 --- a/cocos/3d/framework/mesh-renderer.ts +++ b/cocos/3d/framework/mesh-renderer.ts @@ -29,18 +29,15 @@ import { JSB } from 'internal:constants'; import { Texture2D } from '../../asset/assets'; import { Material } from '../../asset/assets/material'; import { Mesh } from '../assets/mesh'; -import { Vec4 } from '../../core/math'; +import { Vec4, Enum, cclegacy, CCBoolean, CCFloat } from '../../core'; import { scene } from '../../render-scene'; import { MorphModel } from '../models/morph-model'; import { Root } from '../../root'; import { MobilityMode, TransformBit } from '../../scene-graph/node-enum'; -import { Enum } from '../../core/value-types'; import { builtinResMgr } from '../../asset/asset-manager'; import { ModelRenderer } from '../../misc/model-renderer'; import { MorphRenderingInstance } from '../assets/morph-rendering'; -import { legacyCC } from '../../core/global-exports'; import { assertIsTrue } from '../../core/data/utils/asserts'; -import { CCBoolean, CCFloat } from '../../core/data/utils/attribute'; import { property } from '../../core/data/class-decorator'; import { NodeEventType } from '../../scene-graph/node-event'; @@ -415,7 +412,7 @@ export class MeshRenderer extends ModelRenderer { public onDestroy () { if (this._model) { - legacyCC.director.root.destroyModel(this._model); + cclegacy.director.root.destroyModel(this._model); this._model = null; this._models.length = 0; } @@ -570,7 +567,7 @@ export class MeshRenderer extends ModelRenderer { // derived classes should use a morph-able model type(i.e. model type derived from `MorphModel`). // So we should take care of the edge case. const modelType = (preferMorphOverPlain && this._modelType === scene.Model) ? MorphModel : this._modelType; - const model = this._model = (legacyCC.director.root as Root).createModel(modelType); + const model = this._model = (cclegacy.director.root as Root).createModel(modelType); model.visFlags = this.visibility; model.node = model.transform = this.node; this._models.length = 0; diff --git a/cocos/3d/lights/deprecated.ts b/cocos/3d/lights/deprecated.ts index e9c901cac8a..805ad6f3f97 100644 --- a/cocos/3d/lights/deprecated.ts +++ b/cocos/3d/lights/deprecated.ts @@ -27,37 +27,35 @@ import { Light } from './light-component'; import { SpotLight } from './spot-light-component'; import { SphereLight } from './sphere-light-component'; import { DirectionalLight } from './directional-light-component'; -import { legacyCC } from '../../core/global-exports'; -import { js } from '../../core/utils/js'; -import { replaceProperty } from '../../core/utils/x-deprecated'; +import { cclegacy, js, replaceProperty } from '../../core'; /** * Alias of [[Light]] * @deprecated Since v1.2 */ export { Light as LightComponent }; -legacyCC.LightComponent = Light; +cclegacy.LightComponent = Light; js.setClassAlias(Light, 'cc.LightComponent'); /** * Alias of [[DirectionalLight]] * @deprecated Since v1.2 */ export { DirectionalLight as DirectionalLightComponent }; -legacyCC.DirectionalLightComponent = DirectionalLight; +cclegacy.DirectionalLightComponent = DirectionalLight; js.setClassAlias(DirectionalLight, 'cc.DirectionalLightComponent'); /** * Alias of [[SphereLight]] * @deprecated Since v1.2 */ export { SphereLight as SphereLightComponent }; -legacyCC.SphereLightComponent = SphereLight; +cclegacy.SphereLightComponent = SphereLight; js.setClassAlias(SphereLight, 'cc.SphereLightComponent'); /** * Alias of [[SpotLight]] * @deprecated Since v1.2 */ export { SpotLight as SpotLightComponent }; -legacyCC.SpotLightComponent = SpotLight; +cclegacy.SpotLightComponent = SpotLight; js.setClassAlias(SpotLight, 'cc.SpotLightComponent'); replaceProperty(SpotLight.prototype, 'SpotLight.prototype', [ diff --git a/cocos/3d/lights/directional-light-component.ts b/cocos/3d/lights/directional-light-component.ts index 55ce22caf61..530e44e0696 100644 --- a/cocos/3d/lights/directional-light-component.ts +++ b/cocos/3d/lights/directional-light-component.ts @@ -27,12 +27,10 @@ import { ccclass, range, slide, type, editable, visible, help, executeInEditMode menu, tooltip, serializable, formerlySerializedAs } from 'cc.decorator'; import { Light } from './light-component'; import { scene } from '../../render-scene'; -import { legacyCC } from '../../core/global-exports'; +import { cclegacy, clamp, warnID, CCBoolean, CCFloat } from '../../core'; import { Camera, PCFType, Shadows, ShadowType, CSMOptimizationMode, CSMLevel } from '../../render-scene/scene'; import { Root } from '../../root'; import { property } from '../../core/data/class-decorator'; -import { CCBoolean, CCFloat } from '../../core/data/utils/attribute'; -import { clamp, warnID } from '../../core'; /** * @en The directional light component, only one real time directional light is permitted in one scene, it act as the main light of the scene. @@ -93,7 +91,7 @@ export class DirectionalLight extends Light { */ @tooltip('i18n:lights.illuminance') get illuminance () { - const isHDR = (legacyCC.director.root as Root).pipeline.pipelineSceneData.isHDR; + const isHDR = (cclegacy.director.root as Root).pipeline.pipelineSceneData.isHDR; if (isHDR) { return this._illuminanceHDR; } else { @@ -101,7 +99,7 @@ export class DirectionalLight extends Light { } } set illuminance (val) { - const isHDR = (legacyCC.director.root as Root).pipeline.pipelineSceneData.isHDR; + const isHDR = (cclegacy.director.root as Root).pipeline.pipelineSceneData.isHDR; if (isHDR) { this._illuminanceHDR = val; this._light && (this._light.illuminanceHDR = this._illuminanceHDR); @@ -116,8 +114,8 @@ export class DirectionalLight extends Light { * @zh 是否启用实时阴影? */ @tooltip('i18n:lights.shadowEnabled') - @visible(() => (legacyCC.director.root as Root).pipeline.pipelineSceneData.shadows.enabled - && (legacyCC.director.root as Root).pipeline.pipelineSceneData.shadows.type === ShadowType.ShadowMap) + @visible(() => (cclegacy.director.root as Root).pipeline.pipelineSceneData.shadows.enabled + && (cclegacy.director.root as Root).pipeline.pipelineSceneData.shadows.type === ShadowType.ShadowMap) @property({ group: { name: 'DynamicShadowSettings', displayOrder: 1 } }) @editable @type(CCBoolean) @@ -136,8 +134,8 @@ export class DirectionalLight extends Light { * @zh 实时阴影计算中的阴影 pcf 等级。 */ @tooltip('i18n:lights.shadowPcf') - @visible(() => (legacyCC.director.root as Root).pipeline.pipelineSceneData.shadows.enabled - && (legacyCC.director.root as Root).pipeline.pipelineSceneData.shadows.type === ShadowType.ShadowMap) + @visible(() => (cclegacy.director.root as Root).pipeline.pipelineSceneData.shadows.enabled + && (cclegacy.director.root as Root).pipeline.pipelineSceneData.shadows.type === ShadowType.ShadowMap) @property({ group: { name: 'DynamicShadowSettings', displayOrder: 5 } }) @editable @type(PCFType) @@ -156,8 +154,8 @@ export class DirectionalLight extends Light { * @zh 实时阴影计算中的阴影纹理偏移值。 */ @tooltip('i18n:lights.shadowBias') - @visible(() => (legacyCC.director.root as Root).pipeline.pipelineSceneData.shadows.enabled - && (legacyCC.director.root as Root).pipeline.pipelineSceneData.shadows.type === ShadowType.ShadowMap) + @visible(() => (cclegacy.director.root as Root).pipeline.pipelineSceneData.shadows.enabled + && (cclegacy.director.root as Root).pipeline.pipelineSceneData.shadows.type === ShadowType.ShadowMap) @property({ group: { name: 'DynamicShadowSettings', displayOrder: 6 } }) @editable @type(CCFloat) @@ -176,8 +174,8 @@ export class DirectionalLight extends Light { * @zh 实时阴影计算中的法线偏移。 */ @tooltip('i18n:lights.shadowNormalBias') - @visible(() => (legacyCC.director.root as Root).pipeline.pipelineSceneData.shadows.enabled - && (legacyCC.director.root as Root).pipeline.pipelineSceneData.shadows.type === ShadowType.ShadowMap) + @visible(() => (cclegacy.director.root as Root).pipeline.pipelineSceneData.shadows.enabled + && (cclegacy.director.root as Root).pipeline.pipelineSceneData.shadows.type === ShadowType.ShadowMap) @property({ group: { name: 'DynamicShadowSettings', displayOrder: 7 } }) @editable @type(CCFloat) @@ -196,8 +194,8 @@ export class DirectionalLight extends Light { * @zh 实时阴影计算中的阴影颜色饱和度。 */ @tooltip('i18n:lights.shadowSaturation') - @visible(() => (legacyCC.director.root as Root).pipeline.pipelineSceneData.shadows.enabled - && (legacyCC.director.root as Root).pipeline.pipelineSceneData.shadows.type === ShadowType.ShadowMap) + @visible(() => (cclegacy.director.root as Root).pipeline.pipelineSceneData.shadows.enabled + && (cclegacy.director.root as Root).pipeline.pipelineSceneData.shadows.type === ShadowType.ShadowMap) @property({ group: { name: 'DynamicShadowSettings', displayOrder: 8 } }) @editable @range([0.0, 1.0, 0.01]) @@ -220,8 +218,8 @@ export class DirectionalLight extends Light { */ @tooltip('i18n:lights.shadowDistance') @visible(function (this: DirectionalLight) { - return (legacyCC.director.root as Root).pipeline.pipelineSceneData.shadows.enabled - && (legacyCC.director.root as Root).pipeline.pipelineSceneData.shadows.type + return (cclegacy.director.root as Root).pipeline.pipelineSceneData.shadows.enabled + && (cclegacy.director.root as Root).pipeline.pipelineSceneData.shadows.type === ShadowType.ShadowMap && this._shadowFixedArea === false; }) @property({ group: { name: 'DynamicShadowSettings', displayOrder: 9 } }) @@ -248,8 +246,8 @@ export class DirectionalLight extends Light { */ @tooltip('i18n:lights.shadowInvisibleOcclusionRange') @visible(function (this: DirectionalLight) { - return (legacyCC.director.root as Root).pipeline.pipelineSceneData.shadows.enabled - && (legacyCC.director.root as Root).pipeline.pipelineSceneData.shadows.type + return (cclegacy.director.root as Root).pipeline.pipelineSceneData.shadows.enabled + && (cclegacy.director.root as Root).pipeline.pipelineSceneData.shadows.type === ShadowType.ShadowMap && this._shadowFixedArea === false; }) @property({ group: { name: 'DynamicShadowSettings', displayOrder: 10 } }) @@ -295,8 +293,8 @@ export class DirectionalLight extends Light { */ @tooltip('i18n:lights.enableCSM') @visible(function (this: DirectionalLight) { - return (legacyCC.director.root as Root).pipeline.pipelineSceneData.shadows.enabled - && (legacyCC.director.root as Root).pipeline.pipelineSceneData.shadows.type + return (cclegacy.director.root as Root).pipeline.pipelineSceneData.shadows.enabled + && (cclegacy.director.root as Root).pipeline.pipelineSceneData.shadows.type === ShadowType.ShadowMap && this._shadowFixedArea === false; }) @property({ group: { name: 'DynamicShadowSettings', displayOrder: 12 } }) @@ -363,8 +361,8 @@ export class DirectionalLight extends Light { * @zh 实时阴影计算中是否使用固定区域阴影。 */ @tooltip('i18n:lights.shadowFixedArea') - @visible(() => (legacyCC.director.root as Root).pipeline.pipelineSceneData.shadows.enabled - && (legacyCC.director.root as Root).pipeline.pipelineSceneData.shadows.type === ShadowType.ShadowMap) + @visible(() => (cclegacy.director.root as Root).pipeline.pipelineSceneData.shadows.enabled + && (cclegacy.director.root as Root).pipeline.pipelineSceneData.shadows.type === ShadowType.ShadowMap) @property({ group: { name: 'DynamicShadowSettings', displayOrder: 15 } }) @editable @type(CCBoolean) @@ -384,8 +382,8 @@ export class DirectionalLight extends Light { */ @tooltip('i18n:lights.shadowNear') @visible(function (this: DirectionalLight) { - return (legacyCC.director.root as Root).pipeline.pipelineSceneData.shadows.enabled - && (legacyCC.director.root as Root).pipeline.pipelineSceneData.shadows.type + return (cclegacy.director.root as Root).pipeline.pipelineSceneData.shadows.enabled + && (cclegacy.director.root as Root).pipeline.pipelineSceneData.shadows.type === ShadowType.ShadowMap && this._shadowFixedArea === true; }) @property({ group: { name: 'DynamicShadowSettings', displayOrder: 16 } }) @@ -407,8 +405,8 @@ export class DirectionalLight extends Light { */ @tooltip('i18n:lights.shadowFar') @visible(function (this: DirectionalLight) { - return (legacyCC.director.root as Root).pipeline.pipelineSceneData.shadows.enabled - && (legacyCC.director.root as Root).pipeline.pipelineSceneData.shadows.type + return (cclegacy.director.root as Root).pipeline.pipelineSceneData.shadows.enabled + && (cclegacy.director.root as Root).pipeline.pipelineSceneData.shadows.type === ShadowType.ShadowMap && this._shadowFixedArea === true; }) @property({ group: { name: 'DynamicShadowSettings', displayOrder: 17 } }) @@ -430,8 +428,8 @@ export class DirectionalLight extends Light { */ @tooltip('i18n:lights.shadowOrthoSize') @visible(function (this: DirectionalLight) { - return (legacyCC.director.root as Root).pipeline.pipelineSceneData.shadows.enabled - && (legacyCC.director.root as Root).pipeline.pipelineSceneData.shadows.type + return (cclegacy.director.root as Root).pipeline.pipelineSceneData.shadows.enabled + && (cclegacy.director.root as Root).pipeline.pipelineSceneData.shadows.type === ShadowType.ShadowMap && this._shadowFixedArea === true; }) @property({ group: { name: 'DynamicShadowSettings', displayOrder: 18 } }) diff --git a/cocos/3d/lights/light-component.ts b/cocos/3d/lights/light-component.ts index 6a69a762abd..aaae2045df3 100644 --- a/cocos/3d/lights/light-component.ts +++ b/cocos/3d/lights/light-component.ts @@ -25,11 +25,9 @@ import { ccclass, tooltip, range, slide, type, displayOrder, serializable, editable } from 'cc.decorator'; import { Component } from '../../scene-graph/component'; -import { Color, Vec3 } from '../../core/math'; -import { Enum } from '../../core/value-types'; +import { Color, Vec3, Enum, cclegacy } from '../../core'; import { scene } from '../../render-scene'; import { Root } from '../../root'; -import { legacyCC } from '../../core/global-exports'; const _color_tmp = new Vec3(); @@ -256,7 +254,7 @@ export class Light extends Component { protected _createLight () { if (!this._light) { - this._light = (legacyCC.director.root as Root).createLight(this._lightType); + this._light = (cclegacy.director.root as Root).createLight(this._lightType); } this.color = this._color; this.useColorTemperature = this._useColorTemperature; @@ -267,7 +265,7 @@ export class Light extends Component { protected _destroyLight () { if (this._light) { - legacyCC.director.root.recycleLight(this._light); + cclegacy.director.root.recycleLight(this._light); this._light = null; } } diff --git a/cocos/3d/lights/sphere-light-component.ts b/cocos/3d/lights/sphere-light-component.ts index f8e3cc7369c..81d41327633 100644 --- a/cocos/3d/lights/sphere-light-component.ts +++ b/cocos/3d/lights/sphere-light-component.ts @@ -26,7 +26,7 @@ import { ccclass, help, executeInEditMode, menu, tooltip, type, displayOrder, serializable, formerlySerializedAs } from 'cc.decorator'; import { scene } from '../../render-scene'; import { Light, PhotometricTerm } from './light-component'; -import { legacyCC } from '../../core/global-exports'; +import { cclegacy } from '../../core'; import { Camera } from '../../render-scene/scene'; import { Root } from '../../root'; @@ -61,7 +61,7 @@ export class SphereLight extends Light { @displayOrder(-1) @tooltip('i18n:lights.luminous_flux') get luminousFlux () { - const isHDR = (legacyCC.director.root as Root).pipeline.pipelineSceneData.isHDR; + const isHDR = (cclegacy.director.root as Root).pipeline.pipelineSceneData.isHDR; if (isHDR) { return this._luminanceHDR * scene.nt2lm(this._size); } else { @@ -69,7 +69,7 @@ export class SphereLight extends Light { } } set luminousFlux (val) { - const isHDR = (legacyCC.director.root as Root).pipeline.pipelineSceneData.isHDR; + const isHDR = (cclegacy.director.root as Root).pipeline.pipelineSceneData.isHDR; let result = 0; if (isHDR) { this._luminanceHDR = val / scene.nt2lm(this._size); @@ -88,7 +88,7 @@ export class SphereLight extends Light { @displayOrder(-1) @tooltip('i18n:lights.luminance') get luminance () { - const isHDR = (legacyCC.director.root as Root).pipeline.pipelineSceneData.isHDR; + const isHDR = (cclegacy.director.root as Root).pipeline.pipelineSceneData.isHDR; if (isHDR) { return this._luminanceHDR; } else { @@ -96,7 +96,7 @@ export class SphereLight extends Light { } } set luminance (val) { - const isHDR = (legacyCC.director.root as Root).pipeline.pipelineSceneData.isHDR; + const isHDR = (cclegacy.director.root as Root).pipeline.pipelineSceneData.isHDR; if (isHDR) { this._luminanceHDR = val; this._light && (this._light.luminanceHDR = this._luminanceHDR); diff --git a/cocos/3d/lights/spot-light-component.ts b/cocos/3d/lights/spot-light-component.ts index e610a204b7a..99db3c2a95e 100644 --- a/cocos/3d/lights/spot-light-component.ts +++ b/cocos/3d/lights/spot-light-component.ts @@ -25,14 +25,12 @@ import { ccclass, range, slide, type, editable, displayOrder, help, executeInEditMode, menu, tooltip, serializable, formerlySerializedAs, visible } from 'cc.decorator'; -import { toRadian } from '../../core/math'; +import { toRadian, cclegacy, CCBoolean, CCFloat } from '../../core'; import { scene } from '../../render-scene'; import { Light, PhotometricTerm } from './light-component'; -import { legacyCC } from '../../core/global-exports'; import { Root } from '../../root'; import { Camera, PCFType, ShadowType } from '../../render-scene/scene'; import { property } from '../../core/data/class-decorator'; -import { CCBoolean, CCFloat } from '../../core/data/utils/attribute'; /** * @en The spot light component, multiple spot lights can be added to one scene. @@ -83,7 +81,7 @@ export class SpotLight extends Light { @tooltip('i18n:lights.luminous_flux') @displayOrder(-1) get luminousFlux () { - const isHDR = (legacyCC.director.root as Root).pipeline.pipelineSceneData.isHDR; + const isHDR = (cclegacy.director.root as Root).pipeline.pipelineSceneData.isHDR; if (isHDR) { return this._luminanceHDR * scene.nt2lm(this._size); } else { @@ -92,7 +90,7 @@ export class SpotLight extends Light { } set luminousFlux (val) { - const isHDR = (legacyCC.director.root as Root).pipeline.pipelineSceneData.isHDR; + const isHDR = (cclegacy.director.root as Root).pipeline.pipelineSceneData.isHDR; let result = 0; if (isHDR) { this._luminanceHDR = val / scene.nt2lm(this._size); @@ -111,7 +109,7 @@ export class SpotLight extends Light { @tooltip('i18n:lights.luminance') @displayOrder(-1) get luminance () { - const isHDR = (legacyCC.director.root as Root).pipeline.pipelineSceneData.isHDR; + const isHDR = (cclegacy.director.root as Root).pipeline.pipelineSceneData.isHDR; if (isHDR) { return this._luminanceHDR; } else { @@ -120,7 +118,7 @@ export class SpotLight extends Light { } set luminance (val) { - const isHDR = (legacyCC.director.root as Root).pipeline.pipelineSceneData.isHDR; + const isHDR = (cclegacy.director.root as Root).pipeline.pipelineSceneData.isHDR; if (isHDR) { this._luminanceHDR = val; this._light && (this._light.luminanceHDR = this._luminanceHDR); @@ -200,7 +198,7 @@ export class SpotLight extends Light { * @zh 是否启用阴影? */ @tooltip('i18n:lights.shadowEnabled') - @visible(() => (legacyCC.director.root as Root).pipeline.pipelineSceneData.shadows.type === ShadowType.ShadowMap) + @visible(() => (cclegacy.director.root as Root).pipeline.pipelineSceneData.shadows.type === ShadowType.ShadowMap) @property({ group: { name: 'DynamicShadowSettings', displayOrder: 1 } }) @editable @type(CCBoolean) @@ -219,7 +217,7 @@ export class SpotLight extends Light { * @zh 获取或者设置阴影 pcf 等级。 */ @tooltip('i18n:lights.shadowPcf') - @visible(() => (legacyCC.director.root as Root).pipeline.pipelineSceneData.shadows.type === ShadowType.ShadowMap) + @visible(() => (cclegacy.director.root as Root).pipeline.pipelineSceneData.shadows.type === ShadowType.ShadowMap) @property({ group: { name: 'DynamicShadowSettings', displayOrder: 2 } }) @editable @type(PCFType) @@ -238,7 +236,7 @@ export class SpotLight extends Light { * @zh 阴影的深度偏移, 可以减弱跨像素导致的条纹状失真 */ @tooltip('i18n:lights.shadowBias') - @visible(() => (legacyCC.director.root as Root).pipeline.pipelineSceneData.shadows.type === ShadowType.ShadowMap) + @visible(() => (cclegacy.director.root as Root).pipeline.pipelineSceneData.shadows.type === ShadowType.ShadowMap) @property({ group: { name: 'DynamicShadowSettings', displayOrder: 3 } }) @editable @type(CCFloat) @@ -257,7 +255,7 @@ export class SpotLight extends Light { * @zh 设置或者获取法线偏移。 */ @tooltip('i18n:lights.shadowNormalBias') - @visible(() => (legacyCC.director.root as Root).pipeline.pipelineSceneData.shadows.type === ShadowType.ShadowMap) + @visible(() => (cclegacy.director.root as Root).pipeline.pipelineSceneData.shadows.type === ShadowType.ShadowMap) @property({ group: { name: 'DynamicShadowSettings', displayOrder: 4 } }) @editable @type(CCFloat) diff --git a/cocos/3d/misc/batch-utils.ts b/cocos/3d/misc/batch-utils.ts index be019edbc40..00f23891709 100644 --- a/cocos/3d/misc/batch-utils.ts +++ b/cocos/3d/misc/batch-utils.ts @@ -25,7 +25,7 @@ import { MeshRenderer } from '../framework/mesh-renderer'; import { Mesh } from '../assets/mesh'; -import { Mat4 } from '../../core/math/mat4'; +import { Mat4 } from '../../core'; import { Node } from '../../scene-graph/node'; function checkMaterialisSame (comp1: MeshRenderer, comp2: MeshRenderer): boolean { diff --git a/cocos/3d/misc/buffer.ts b/cocos/3d/misc/buffer.ts index 50b3deb1450..db0ee980f7a 100644 --- a/cocos/3d/misc/buffer.ts +++ b/cocos/3d/misc/buffer.ts @@ -24,7 +24,7 @@ */ import { Format, FormatInfos, FormatType, FormatInfo } from '../../gfx'; -import { sys } from '../../core/platform/sys'; +import { sys } from '../../core'; const _typeMap: Record = { [FormatType.UNORM]: 'Uint', diff --git a/cocos/3d/misc/create-mesh.jsb.ts b/cocos/3d/misc/create-mesh.jsb.ts index a44849df3e8..76bbb1d61cd 100644 --- a/cocos/3d/misc/create-mesh.jsb.ts +++ b/cocos/3d/misc/create-mesh.jsb.ts @@ -22,10 +22,10 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -import { legacyCC } from "../../core/global-exports"; +import { cclegacy } from "../../core"; export const MeshUtils = jsb.MeshUtils; export const createMesh = MeshUtils.createMesh; export const createDynamicMesh = MeshUtils.createDynamicMesh; -legacyCC.MeshUtils = jsb.MeshUtils; +cclegacy.MeshUtils = jsb.MeshUtils; diff --git a/cocos/3d/misc/create-mesh.ts b/cocos/3d/misc/create-mesh.ts index 22d287d4d4b..67d59205395 100644 --- a/cocos/3d/misc/create-mesh.ts +++ b/cocos/3d/misc/create-mesh.ts @@ -25,7 +25,7 @@ import { Mesh } from '../assets/mesh'; import { AttributeName, Format, FormatInfos, PrimitiveMode, Attribute } from '../../gfx'; -import { Vec3 } from '../../core/math'; +import { Vec3 } from '../../core'; import { IGeometry, IDynamicGeometry, ICreateMeshOptions, ICreateDynamicMeshOptions } from '../../primitive/define'; import { writeBuffer } from './buffer'; import { BufferBlob } from './buffer-blob'; diff --git a/cocos/3d/models/baked-skinning-model.jsb.ts b/cocos/3d/models/baked-skinning-model.jsb.ts index 9507db53a22..85d220bce48 100644 --- a/cocos/3d/models/baked-skinning-model.jsb.ts +++ b/cocos/3d/models/baked-skinning-model.jsb.ts @@ -1,13 +1,12 @@ -import { legacyCC } from '../../core/global-exports'; +import { cclegacy, geometry } from '../../core'; import { Skeleton } from '../assets/skeleton'; -import { AABB } from '../../core/geometry'; import { Mesh } from '../assets/mesh'; -import { Node } from '../../core/scene-graph/node' -import { AnimationClip } from "../../core"; +import { Node } from '../../scene-graph/node' +import { AnimationClip } from "../../animation"; import { IJointTextureHandle } from '../skeletal-animation/skeletal-animation-utils'; export const BakedSkinningModel = jsb.BakedSkinningModel; -legacyCC.BakedSkinningModel = jsb.BakedSkinningModel; +cclegacy.BakedSkinningModel = jsb.BakedSkinningModel; const MorphModel = jsb.MorphModel; const bakedSkinningModelProto: any = BakedSkinningModel.prototype; @@ -15,7 +14,7 @@ const bakedSkinningModelProto: any = BakedSkinningModel.prototype; bakedSkinningModelProto._ctor = function () { jsb.Model.prototype._ctor.call(this); this.uploadedAnim = undefined; - this._dataPoolManager = legacyCC.director.root.dataPoolManager; + this._dataPoolManager = cclegacy.director.root.dataPoolManager; const jointTextureInfo = new Float32Array(4); const animInfo = this._dataPoolManager.jointAnimationInfo.getData(); this._jointsMedium = { buffer: null, jointTextureInfo, animInfo, texture: null, boundsInfo: null }; @@ -52,7 +51,7 @@ bakedSkinningModelProto.uploadAnimation = function (anim: AnimationClip | null) this.setUploadedAnimForJS(!!anim); const resMgr = this._dataPoolManager; let texture: IJointTextureHandle | null = null; - let modelBounds: AABB | null = null; + let modelBounds: geometry.AABB | null = null; if (anim) { texture = resMgr.jointTexturePool.getSequencePoseTexture(this._skeleton, anim, this._mesh, this.transform); this._jointsMedium.boundsInfo = texture && texture.bounds.get(this._mesh.hash)!; diff --git a/cocos/3d/models/baked-skinning-model.ts b/cocos/3d/models/baked-skinning-model.ts index d6c77a245c2..a250a61c29d 100644 --- a/cocos/3d/models/baked-skinning-model.ts +++ b/cocos/3d/models/baked-skinning-model.ts @@ -26,7 +26,7 @@ import type { AnimationClip } from '../../animation/animation-clip'; import { Mesh } from '../assets/mesh'; import { Skeleton } from '../assets/skeleton'; -import { AABB } from '../../core/geometry'; +import { geometry, cclegacy } from '../../core'; import { BufferUsageBit, MemoryUsageBit, Attribute, DescriptorSet, Buffer, BufferInfo } from '../../gfx'; import { INST_JOINT_ANIM_INFO, UBOSkinningAnimation, UBOSkinningTexture, UNIFORM_JOINT_TEXTURE_BINDING } from '../../rendering/define'; import { Node } from '../../scene-graph'; @@ -35,7 +35,6 @@ import type { DataPoolManager } from '../skeletal-animation/data-pool-manager'; import { ModelType } from '../../render-scene/scene/model'; import { IAnimInfo, IJointTextureHandle } from '../skeletal-animation/skeletal-animation-utils'; import { MorphModel } from './morph-model'; -import { legacyCC } from '../../core/global-exports'; import { jointTextureSamplerInfo } from '../misc/joint-texture-sampler-info'; import { SubModel } from '../../render-scene/scene'; @@ -44,7 +43,7 @@ interface IJointsInfo { jointTextureInfo: Float32Array; texture: IJointTextureHandle | null; animInfo: IAnimInfo; - boundsInfo: AABB[] | null; + boundsInfo: geometry.AABB[] | null; } const myPatches = [ @@ -75,7 +74,7 @@ export class BakedSkinningModel extends MorphModel { constructor () { super(); this.type = ModelType.BAKED_SKINNING; - this._dataPoolManager = legacyCC.director.root.dataPoolManager; + this._dataPoolManager = cclegacy.director.root.dataPoolManager; const jointTextureInfo = new Float32Array(4); const animInfo = this._dataPoolManager.jointAnimationInfo.getData(); this._jointsMedium = { buffer: null, jointTextureInfo, animInfo, texture: null, boundsInfo: null }; diff --git a/cocos/3d/models/morph-model.jsb.ts b/cocos/3d/models/morph-model.jsb.ts index 7313f51f35b..c0226fd915d 100644 --- a/cocos/3d/models/morph-model.jsb.ts +++ b/cocos/3d/models/morph-model.jsb.ts @@ -1,4 +1,4 @@ -import { legacyCC } from "../../core/global-exports"; +import { cclegacy } from "../../core"; export const MorphModel = jsb.MorphModel; -legacyCC.MorphModel = jsb.MorphModel; +cclegacy.MorphModel = jsb.MorphModel; diff --git a/cocos/3d/models/skinning-model.jsb.ts b/cocos/3d/models/skinning-model.jsb.ts index 562cbbe46dd..688f12da2b5 100644 --- a/cocos/3d/models/skinning-model.jsb.ts +++ b/cocos/3d/models/skinning-model.jsb.ts @@ -1,4 +1,4 @@ -import { legacyCC } from "../../core/global-exports"; +import { cclegacy } from "../../core"; export const SkinningModel = jsb.SkinningModel; -legacyCC.SkinningModel = jsb.SkinningModel; +cclegacy.SkinningModel = jsb.SkinningModel; diff --git a/cocos/3d/models/skinning-model.ts b/cocos/3d/models/skinning-model.ts index 4a1caf93def..51389ee7222 100644 --- a/cocos/3d/models/skinning-model.ts +++ b/cocos/3d/models/skinning-model.ts @@ -27,9 +27,8 @@ import { Material } from '../../asset/assets/material'; import { RenderingSubMesh } from '../../asset/assets/rendering-sub-mesh'; import { Mesh } from '../assets/mesh'; import { Skeleton } from '../assets/skeleton'; -import { AABB } from '../../core/geometry'; +import { geometry, Mat4, Vec3, warnID } from '../../core'; import { BufferUsageBit, MemoryUsageBit, DescriptorSet, Buffer, BufferInfo, Attribute, FormatFeatureBit, Format } from '../../gfx'; -import { Mat4, Vec3 } from '../../core/math'; import { UBOSkinning, UNIFORM_REALTIME_JOINT_TEXTURE_BINDING } from '../../rendering/define'; import { Node } from '../../scene-graph/node'; import { ModelType } from '../../render-scene/scene/model'; @@ -37,7 +36,6 @@ import { uploadJointData } from '../skeletal-animation/skeletal-animation-utils' import { MorphModel } from './morph-model'; import { deleteTransform, getTransform, getWorldMatrix, IJointTransform } from '../../animation/skeletal-animation-utils'; import { IMacroPatch, BatchingSchemes, Pass } from '../../render-scene'; -import { warnID } from '../../core/platform/debug'; import { director } from '../../game'; import { PixelFormat } from '../../asset/assets/asset-enum'; import { Texture2D, ImageAsset } from '../../asset/assets'; @@ -67,7 +65,7 @@ function getRelevantBuffers (outIndices: number[], outBuffers: number[], jointMa } interface IJointInfo { - bound: AABB; + bound: geometry.AABB; target: Node; bindpose: Mat4; transform: IJointTransform; @@ -80,7 +78,7 @@ const v3_max = new Vec3(); const v3_1 = new Vec3(); const v3_2 = new Vec3(); const m4_1 = new Mat4(); -const ab_1 = new AABB(); +const ab_1 = new geometry.AABB(); class RealTimeJointTexture { public static readonly WIDTH = 256; @@ -184,7 +182,7 @@ export class SkinningModel extends MorphModel { for (let i = 0; i < this._joints.length; i++) { const { bound, transform } = this._joints[i]; const worldMatrix = getWorldMatrix(transform, stamp); - AABB.transform(ab_1, bound, worldMatrix); + geometry.AABB.transform(ab_1, bound, worldMatrix); ab_1.getBoundary(v3_1, v3_2); Vec3.min(v3_min, v3_min, v3_1); Vec3.max(v3_max, v3_max, v3_2); @@ -192,7 +190,7 @@ export class SkinningModel extends MorphModel { const worldBounds = this._worldBounds; if (this._modelBounds && worldBounds) { - AABB.fromPoints(this._modelBounds, v3_min, v3_max); + geometry.AABB.fromPoints(this._modelBounds, v3_min, v3_max); // @ts-expect-error TS2445 this._modelBounds.transform(root._mat, root._pos, root._rot, root._scale, this._worldBounds); } diff --git a/cocos/3d/skeletal-animation/data-pool-manager.ts b/cocos/3d/skeletal-animation/data-pool-manager.ts index 899e6f68804..c8eeb06ae0d 100644 --- a/cocos/3d/skeletal-animation/data-pool-manager.ts +++ b/cocos/3d/skeletal-animation/data-pool-manager.ts @@ -27,7 +27,7 @@ import type { AnimationClip } from '../../animation/animation-clip'; import type { Skeleton } from '../assets'; import { Device } from '../../gfx'; import { JointAnimationInfo, JointTexturePool } from './skeletal-animation-utils'; -import { legacyCC } from '../../core/global-exports'; +import { cclegacy } from '../../core'; export class DataPoolManager { public jointTexturePool: JointTexturePool; @@ -52,4 +52,4 @@ export class DataPoolManager { } } -legacyCC.internal.DataPoolManager = DataPoolManager; +cclegacy.internal.DataPoolManager = DataPoolManager; diff --git a/cocos/3d/skeletal-animation/deprecated.ts b/cocos/3d/skeletal-animation/deprecated.ts index 86c3a8d4e28..19713508192 100644 --- a/cocos/3d/skeletal-animation/deprecated.ts +++ b/cocos/3d/skeletal-animation/deprecated.ts @@ -23,13 +23,12 @@ THE SOFTWARE. */ -import { js } from '../../core/utils/js'; -import { legacyCC } from '../../core/global-exports'; +import { js, cclegacy } from '../../core'; import { SkeletalAnimation } from './skeletal-animation'; /** * Alias of [[SkeletalAnimation]] * @deprecated Since v1.2 */ export { SkeletalAnimation as SkeletalAnimationComponent }; -legacyCC.SkeletalAnimationComponent = SkeletalAnimation; +cclegacy.SkeletalAnimationComponent = SkeletalAnimation; js.setClassAlias(SkeletalAnimation, 'cc.SkeletalAnimationComponent'); diff --git a/cocos/3d/skeletal-animation/skeletal-animation-blending.ts b/cocos/3d/skeletal-animation/skeletal-animation-blending.ts index 23962555a9b..965a6050488 100644 --- a/cocos/3d/skeletal-animation/skeletal-animation-blending.ts +++ b/cocos/3d/skeletal-animation/skeletal-animation-blending.ts @@ -24,7 +24,7 @@ */ import { DEBUG } from 'internal:constants'; -import { Vec3, Quat } from '../../core/math'; +import { Vec3, Quat } from '../../core'; import { Node } from '../../scene-graph'; import { RuntimeBinding } from '../../animation/tracks/track'; import { assertIsTrue } from '../../core/data/utils/asserts'; diff --git a/cocos/3d/skeletal-animation/skeletal-animation-data-hub.ts b/cocos/3d/skeletal-animation/skeletal-animation-data-hub.ts index 31e70c02057..6e25b535e31 100644 --- a/cocos/3d/skeletal-animation/skeletal-animation-data-hub.ts +++ b/cocos/3d/skeletal-animation/skeletal-animation-data-hub.ts @@ -25,7 +25,7 @@ import { DataPoolManager } from './data-pool-manager'; import type { AnimationClip } from '../../animation/animation-clip'; -import { legacyCC } from '../../core/global-exports'; +import { cclegacy } from '../../core'; import { BAKE_SKELETON_CURVE_SYMBOL } from '../../animation/internal-symbols'; type BakeData = ReturnType; @@ -42,7 +42,7 @@ export class SkelAnimDataHub { let data = SkelAnimDataHub.pool.get(clip); if (!data || data.samples !== clip.sample) { // release outdated render data - if (data) { (legacyCC.director.root.dataPoolManager as DataPoolManager).releaseAnimationClip(clip); } + if (data) { (cclegacy.director.root.dataPoolManager as DataPoolManager).releaseAnimationClip(clip); } const frames = Math.ceil(clip.sample * clip.duration) + 1; const step = clip.sample; data = clip[BAKE_SKELETON_CURVE_SYMBOL](0, step, frames); diff --git a/cocos/3d/skeletal-animation/skeletal-animation-state.ts b/cocos/3d/skeletal-animation/skeletal-animation-state.ts index 909bc273b70..7e3b0cec679 100644 --- a/cocos/3d/skeletal-animation/skeletal-animation-state.ts +++ b/cocos/3d/skeletal-animation/skeletal-animation-state.ts @@ -24,14 +24,13 @@ */ import { JSB } from 'internal:constants'; -import { Mat4, Quat, Vec3 } from '../../core/math'; +import { Mat4, Quat, Vec3, cclegacy } from '../../core'; import { IAnimInfo, JointAnimationInfo } from './skeletal-animation-utils'; import { Node } from '../../scene-graph/node'; import type { AnimationClip } from '../../animation/animation-clip'; import { AnimationState } from '../../animation/animation-state'; import { SkeletalAnimation, Socket } from './skeletal-animation'; import { SkelAnimDataHub } from './skeletal-animation-data-hub'; -import { legacyCC } from '../../core/global-exports'; const m4_1 = new Mat4(); const m4_2 = new Mat4(); @@ -68,7 +67,7 @@ export class SkeletalAnimationState extends AnimationState { constructor (clip: AnimationClip, name = '') { super(clip, name); - this._animInfoMgr = legacyCC.director.root.dataPoolManager.jointAnimationInfo; + this._animInfoMgr = cclegacy.director.root.dataPoolManager.jointAnimationInfo; } public initialize (root: Node) { diff --git a/cocos/3d/skeletal-animation/skeletal-animation-utils.ts b/cocos/3d/skeletal-animation/skeletal-animation-utils.ts index d6fbcd05172..4c295d462b5 100644 --- a/cocos/3d/skeletal-animation/skeletal-animation-utils.ts +++ b/cocos/3d/skeletal-animation/skeletal-animation-utils.ts @@ -29,10 +29,9 @@ import { SkelAnimDataHub } from './skeletal-animation-data-hub'; import { getWorldTransformUntilRoot } from '../../animation/transform-utils'; import { Mesh } from '../assets/mesh'; import { Skeleton } from '../assets/skeleton'; -import { AABB } from '../../core/geometry'; +import { geometry, Mat4, Quat, Vec3 } from '../../core'; import { BufferUsageBit, Format, FormatInfos, MemoryUsageBit, Device, Buffer, BufferInfo, FormatFeatureBit } from '../../gfx'; -import { Mat4, Quat, Vec3 } from '../../core/math'; import { UBOSkinningAnimation } from '../../rendering/define'; import { Node } from '../../scene-graph'; import { ITextureBufferHandle, TextureBufferPool } from '../../render-scene/core/texture-buffer-pool'; @@ -114,7 +113,7 @@ export interface IJointTextureHandle { skeletonHash: number; readyToBeDeleted: boolean; handle: ITextureBufferHandle; - bounds: Map; + bounds: Map; animInfos?: IInternalJointAnimInfo[]; } @@ -124,7 +123,7 @@ const v3_min = new Vec3(); const v3_max = new Vec3(); const m4_1 = new Mat4(); const m4_2 = new Mat4(); -const ab_1 = new AABB(); +const ab_1 = new geometry.AABB(); export interface IChunkContent { skeleton: number; @@ -233,7 +232,7 @@ export class JointTexturePool { const mat = node ? getWorldTransformUntilRoot(node, skinningRoot, m4_1) : skeleton.inverseBindposes[j]; const bound = boneSpaceBounds[j]; if (bound) { - AABB.transform(ab_1, bound, mat); + geometry.AABB.transform(ab_1, bound, mat); ab_1.getBoundary(v3_3, v3_4); Vec3.min(v3_min, v3_min, v3_3); Vec3.max(v3_max, v3_max, v3_4); @@ -243,8 +242,8 @@ export class JointTexturePool { uploadJointData(textureBuffer, offset, node ? mat : Mat4.IDENTITY, j === 0); } } - const bounds = [new AABB()]; texture.bounds.set(mesh.hash, bounds); - AABB.fromPoints(bounds[0], v3_min, v3_max); + const bounds = [new geometry.AABB()]; texture.bounds.set(mesh.hash, bounds); + geometry.AABB.fromPoints(bounds[0], v3_min, v3_max); if (buildTexture) { this._pool.update(texture.handle, textureBuffer.buffer); this._textureBuffers.set(hash, texture); @@ -288,9 +287,9 @@ export class JointTexturePool { textureBuffer = new Float32Array(bufSize); buildTexture = true; } else { texture.refCount++; } const boneSpaceBounds = mesh.getBoneSpaceBounds(skeleton); - const bounds: AABB[] = []; texture.bounds.set(mesh.hash, bounds); + const bounds: geometry.AABB[] = []; texture.bounds.set(mesh.hash, bounds); for (let f = 0; f < frames; f++) { - bounds.push(new AABB(Inf, Inf, Inf, -Inf, -Inf, -Inf)); + bounds.push(new geometry.AABB(Inf, Inf, Inf, -Inf, -Inf, -Inf)); } for (let f = 0, offset = 0; f < frames; f++) { const bound = bounds[f]; @@ -312,7 +311,7 @@ export class JointTexturePool { const boneSpaceBound = boneSpaceBounds[j]; if (boneSpaceBound) { const transform = bindposeCorrection ? Mat4.multiply(m4_2, mat, bindposeCorrection) : mat; - AABB.transform(ab_1, boneSpaceBound, transform); + geometry.AABB.transform(ab_1, boneSpaceBound, transform); ab_1.getBoundary(v3_3, v3_4); Vec3.min(bound.center, bound.center, v3_3); Vec3.max(bound.halfExtents, bound.halfExtents, v3_4); @@ -322,7 +321,7 @@ export class JointTexturePool { uploadJointData(textureBuffer, offset, transformValid ? m4_1 : Mat4.IDENTITY, j === 0); } } - AABB.fromPoints(bound, bound.center, bound.halfExtents); + geometry.AABB.fromPoints(bound, bound.center, bound.halfExtents); } if (buildTexture) { this._pool.update(texture.handle, textureBuffer.buffer); diff --git a/cocos/3d/skeletal-animation/skeletal-animation.ts b/cocos/3d/skeletal-animation/skeletal-animation.ts index 4d9a4fe5b81..31565bd97eb 100644 --- a/cocos/3d/skeletal-animation/skeletal-animation.ts +++ b/cocos/3d/skeletal-animation/skeletal-animation.ts @@ -27,7 +27,7 @@ import { ccclass, executeInEditMode, executionOrder, help, menu, tooltip, type, serializable, editable, } from 'cc.decorator'; import { SkinnedMeshRenderer } from '../skinned-mesh-renderer'; -import { Mat4 } from '../../core/math'; +import { Mat4, cclegacy, js } from '../../core'; import { DataPoolManager } from './data-pool-manager'; import { Node } from '../../scene-graph/node'; import { AnimationClip } from '../../animation/animation-clip'; @@ -35,8 +35,6 @@ import { Animation } from '../../animation/animation-component'; import { SkelAnimDataHub } from './skeletal-animation-data-hub'; import { SkeletalAnimationState } from './skeletal-animation-state'; import { getWorldTransformUntilRoot } from '../../animation/transform-utils'; -import { legacyCC } from '../../core/global-exports'; -import { js } from '../../core/utils/js'; import type { AnimationState } from '../../animation/animation-state'; import { assertIsTrue } from '../../core/data/utils/asserts'; import { getGlobalAnimationManager } from '../../animation/global-animation-manager'; @@ -180,7 +178,7 @@ export class SkeletalAnimation extends Animation { public onDestroy () { super.onDestroy(); - (legacyCC.director.root.dataPoolManager as DataPoolManager).jointAnimationInfo.destroy(this.node.uuid); + (cclegacy.director.root.dataPoolManager as DataPoolManager).jointAnimationInfo.destroy(this.node.uuid); getGlobalAnimationManager().removeSockets(this.node, this._sockets); this._removeAllUsers(); } diff --git a/cocos/3d/skinned-mesh-renderer/deprecated.ts b/cocos/3d/skinned-mesh-renderer/deprecated.ts index f4780bd92d7..7db5d063f7c 100644 --- a/cocos/3d/skinned-mesh-renderer/deprecated.ts +++ b/cocos/3d/skinned-mesh-renderer/deprecated.ts @@ -25,26 +25,25 @@ import { SkinnedMeshRenderer } from './skinned-mesh-renderer'; import { SkinnedMeshBatchRenderer, SkinnedMeshUnit } from './skinned-mesh-batch-renderer'; -import { js } from '../../core/utils/js'; -import { legacyCC } from '../../core/global-exports'; +import { js, cclegacy } from '../../core'; /** * Alias of [[SkinnedMeshRenderer]] * @deprecated Since v1.2 */ export { SkinnedMeshRenderer as SkinningModelComponent }; -legacyCC.SkinningModelComponent = SkinnedMeshRenderer; +cclegacy.SkinningModelComponent = SkinnedMeshRenderer; js.setClassAlias(SkinnedMeshRenderer, 'cc.SkinningModelComponent'); /** * Alias of [[SkinnedMeshUnit]] * @deprecated Since v1.2 */ export { SkinnedMeshUnit as SkinningModelUnit }; -legacyCC.SkinningModelUnit = SkinnedMeshUnit; +cclegacy.SkinningModelUnit = SkinnedMeshUnit; js.setClassAlias(SkinnedMeshUnit, 'cc.SkinningModelUnit'); /** * Alias of [[SkinnedMeshBatchRenderer]] * @deprecated Since v1.2 */ export { SkinnedMeshBatchRenderer as BatchedSkinningModelComponent }; -legacyCC.BatchedSkinningModelComponent = SkinnedMeshBatchRenderer; +cclegacy.BatchedSkinningModelComponent = SkinnedMeshBatchRenderer; js.setClassAlias(SkinnedMeshBatchRenderer, 'cc.BatchedSkinningModelComponent'); diff --git a/cocos/3d/skinned-mesh-renderer/skinned-mesh-batch-renderer.ts b/cocos/3d/skinned-mesh-renderer/skinned-mesh-batch-renderer.ts index 58e785c7c7f..2cbd57b2e99 100644 --- a/cocos/3d/skinned-mesh-renderer/skinned-mesh-batch-renderer.ts +++ b/cocos/3d/skinned-mesh-renderer/skinned-mesh-batch-renderer.ts @@ -32,12 +32,10 @@ import { Material } from '../../asset/assets/material'; import { Mesh } from '../assets/mesh'; import { Skeleton } from '../assets/skeleton'; import { Texture2D } from '../../asset/assets/texture-2d'; -import { CCString } from '../../core/data/utils/attribute'; +import { CCString, Mat4, Vec2, Vec3, cclegacy } from '../../core'; import { AttributeName, FormatInfos, Format, Type, Attribute, BufferTextureCopy } from '../../gfx'; -import { Mat4, Vec2, Vec3 } from '../../core/math'; import { mapBuffer, readBuffer, writeBuffer } from '../misc/buffer'; import { SkinnedMeshRenderer } from './skinned-mesh-renderer'; -import { legacyCC } from '../../core/global-exports'; const repeat = (n: number) => n - Math.floor(n); const batch_id: Attribute = new Attribute(AttributeName.ATTR_BATCH_ID, Format.R32F); @@ -477,7 +475,7 @@ export class SkinnedMeshBatchRenderer extends SkinnedMeshRenderer { } } const gfxTex = target.getGFXTexture()!; - const { device } = legacyCC.director.root!; + const { device } = cclegacy.director.root!; if (texBuffers.length > 0) { device.copyBuffersToTexture(texBuffers, gfxTex, texBufferRegions); } if (texImages.length > 0) { device.copyTexImagesToTexture(texImages, gfxTex, texImageRegions); } } @@ -555,7 +553,7 @@ export class SkinnedMeshBatchRenderer extends SkinnedMeshRenderer { const oldMeshData = mesh.data; const newDataView = new DataView(newMeshData.buffer); const oldDataView = new DataView(oldMeshData.buffer); - const { isLittleEndian } = legacyCC.sys; + const { isLittleEndian } = cclegacy.sys; for (const b in modifiedBundles) { const newBundle = newMeshStruct.vertexBundles[b]; const oldBundle = mesh.struct.vertexBundles[b]; diff --git a/cocos/3d/skinned-mesh-renderer/skinned-mesh-renderer.ts b/cocos/3d/skinned-mesh-renderer/skinned-mesh-renderer.ts index c194aaec80b..e0ba4f70f22 100644 --- a/cocos/3d/skinned-mesh-renderer/skinned-mesh-renderer.ts +++ b/cocos/3d/skinned-mesh-renderer/skinned-mesh-renderer.ts @@ -32,7 +32,7 @@ import { Skeleton } from '../assets/skeleton'; import { Node } from '../../scene-graph/node'; import { MeshRenderer } from '../framework/mesh-renderer'; import type { SkeletalAnimation } from '../skeletal-animation'; -import { legacyCC } from '../../core/global-exports'; +import { cclegacy } from '../../core'; import { SkinningModel } from '../models/skinning-model'; import { BakedSkinningModel } from '../models/baked-skinning-model'; import { assertIsTrue } from '../../core/data/utils/asserts'; @@ -132,7 +132,7 @@ export class SkinnedMeshRenderer extends MeshRenderer { if (!force && this._modelType === modelType) { return; } this._modelType = modelType; if (this._model) { - legacyCC.director.root.destroyModel(this._model); + cclegacy.director.root.destroyModel(this._model); this._model = null; this._models.length = 0; this._updateModels(); diff --git a/cocos/animation/animation-clip.ts b/cocos/animation/animation-clip.ts index 56f231088ce..bca57917e06 100644 --- a/cocos/animation/animation-clip.ts +++ b/cocos/animation/animation-clip.ts @@ -27,13 +27,10 @@ import { ccclass, serializable } from 'cc.decorator'; import { DEBUG } from 'internal:constants'; import { Asset } from '../asset/assets/asset'; import { SpriteFrame } from '../2d/assets/sprite-frame'; -import { errorID, warnID } from '../core/platform/debug'; +import { errorID, warnID, cclegacy, js, geometry, approx, clamp, Mat4, Quat, Vec3, murmurhash2_32_gc } from '../core'; import { binarySearchEpsilon } from '../core/algorithm/binary-search'; -import { murmurhash2_32_gc } from '../core/algorithm/murmurhash2_gc'; import { SkelAnimDataHub } from '../3d/skeletal-animation/skeletal-animation-data-hub'; import { WrapMode as AnimationWrapMode, WrapMode } from './types'; -import { legacyCC } from '../core/global-exports'; -import { approx, clamp, Mat4, Quat, Vec3 } from '../core/math'; import { Node } from '../scene-graph/node'; import { assertIsTrue } from '../core/data/utils/asserts'; import type { PoseOutput } from './pose-output'; @@ -46,11 +43,9 @@ import { Range } from './tracks/utils'; import { ObjectTrack } from './tracks/object-track'; import type { ExoticAnimation } from './exotic-animation/exotic-animation'; import './exotic-animation/exotic-animation'; -import { array } from '../core/utils/js'; import type { AnimationMask } from './marionette/animation-mask'; import { getGlobalAnimationManager } from './global-animation-manager'; import { EmbeddedPlayableState, EmbeddedPlayer } from './embedded-player/embedded-player'; -import { WrapModeMask } from '../core/geometry/curve'; export declare namespace AnimationClip { export interface IEvent { @@ -392,8 +387,8 @@ export class AnimationClip extends Asset { } public destroy () { - if (legacyCC.director.root?.dataPoolManager) { - (legacyCC.director.root.dataPoolManager).releaseAnimationClip(this); + if (cclegacy.director.root?.dataPoolManager) { + (cclegacy.director.root.dataPoolManager).releaseAnimationClip(this); } SkelAnimDataHub.destroy(this); return super.destroy(); @@ -497,7 +492,7 @@ export class AnimationClip extends Asset { } const nRemovalTracks = removals.length; for (let iRemovalTrack = 0; iRemovalTrack < nRemovalTracks; ++iRemovalTrack) { - array.remove(tracks, removals[iRemovalTrack]); + js.array.remove(tracks, removals[iRemovalTrack]); } tracks.push(...newTracks); } @@ -898,7 +893,7 @@ export declare namespace AnimationClip { export type WrapMode = WrapMode_; } -legacyCC.AnimationClip = AnimationClip; +cclegacy.AnimationClip = AnimationClip; interface TrackEvalStatus { binding: RuntimeBinding; @@ -1425,14 +1420,14 @@ class EventEvaluator { do { if (lastIndex !== eventIndex) { if (direction === -1 && lastIndex === 0 && eventIndex > 0) { - if ((wrapMode & WrapModeMask.PingPong) === WrapModeMask.PingPong) { + if ((wrapMode & geometry.WrapModeMask.PingPong) === geometry.WrapModeMask.PingPong) { direction *= -1; } else { lastIndex = length; } lastIterations++; } else if (direction === 1 && lastIndex === length - 1 && eventIndex < length - 1) { - if ((wrapMode & WrapModeMask.PingPong) === WrapModeMask.PingPong) { + if ((wrapMode & geometry.WrapModeMask.PingPong) === geometry.WrapModeMask.PingPong) { direction *= -1; } else { lastIndex = -1; diff --git a/cocos/animation/animation-component.ts b/cocos/animation/animation-component.ts index b45f9038ce5..8f920dec2c8 100644 --- a/cocos/animation/animation-component.ts +++ b/cocos/animation/animation-component.ts @@ -26,15 +26,12 @@ import { ccclass, executeInEditMode, executionOrder, help, menu, tooltip, type, serializable } from 'cc.decorator'; import { EDITOR, TEST } from 'internal:constants'; import { Component } from '../scene-graph/component'; -import { Eventify } from '../core/event'; -import { warnID } from '../core/platform/debug'; +import { Eventify, warnID, js, cclegacy } from '../core'; import * as ArrayUtils from '../core/utils/array'; import { createMap } from '../core/utils/js-typed'; import { AnimationClip } from './animation-clip'; import { AnimationState, EventType } from './animation-state'; import { CrossFade } from './cross-fade'; -import { legacyCC } from '../core/global-exports'; -import { js } from '../core/utils/js'; /** * @en @@ -176,7 +173,7 @@ export class Animation extends Eventify(Component) { } public start () { - if ((!EDITOR || legacyCC.GAME_VIEW) && (this.playOnLoad && !this._hasBeenPlayed) && this._defaultClip) { + if ((!EDITOR || cclegacy.GAME_VIEW) && (this.playOnLoad && !this._hasBeenPlayed) && this._defaultClip) { this.crossFade(this._defaultClip.name, 0); } } @@ -502,12 +499,12 @@ function equalClips (clip1: AnimationClip | null, clip2: AnimationClip | null) { return !!clip1 && !!clip2 && (clip1._uuid === clip2._uuid) && clip1._uuid; } -legacyCC.Animation = Animation; +cclegacy.Animation = Animation; /** * Alias of [[Animation]] * @deprecated Since v1.2 */ export { Animation as AnimationComponent }; -legacyCC.AnimationComponent = Animation; +cclegacy.AnimationComponent = Animation; js.setClassAlias(Animation, 'cc.AnimationComponent'); diff --git a/cocos/animation/animation-curve.ts b/cocos/animation/animation-curve.ts index b634dcb4910..963a6185726 100644 --- a/cocos/animation/animation-curve.ts +++ b/cocos/animation/animation-curve.ts @@ -24,13 +24,11 @@ */ import { binarySearchEpsilon as binarySearch } from '../core/algorithm/binary-search'; -import { lerp, Quat } from '../core/math'; -import { errorID } from '../core/platform/debug'; +import { lerp, Quat, errorID, cclegacy } from '../core'; import { ValueType } from '../core/value-types'; import { bezierByTime, BezierControlPoints } from '../core/curves/bezier'; import * as easing from '../core/algorithm/easing'; import { ILerpable, isLerpable } from './types'; -import { legacyCC } from '../core/global-exports'; import type * as legacy from './legacy-clip-data'; /** @@ -64,7 +62,7 @@ export class RatioSampler { return this._findRatio(this.ratios, ratio); } } -legacyCC.RatioSampler = RatioSampler; +cclegacy.RatioSampler = RatioSampler; /** * @en @@ -216,7 +214,7 @@ export class AnimCurve { return this._values.length === 1; } } -legacyCC.AnimCurve = AnimCurve; +cclegacy.AnimCurve = AnimCurve; export class EventInfo { public events: any[] = []; @@ -261,7 +259,7 @@ export function sampleAnimationCurve (curve: AnimCurve, sampler: RatioSampler, r // eslint-disable-next-line @typescript-eslint/no-unsafe-return return curve.valueAt(index); } -legacyCC.sampleAnimationCurve = sampleAnimationCurve; +cclegacy.sampleAnimationCurve = sampleAnimationCurve; /** * @en diff --git a/cocos/animation/animation-manager.ts b/cocos/animation/animation-manager.ts index 0ea24ed8c9e..bb70a597a19 100644 --- a/cocos/animation/animation-manager.ts +++ b/cocos/animation/animation-manager.ts @@ -24,15 +24,13 @@ */ import { ccclass } from 'cc.decorator'; -import System from '../core/system'; +import { System, errorID, cclegacy } from '../core'; import { director, Director } from '../game/director'; -import { errorID } from '../core/platform/debug'; import { Node } from '../scene-graph'; import { MutableForwardIterator } from '../core/utils/array'; import { LegacyBlendStateBuffer } from '../3d/skeletal-animation/skeletal-animation-blending'; import { AnimationState } from './animation-state'; import type { CrossFade } from './cross-fade'; -import { legacyCC } from '../core/global-exports'; import { IJointTransform, deleteTransform, getTransform, getWorldMatrix } from './skeletal-animation-utils'; import { Socket } from '../3d/skeletal-animation/skeletal-animation'; @@ -95,7 +93,7 @@ export class AnimationManager extends System { } this._blendStateBuffer.apply(); - const stamp = legacyCC.director.getTotalFrames(); + const stamp = cclegacy.director.getTotalFrames(); for (let i = 0, l = _sockets.length; i < l; i++) { const { target, transform } = _sockets[i]; target.matrix = getWorldMatrix(transform, stamp); @@ -169,4 +167,4 @@ director.on(Director.EVENT_INIT, () => { director.registerSystem(AnimationManager.ID, animationManager, System.Priority.HIGH); }); -legacyCC.AnimationManager = AnimationManager; +cclegacy.AnimationManager = AnimationManager; diff --git a/cocos/animation/animation-state.ts b/cocos/animation/animation-state.ts index 3ab6a37ab6c..6904f70dd24 100644 --- a/cocos/animation/animation-state.ts +++ b/cocos/animation/animation-state.ts @@ -28,15 +28,13 @@ import { Node } from '../scene-graph/node'; import { AnimationClip } from './animation-clip'; import { Playable } from './playable'; import { WrapMode, WrappedInfo } from './types'; -import { legacyCC } from '../core/global-exports'; +import { cclegacy, debug, geometry } from '../core'; import { ccenum } from '../core/value-types/enum'; import { assertIsTrue } from '../core/data/utils/asserts'; -import { debug } from '../core/platform/debug'; import { AnimationMask } from './marionette/animation-mask'; import { PoseOutput } from './pose-output'; import { BlendStateBuffer } from '../3d/skeletal-animation/skeletal-animation-blending'; import { getGlobalAnimationManager } from './global-animation-manager'; -import { WrapModeMask } from '../core/geometry/curve'; /** * @en The event type supported by Animation @@ -127,7 +125,7 @@ export class AnimationState extends Playable { // dynamic change wrapMode will need reset time to 0 this.time = 0; - if (value & WrapModeMask.Loop) { + if (value & geometry.WrapModeMask.Loop) { this.repeatCount = Infinity; } else { this.repeatCount = 1; @@ -156,8 +154,8 @@ export class AnimationState extends Playable { set repeatCount (value: number) { this._repeatCount = value; - const shouldWrap = this._wrapMode & WrapModeMask.ShouldWrap; - const reverse = (this.wrapMode & WrapModeMask.Reverse) === WrapModeMask.Reverse; + const shouldWrap = this._wrapMode & geometry.WrapModeMask.ShouldWrap; + const reverse = (this.wrapMode & geometry.WrapModeMask.Reverse) === geometry.WrapModeMask.Reverse; if (value === Infinity && !shouldWrap && !reverse) { this._useSimpleProcess = true; } else { @@ -363,7 +361,7 @@ export class AnimationState extends Playable { this._playbackRange.max = clip.duration; this._playbackDuration = clip.duration; - if ((this.wrapMode & WrapModeMask.Loop) === WrapModeMask.Loop) { + if ((this.wrapMode & geometry.WrapModeMask.Loop) === geometry.WrapModeMask.Loop) { this.repeatCount = Infinity; } else { this.repeatCount = 1; @@ -381,7 +379,7 @@ export class AnimationState extends Playable { }); } - if (!(EDITOR && !legacyCC.GAME_VIEW)) { + if (!(EDITOR && !cclegacy.GAME_VIEW)) { if (clip.containsAnyEvent()) { this._clipEventEval = clip.createEventEvaluator(this._targetNode); } @@ -475,7 +473,7 @@ export class AnimationState extends Playable { this._currentFramePlayed = false; this.time = time || 0.0; - if (!EDITOR || legacyCC.GAME_VIEW) { + if (!EDITOR || cclegacy.GAME_VIEW) { const info = this.getWrappedInfo(time, this._wrappedInfo); this._clipEventEval?.ignore(info.ratio, info.direction); } @@ -507,7 +505,7 @@ export class AnimationState extends Playable { public sample () { const info = this.getWrappedInfo(this.time, this._wrappedInfo); this._sampleCurves(info.time); - if (!EDITOR || legacyCC.GAME_VIEW) { + if (!EDITOR || cclegacy.GAME_VIEW) { this._sampleEvents(info); } this._sampleEmbeddedPlayers(info); @@ -606,7 +604,7 @@ export class AnimationState extends Playable { if (this._clipEventEval || this._clipEmbeddedPlayerEval) { const wrapInfo = this.getWrappedInfo(this.time, this._wrappedInfo); - if (!EDITOR || legacyCC.GAME_VIEW) { + if (!EDITOR || cclegacy.GAME_VIEW) { this._sampleEvents(wrapInfo); } @@ -630,7 +628,7 @@ export class AnimationState extends Playable { const wrapMode = this.wrapMode; let needReverse = false; - if ((wrapMode & WrapModeMask.PingPong) === WrapModeMask.PingPong) { + if ((wrapMode & geometry.WrapModeMask.PingPong) === geometry.WrapModeMask.PingPong) { const isEnd = currentIterations - (currentIterations | 0) === 0; if (isEnd && (currentIterations > 0)) { currentIterations -= 1; @@ -641,7 +639,7 @@ export class AnimationState extends Playable { needReverse = !needReverse; } } - if ((wrapMode & WrapModeMask.Reverse) === WrapModeMask.Reverse) { + if ((wrapMode & geometry.WrapModeMask.Reverse) === geometry.WrapModeMask.Reverse) { needReverse = !needReverse; } return needReverse; @@ -693,7 +691,7 @@ export class AnimationState extends Playable { } let needReverse = false; - const shouldWrap = this._wrapMode & WrapModeMask.ShouldWrap; + const shouldWrap = this._wrapMode & geometry.WrapModeMask.ShouldWrap; if (shouldWrap) { needReverse = this._needReverse(currentIterations); } @@ -751,4 +749,4 @@ export class AnimationState extends Playable { } } -legacyCC.AnimationState = AnimationState; +cclegacy.AnimationState = AnimationState; diff --git a/cocos/animation/compression.ts b/cocos/animation/compression.ts index 27755b928ba..2d7192e9f01 100644 --- a/cocos/animation/compression.ts +++ b/cocos/animation/compression.ts @@ -1,4 +1,4 @@ -import { approx } from '../core/math/utils'; +import { approx } from '../core'; /** * Removes keys which are linear interpolations of surrounding keys. diff --git a/cocos/animation/cross-fade.ts b/cocos/animation/cross-fade.ts index c7dd55ac482..bcf8f0e3443 100644 --- a/cocos/animation/cross-fade.ts +++ b/cocos/animation/cross-fade.ts @@ -23,7 +23,7 @@ THE SOFTWARE. */ -import { clamp01 } from '../core/math/utils'; +import { clamp01 } from '../core'; import { remove } from '../core/utils/array'; import { AnimationState } from './animation-state'; import { Playable } from './playable'; diff --git a/cocos/animation/cubic-spline-value.ts b/cocos/animation/cubic-spline-value.ts index fef026ab3a1..235082b6fda 100644 --- a/cocos/animation/cubic-spline-value.ts +++ b/cocos/animation/cubic-spline-value.ts @@ -24,7 +24,7 @@ */ import { ccclass, serializable } from 'cc.decorator'; -import { Quat, Vec2, Vec3, Vec4 } from '../core/math'; +import { Quat, Vec2, Vec3, Vec4 } from '../core'; import { ILerpable } from './types'; interface ICubicSplineValue extends ILerpable { diff --git a/cocos/animation/embedded-player/embedded-animation-clip-player.ts b/cocos/animation/embedded-player/embedded-animation-clip-player.ts index 00a8bc3fd8d..517ce830182 100644 --- a/cocos/animation/embedded-player/embedded-animation-clip-player.ts +++ b/cocos/animation/embedded-player/embedded-animation-clip-player.ts @@ -1,5 +1,5 @@ import { ccclass, serializable } from 'cc.decorator'; -import { errorID } from '../../core/platform/debug'; +import { errorID } from '../../core'; import type { Node } from '../../scene-graph/node'; import { AnimationClip } from '../animation-clip'; import { AnimationState } from '../animation-state'; diff --git a/cocos/animation/embedded-player/embedded-particle-system-player.ts b/cocos/animation/embedded-player/embedded-particle-system-player.ts index eab1fa0f8a8..53e7fb7b37e 100644 --- a/cocos/animation/embedded-player/embedded-particle-system-player.ts +++ b/cocos/animation/embedded-player/embedded-particle-system-player.ts @@ -1,6 +1,6 @@ import { ccclass, serializable } from 'cc.decorator'; import type { ParticleSystem } from '../../particle'; -import { warn } from '../../core/platform/debug'; +import { warn } from '../../core'; import type { Node } from '../../scene-graph/node'; import { getClassByName } from '../../core/utils/js-typed'; import { CLASS_NAME_PREFIX_ANIM } from '../define'; diff --git a/cocos/animation/exotic-animation/exotic-animation.ts b/cocos/animation/exotic-animation/exotic-animation.ts index 3fb6678d683..71bc1289edb 100644 --- a/cocos/animation/exotic-animation/exotic-animation.ts +++ b/cocos/animation/exotic-animation/exotic-animation.ts @@ -2,7 +2,7 @@ import { EDITOR, TEST } from 'internal:constants'; import { binarySearchEpsilon } from '../../core/algorithm/binary-search'; import { ccclass, serializable } from '../../core/data/decorators'; import { assertIsTrue } from '../../core/data/utils/asserts'; -import { clamp, lerp, Quat, Vec3 } from '../../core/math'; +import { clamp, lerp, Quat, Vec3 } from '../../core'; import { CLASS_NAME_PREFIX_ANIM } from '../define'; import { Binder, RuntimeBinding, TrackBinding, TrackPath } from '../tracks/track'; diff --git a/cocos/animation/global-animation-manager.ts b/cocos/animation/global-animation-manager.ts index 525f100b6aa..2daebf943e5 100644 --- a/cocos/animation/global-animation-manager.ts +++ b/cocos/animation/global-animation-manager.ts @@ -1,7 +1,7 @@ -import { legacyCC } from '../core/global-exports'; +import { cclegacy } from '../core'; import type { AnimationManager } from './animation-manager'; export function getGlobalAnimationManager () { - const animationManager = legacyCC.director.getAnimationManager() as AnimationManager; + const animationManager = cclegacy.director.getAnimationManager() as AnimationManager; return animationManager; } diff --git a/cocos/animation/legacy-clip-data.ts b/cocos/animation/legacy-clip-data.ts index 710d4975506..33a61deac2d 100644 --- a/cocos/animation/legacy-clip-data.ts +++ b/cocos/animation/legacy-clip-data.ts @@ -4,13 +4,12 @@ import * as easing from '../core/algorithm/easing'; import { BezierControlPoints } from '../core/curves/bezier'; import { CompactValueTypeArray } from '../core/data/utils/compact-value-type-array'; import { AnimCurve, RatioSampler } from './animation-curve'; -import { QuatCurve, QuatInterpolationMode, RealCurve, RealInterpolationMode, RealKeyframeValue, TangentWeightMode } from '../core/curves'; +import { QuatCurve, QuatInterpolationMode, RealCurve, RealInterpolationMode, RealKeyframeValue, TangentWeightMode, + warnID, Color, Quat, Size, Vec2, Vec3, Vec4 } from '../core'; import { assertIsTrue } from '../core/data/utils/asserts'; import { Track, TrackPath } from './tracks/track'; import { UntypedTrack } from './tracks/untyped-track'; -import { warnID } from '../core/platform'; import { RealTrack } from './tracks/real-track'; -import { Color, Quat, Size, Vec2, Vec3, Vec4 } from '../core/math'; import { CubicSplineNumberValue, CubicSplineQuatValue, CubicSplineVec2Value, CubicSplineVec3Value, CubicSplineVec4Value } from './cubic-spline-value'; import { ColorTrack } from './tracks/color-track'; import { VectorTrack } from './tracks/vector-track'; diff --git a/cocos/animation/marionette/__tmp__/graph-from-description.ts b/cocos/animation/marionette/__tmp__/graph-from-description.ts index eda785fcfbf..96b98530178 100644 --- a/cocos/animation/marionette/__tmp__/graph-from-description.ts +++ b/cocos/animation/marionette/__tmp__/graph-from-description.ts @@ -1,4 +1,4 @@ -import { Vec2 } from '../../../core/math/vec2'; +import { Vec2 } from '../../../core'; import { AnimationGraph, State, StateMachine, AnimationTransition } from '../animation-graph'; import { Condition, BinaryCondition, TriggerCondition, UnaryCondition } from '../condition'; import { ClipMotion } from '../clip-motion'; diff --git a/cocos/animation/marionette/animation-blend-2d.ts b/cocos/animation/marionette/animation-blend-2d.ts index d6cbba66f82..6bccc02e159 100644 --- a/cocos/animation/marionette/animation-blend-2d.ts +++ b/cocos/animation/marionette/animation-blend-2d.ts @@ -1,4 +1,4 @@ -import { Vec2 } from '../../core/math'; +import { Vec2 } from '../../core'; import { ccclass } from '../../core/data/class-decorator'; import { ccenum } from '../../core/value-types/enum'; import { createEval } from './create-eval'; diff --git a/cocos/animation/marionette/animation-graph.ts b/cocos/animation/marionette/animation-graph.ts index 4d3d3ce877f..8481572d819 100644 --- a/cocos/animation/marionette/animation-graph.ts +++ b/cocos/animation/marionette/animation-graph.ts @@ -13,11 +13,10 @@ import { MotionState } from './motion-state'; import { State, outgoingsSymbol, incomingsSymbol, InteractiveState } from './state'; import { AnimationMask } from './animation-mask'; import { EditorExtendable } from '../../core/data/editor-extendable'; -import { array } from '../../core/utils/js'; import { move } from '../../core/algorithm/move'; import { onAfterDeserializedTag } from '../../core/data/deserialize-symbols'; import { CLASS_NAME_PREFIX_ANIM } from '../define'; -import { clamp } from '../../core/math'; +import { clamp, js } from '../../core'; export { State }; @@ -896,7 +895,7 @@ export class AnimationGraph extends Asset implements AnimationGraphRunTime { * @param index Index to the layer to remove. */ public removeLayer (index: number) { - array.removeAt(this._layers, index); + js.array.removeAt(this._layers, index); } /** diff --git a/cocos/animation/marionette/blend-2d.ts b/cocos/animation/marionette/blend-2d.ts index b54fd198b8d..7c7e31c8383 100644 --- a/cocos/animation/marionette/blend-2d.ts +++ b/cocos/animation/marionette/blend-2d.ts @@ -1,5 +1,5 @@ import { assertIsTrue } from '../../core/data/utils/asserts'; -import { Vec2, Vec3 } from '../../core/math'; +import { Vec2, Vec3 } from '../../core'; /** * Blends given samples using simple directional algorithm. diff --git a/cocos/animation/marionette/graph-debug.ts b/cocos/animation/marionette/graph-debug.ts index 2377a7029db..cc5665bcca0 100644 --- a/cocos/animation/marionette/graph-debug.ts +++ b/cocos/animation/marionette/graph-debug.ts @@ -1,7 +1,7 @@ import { EDITOR } from 'internal:constants'; import { editorExtrasTag } from '../../core/data'; -import { debug } from '../../core/platform/debug'; +import { debug } from '../../core'; import { AnimationBlend } from './animation-blend'; import { ClipMotion } from './clip-motion'; diff --git a/cocos/animation/marionette/graph-eval.ts b/cocos/animation/marionette/graph-eval.ts index eca5145ee50..859b734b354 100644 --- a/cocos/animation/marionette/graph-eval.ts +++ b/cocos/animation/marionette/graph-eval.ts @@ -3,6 +3,7 @@ import { AnimationGraph, Layer, StateMachine, State, isAnimationTransition, SubStateMachine, EmptyState, EmptyStateTransition, TransitionInterruptionSource, } from './animation-graph'; +//TODO(minggo): core should export it. import { assertIsTrue, assertIsNonNullable } from '../../core/data/utils/asserts'; import { MotionEval, MotionEvalContext } from './motion'; import type { Node } from '../../scene-graph/node'; @@ -12,7 +13,7 @@ import { BindContext, validateVariableExistence, validateVariableType, VariableT import { ConditionEval, TriggerCondition } from './condition'; import { MotionState } from './motion-state'; import { AnimationMask } from './animation-mask'; -import { warnID } from '../../core/platform/debug'; +import { warnID } from '../../core'; import { BlendStateBuffer, LayeredBlendStateBuffer } from '../../3d/skeletal-animation/skeletal-animation-blending'; import { MAX_ANIMATION_LAYER } from '../../3d/skeletal-animation/limits'; import { clearWeightsStats, getWeightsStats, graphDebug, graphDebugGroup, graphDebugGroupEnd, GRAPH_DEBUG_ENABLED } from './graph-debug'; diff --git a/cocos/animation/playable.ts b/cocos/animation/playable.ts index d53b5017331..c0b0d66aa61 100644 --- a/cocos/animation/playable.ts +++ b/cocos/animation/playable.ts @@ -23,7 +23,7 @@ THE SOFTWARE. */ -import { getError } from '../core/platform/debug'; +import { getError } from '../core'; export class Playable { /** diff --git a/cocos/animation/skeletal-animation-utils.ts b/cocos/animation/skeletal-animation-utils.ts index 09c9df1f245..e702d16d2e1 100644 --- a/cocos/animation/skeletal-animation-utils.ts +++ b/cocos/animation/skeletal-animation-utils.ts @@ -23,7 +23,7 @@ THE SOFTWARE. */ -import { Mat4 } from '../core/math'; +import { Mat4 } from '../core'; import { Node } from '../scene-graph/node'; const stack: IJointTransform[] = []; diff --git a/cocos/animation/target-path.ts b/cocos/animation/target-path.ts index 575d490a500..d344e608c8a 100644 --- a/cocos/animation/target-path.ts +++ b/cocos/animation/target-path.ts @@ -25,7 +25,7 @@ import { ccclass, serializable } from 'cc.decorator'; import { Node } from '../scene-graph/node'; -import { warnID } from '../core/platform/debug'; +import { warnID } from '../core'; /** * @deprecated Since V3.3, use [[TrackPath]] instead. diff --git a/cocos/animation/tracks/color-track.ts b/cocos/animation/tracks/color-track.ts index 0eaf9bd7a41..3780b09f1c7 100644 --- a/cocos/animation/tracks/color-track.ts +++ b/cocos/animation/tracks/color-track.ts @@ -1,6 +1,6 @@ import { ccclass, serializable } from 'cc.decorator'; import { RealCurve } from '../../core/curves'; -import { Color } from '../../core/math'; +import { Color } from '../../core'; import { CLASS_NAME_PREFIX_ANIM, createEvalSymbol } from '../define'; import { Channel, RealChannel, RuntimeBinding, Track } from './track'; import { maskIfEmpty } from './utils'; diff --git a/cocos/animation/tracks/quat-track.ts b/cocos/animation/tracks/quat-track.ts index 80a2b522a7e..eea44cb562d 100644 --- a/cocos/animation/tracks/quat-track.ts +++ b/cocos/animation/tracks/quat-track.ts @@ -2,7 +2,7 @@ import { ccclass } from 'cc.decorator'; import { QuatCurve } from '../../core/curves'; import { CLASS_NAME_PREFIX_ANIM, createEvalSymbol } from '../define'; import { SingleChannelTrack } from './track'; -import { Quat } from '../../core/math'; +import { Quat } from '../../core'; /** * @en diff --git a/cocos/animation/tracks/size-track.ts b/cocos/animation/tracks/size-track.ts index 2ef14f330d0..ce00e3007b4 100644 --- a/cocos/animation/tracks/size-track.ts +++ b/cocos/animation/tracks/size-track.ts @@ -1,6 +1,6 @@ import { ccclass, serializable } from 'cc.decorator'; import { RealCurve } from '../../core/curves'; -import { Size } from '../../core/math'; +import { Size } from '../../core'; import { CLASS_NAME_PREFIX_ANIM, createEvalSymbol } from '../define'; import { Channel, RealChannel, RuntimeBinding, Track } from './track'; import { maskIfEmpty } from './utils'; diff --git a/cocos/animation/tracks/track.ts b/cocos/animation/tracks/track.ts index 86fe5a2dffb..d0342c47bc2 100644 --- a/cocos/animation/tracks/track.ts +++ b/cocos/animation/tracks/track.ts @@ -1,11 +1,10 @@ import { ccclass, serializable, uniquelyReferenced } from 'cc.decorator'; import { SUPPORT_JIT } from 'internal:constants'; import type { Component } from '../../scene-graph/component'; -import type { ObjectCurve, QuatCurve, RealCurve } from '../../core/curves'; +import type { ObjectCurve, QuatCurve, RealCurve } from '../../core'; import { assertIsTrue } from '../../core/data/utils/asserts'; -import { errorID, warnID } from '../../core/platform'; +import { errorID, warnID, js } from '../../core'; import { Node } from '../../scene-graph'; -import { js } from '../../core/utils/js'; import { CLASS_NAME_PREFIX_ANIM, createEvalSymbol } from '../define'; import type { AnimationMask } from '../marionette/animation-mask'; import { PoseOutput } from '../pose-output'; diff --git a/cocos/animation/tracks/untyped-track.ts b/cocos/animation/tracks/untyped-track.ts index 5eca046b04a..9c7c825edff 100644 --- a/cocos/animation/tracks/untyped-track.ts +++ b/cocos/animation/tracks/untyped-track.ts @@ -1,7 +1,5 @@ import { ccclass, serializable } from 'cc.decorator'; -import { RealCurve } from '../../core/curves'; -import { Color, Size, Vec2, Vec3, Vec4 } from '../../core/math'; -import { getError } from '../../core/platform'; +import { RealCurve, Color, Size, Vec2, Vec3, Vec4, getError } from '../../core'; import { CLASS_NAME_PREFIX_ANIM, createEvalSymbol } from '../define'; import { IValueProxyFactory } from '../value-proxy'; import { ColorTrack, ColorTrackEval } from './color-track'; diff --git a/cocos/animation/tracks/vector-track.ts b/cocos/animation/tracks/vector-track.ts index 028780634ce..a51152d3e7b 100644 --- a/cocos/animation/tracks/vector-track.ts +++ b/cocos/animation/tracks/vector-track.ts @@ -1,6 +1,5 @@ import { ccclass, serializable } from 'cc.decorator'; -import { RealCurve } from '../../core/curves'; -import { Vec2, Vec3, Vec4 } from '../../core/math'; +import { RealCurve, Vec2, Vec3, Vec4 } from '../../core'; import { CLASS_NAME_PREFIX_ANIM, createEvalSymbol } from '../define'; import { Channel, RealChannel, RuntimeBinding, Track } from './track'; import { maskIfEmpty } from './utils'; diff --git a/cocos/animation/transform-utils.ts b/cocos/animation/transform-utils.ts index 94292f7dccf..528ed16c4f5 100644 --- a/cocos/animation/transform-utils.ts +++ b/cocos/animation/transform-utils.ts @@ -23,7 +23,7 @@ THE SOFTWARE. */ -import { Mat4 } from '../core/math'; +import { Mat4 } from '../core'; import { Node } from '../scene-graph'; const m4_1 = new Mat4(); diff --git a/cocos/animation/value-proxy-factories/uniform.ts b/cocos/animation/value-proxy-factories/uniform.ts index 7e51ef8dd6d..e3df5b0e5f3 100644 --- a/cocos/animation/value-proxy-factories/uniform.ts +++ b/cocos/animation/value-proxy-factories/uniform.ts @@ -32,7 +32,7 @@ import { deviceManager, Type } from '../../gfx'; import { Pass } from '../../render-scene/core/pass'; import { getDefaultFromType, getStringFromType } from '../../render-scene/core/pass-utils'; import { IValueProxy, IValueProxyFactory } from '../value-proxy'; -import { warn } from '../../core/platform/debug'; +import { warn } from '../../core'; /** * @en diff --git a/cocos/asset/assets/texture-base.ts b/cocos/asset/assets/texture-base.ts index b7e65daffd3..a082ef93b0f 100644 --- a/cocos/asset/assets/texture-base.ts +++ b/cocos/asset/assets/texture-base.ts @@ -33,7 +33,7 @@ import { Filter, PixelFormat, WrapMode } from './asset-enum'; import { Sampler, Texture, Device, Format, SamplerInfo, Address, Filter as GFXFilter, deviceManager } from '../../gfx'; import { legacyCC } from '../../core/global-exports'; import { errorID } from '../../core/platform/debug'; -import { murmurhash2_32_gc } from '../../core/algorithm/murmurhash2_gc'; +import { murmurhash2_32_gc } from '../../core'; import { ccenum } from '../../core/value-types/enum'; ccenum(Format); diff --git a/cocos/audio/audio-clip.ts b/cocos/audio/audio-clip.ts index 4912e59f74e..65514ec11ca 100644 --- a/cocos/audio/audio-clip.ts +++ b/cocos/audio/audio-clip.ts @@ -26,7 +26,7 @@ import { ccclass, serializable, override } from 'cc.decorator'; import { AudioPlayer } from 'pal/audio'; import { Asset } from '../asset/assets/asset'; -import { legacyCC } from '../core/global-exports'; +import { cclegacy } from '../core'; import { AudioState, AudioType } from '../../pal/audio/type'; export interface AudioMeta { @@ -200,4 +200,4 @@ export class AudioClip extends Asset { // #endregion deprecated method } -legacyCC.AudioClip = AudioClip; +cclegacy.AudioClip = AudioClip; diff --git a/cocos/audio/audio-source.ts b/cocos/audio/audio-source.ts index d6927e2a945..c1a0d1a9413 100644 --- a/cocos/audio/audio-source.ts +++ b/cocos/audio/audio-source.ts @@ -27,7 +27,7 @@ import { AudioPlayer } from 'pal/audio'; import { ccclass, help, menu, tooltip, type, range, serializable } from 'cc.decorator'; import { AudioPCMDataView, AudioState } from '../../pal/audio/type'; import { Component } from '../scene-graph/component'; -import { clamp } from '../core/math'; +import { clamp } from '../core'; import { AudioClip } from './audio-clip'; import { audioManager } from './audio-manager'; import { Node } from '../scene-graph'; diff --git a/cocos/audio/deprecated.ts b/cocos/audio/deprecated.ts index d305e825486..d27a19d438c 100644 --- a/cocos/audio/deprecated.ts +++ b/cocos/audio/deprecated.ts @@ -24,7 +24,7 @@ */ import { AudioSource } from './audio-source'; -import { replaceProperty, markAsWarning } from '../core/utils/x-deprecated'; +import { replaceProperty, markAsWarning } from '../core'; import { AudioClip } from './audio-clip'; // remove AudioClip static property diff --git a/cocos/audio/index.ts b/cocos/audio/index.ts index 09882e8488e..56da6bce316 100644 --- a/cocos/audio/index.ts +++ b/cocos/audio/index.ts @@ -26,8 +26,7 @@ THE SOFTWARE. import './audio-downloader'; import { AudioSource } from './audio-source'; -import { legacyCC } from '../core/global-exports'; -import { js } from '../core/utils/js'; +import { cclegacy, js } from '../core'; import './deprecated'; export { AudioClip } from './audio-clip'; @@ -36,5 +35,5 @@ export { AudioSource }; export { AudioPCMDataView } from '../../pal/audio/type'; export { AudioSource as AudioSourceComponent }; -legacyCC.AudioSourceComponent = AudioSource; +cclegacy.AudioSourceComponent = AudioSource; js.setClassAlias(AudioSource, 'cc.AudioSourceComponent'); diff --git a/cocos/core/deprecated.ts b/cocos/core/deprecated.ts index cb501d39083..6d1d77bce7d 100644 --- a/cocos/core/deprecated.ts +++ b/cocos/core/deprecated.ts @@ -28,7 +28,7 @@ import * as math from './math'; import { Scheduler } from './scheduler'; import { legacyCC } from './global-exports'; -import System from './system'; +import { System } from './system'; // VMATH diff --git a/cocos/core/index.ts b/cocos/core/index.ts index 34c58f3c553..05c15374ec1 100644 --- a/cocos/core/index.ts +++ b/cocos/core/index.ts @@ -48,7 +48,8 @@ export * from './scheduler'; export * from './algorithm/murmurhash2_gc'; export * from './curves'; export * from './settings'; -export { default as System } from './system'; +export * from './system'; +export { legacyCC as cclegacy } from './global-exports'; export * from './curves/bezier'; export { easing }; diff --git a/cocos/core/platform/visible-rect.ts b/cocos/core/platform/visible-rect.ts index d66ffd38487..5bde6a915ca 100644 --- a/cocos/core/platform/visible-rect.ts +++ b/cocos/core/platform/visible-rect.ts @@ -29,8 +29,9 @@ import { legacyCC } from '../global-exports'; /** * `visibleRect` is a singleton object which defines the actual visible rect of the current view + * @engineInternal */ -const visibleRect = { +export const visibleRect = { /** * Top left coordinate of the screen related to the game scene. */ @@ -128,4 +129,3 @@ const visibleRect = { }; legacyCC.visibleRect = visibleRect; -export default visibleRect; diff --git a/cocos/core/scheduler.ts b/cocos/core/scheduler.ts index 348e460d113..edf06994eb6 100644 --- a/cocos/core/scheduler.ts +++ b/cocos/core/scheduler.ts @@ -26,7 +26,7 @@ import IdGenerator from './utils/id-generator'; import { createMap } from './utils/js'; -import System from './system'; +import { System } from './system'; import { legacyCC } from './global-exports'; import { errorID, warnID, logID, assertID } from './platform/debug'; diff --git a/cocos/core/system.ts b/cocos/core/system.ts index c144f65f00e..ae601a72c9b 100644 --- a/cocos/core/system.ts +++ b/cocos/core/system.ts @@ -30,7 +30,7 @@ import { Enum } from './value-types/enum'; * @en Base class for all functional system managed by [[Director]]. * @zh 功能系统的基类,由 [[Director]] 管理。 */ -export default class System implements ISchedulable { +export class System implements ISchedulable { static Priority = Enum({ LOW: 0, MEDIUM: 100, diff --git a/cocos/deprecated.ts b/cocos/deprecated.ts index 3875d6df43d..969a35e44c8 100644 --- a/cocos/deprecated.ts +++ b/cocos/deprecated.ts @@ -23,7 +23,7 @@ THE SOFTWARE. */ -import { replaceProperty, markAsWarning } from './core/utils/x-deprecated'; +import { replaceProperty } from './core'; import { Root } from './root'; // Root diff --git a/cocos/dragon-bones/ArmatureDisplay.ts b/cocos/dragon-bones/ArmatureDisplay.ts index 34dab892cf0..e60d7ca68c7 100644 --- a/cocos/dragon-bones/ArmatureDisplay.ts +++ b/cocos/dragon-bones/ArmatureDisplay.ts @@ -27,8 +27,7 @@ import { EDITOR } from 'internal:constants'; import { Armature, Bone, EventObject } from '@cocos/dragonbones-js'; import { ccclass, executeInEditMode, help, menu } from '../core/data/class-decorator'; import { UIRenderer } from '../2d/framework/ui-renderer'; -import { CCClass, Color, Enum, ccenum, errorID, RecyclePool, js, CCObject } from '../core'; -import { EventTarget } from '../core/event'; +import { CCClass, Color, Enum, ccenum, errorID, RecyclePool, js, CCObject, EventTarget, cclegacy } from '../core'; import { BlendFactor } from '../gfx'; import { displayName, displayOrder, editable, override, serializable, tooltip, type, visible } from '../core/data/decorators'; import { AnimationCache, ArmatureCache, ArmatureFrame } from './ArmatureCache'; @@ -39,7 +38,6 @@ import { DragonBonesAtlasAsset } from './DragonBonesAtlasAsset'; import { Graphics } from '../2d/components'; import { CCArmatureDisplay } from './CCArmatureDisplay'; import { MaterialInstance } from '../render-scene/core/material-instance'; -import { legacyCC } from '../core/global-exports'; import { ArmatureSystem } from './ArmatureSystem'; import { Batcher2D } from '../2d/renderer/batcher-2d'; import { RenderEntity, RenderEntityType } from '../2d/renderer/render-entity'; @@ -183,7 +181,7 @@ export class ArmatureDisplay extends UIRenderer { this._dragonAsset = value; this.destroyRenderData(); this._refresh(); - if (EDITOR && !legacyCC.GAME_VIEW) { + if (EDITOR && !cclegacy.GAME_VIEW) { this._defaultArmatureIndex = 0; this._animationIndex = 0; } @@ -218,7 +216,7 @@ export class ArmatureDisplay extends UIRenderer { const animNames = this.getAnimationNames(this._armatureName); if (!this.animationName || animNames.indexOf(this.animationName) < 0) { - if (EDITOR && !legacyCC.GAME_VIEW) { + if (EDITOR && !cclegacy.GAME_VIEW) { this.animationName = animNames[0]; } else { // Not use default animation name at runtime @@ -669,7 +667,7 @@ export class ArmatureDisplay extends UIRenderer { } _init () { - if (EDITOR && !legacyCC.GAME_VIEW) { + if (EDITOR && !cclegacy.GAME_VIEW) { const Flags = CCObject.Flags; this._objFlags |= (Flags.IsAnchorLocked | Flags.IsSizeLocked); // this._refreshInspector(); @@ -746,7 +744,7 @@ export class ArmatureDisplay extends UIRenderer { * @return {Boolean} */ isAnimationCached () { - if (EDITOR && !legacyCC.GAME_VIEW) return false; + if (EDITOR && !cclegacy.GAME_VIEW) return false; return this._cacheMode !== AnimationCacheMode.REALTIME; } @@ -861,7 +859,7 @@ export class ArmatureDisplay extends UIRenderer { this._materialInstances = this._materialInstances.filter((instance) => !!instance); this._inited = false; - if (!EDITOR || legacyCC.GAME_VIEW) { + if (!EDITOR || cclegacy.GAME_VIEW) { if (this._cacheMode === AnimationCacheMode.PRIVATE_CACHE) { this._armatureCache!.dispose(); this._armatureCache = null; @@ -911,7 +909,7 @@ export class ArmatureDisplay extends UIRenderer { // Switch Asset or Atlas or cacheMode will rebuild armature. if (this._armature) { // dispose pre build armature - if (!EDITOR || legacyCC.GAME_VIEW) { + if (!EDITOR || cclegacy.GAME_VIEW) { if (this._preCacheMode === AnimationCacheMode.PRIVATE_CACHE) { this._armatureCache!.dispose(); } else if (this._preCacheMode === AnimationCacheMode.REALTIME) { @@ -930,7 +928,7 @@ export class ArmatureDisplay extends UIRenderer { this._preCacheMode = -1; } - if (!EDITOR || legacyCC.GAME_VIEW) { + if (!EDITOR || cclegacy.GAME_VIEW) { if (this._cacheMode === AnimationCacheMode.SHARED_CACHE) { this._armatureCache = ArmatureCache.sharedCache; } else if (this._cacheMode === AnimationCacheMode.PRIVATE_CACHE) { @@ -951,7 +949,7 @@ export class ArmatureDisplay extends UIRenderer { } this._preCacheMode = this._cacheMode; - if (EDITOR && !legacyCC.GAME_VIEW || this._cacheMode === AnimationCacheMode.REALTIME) { + if (EDITOR && !cclegacy.GAME_VIEW || this._cacheMode === AnimationCacheMode.REALTIME) { this._displayProxy = this._factory!.buildArmatureDisplay(this.armatureName, this._armatureKey, '', atlasUUID) as CCArmatureDisplay; if (!this._displayProxy) return; this._displayProxy._ccNode = this.node; @@ -1014,7 +1012,7 @@ export class ArmatureDisplay extends UIRenderer { _refresh () { this._buildArmature(); this._indexBoneSockets(); - if (EDITOR && !legacyCC.GAME_VIEW) { + if (EDITOR && !cclegacy.GAME_VIEW) { // update inspector this._updateArmatureEnum(); this._updateAnimEnum(); @@ -1384,4 +1382,4 @@ export class ArmatureDisplay extends UIRenderer { } } -legacyCC.internal.ArmatureDisplay = ArmatureDisplay; +cclegacy.internal.ArmatureDisplay = ArmatureDisplay; diff --git a/cocos/dragon-bones/ArmatureSystem.ts b/cocos/dragon-bones/ArmatureSystem.ts index 1d800df5ddd..884f69478e5 100644 --- a/cocos/dragon-bones/ArmatureSystem.ts +++ b/cocos/dragon-bones/ArmatureSystem.ts @@ -24,9 +24,8 @@ */ import { director } from '../game/director'; -import { System } from '../core'; +import { System, cclegacy } from '../core'; import { ArmatureDisplay } from './ArmatureDisplay'; -import { legacyCC } from '../core/global-exports'; export class ArmatureSystem extends System { /** @@ -92,4 +91,4 @@ export class ArmatureSystem extends System { } } -legacyCC.internal.ArmatureSystem = ArmatureSystem; +cclegacy.internal.ArmatureSystem = ArmatureSystem; diff --git a/cocos/dragon-bones/CCArmatureDisplay.ts b/cocos/dragon-bones/CCArmatureDisplay.ts index a893b9b728e..0ea160a27e6 100644 --- a/cocos/dragon-bones/CCArmatureDisplay.ts +++ b/cocos/dragon-bones/CCArmatureDisplay.ts @@ -26,8 +26,7 @@ import { Armature, DisplayData, IEventDispatcher, Slot } from '@cocos/dragonbones-js'; import { ccclass } from '../core/data/class-decorator'; -import { Vec3 } from '../core'; -import { EventTarget } from '../core/event'; +import { Vec3, EventTarget } from '../core'; // eslint-disable-next-line import/named import { CCSlot } from './CCSlot'; import { ArmatureDisplay } from './ArmatureDisplay'; diff --git a/cocos/dragon-bones/CCFactory.ts b/cocos/dragon-bones/CCFactory.ts index 427df9c2013..d084132dbc9 100644 --- a/cocos/dragon-bones/CCFactory.ts +++ b/cocos/dragon-bones/CCFactory.ts @@ -25,14 +25,13 @@ import { EDITOR } from 'internal:constants'; import { Armature, BaseObject, Animation, BaseFactory, DragonBones } from '@cocos/dragonbones-js'; -import { ISchedulable, Scheduler, System } from '../core'; +import { ISchedulable, Scheduler, System, cclegacy } from '../core'; import { ccclass } from '../core/data/class-decorator'; import { CCTextureAtlasData } from './CCTextureData'; import { TextureBase } from '../asset/assets/texture-base'; import { CCSlot } from './CCSlot'; import { ArmatureDisplay } from './ArmatureDisplay'; import { CCArmatureDisplay } from './CCArmatureDisplay'; -import { legacyCC } from '../core/global-exports'; import { Node } from '../scene-graph'; import { director, Game, game } from '../game'; @@ -92,7 +91,7 @@ export class CCFactory extends BaseFactory implements ISchedulable { } update (dt: number) { - if (EDITOR && !legacyCC.GAME_VIEW) return; + if (EDITOR && !cclegacy.GAME_VIEW) return; this._dragonBones.advanceTime(dt); } diff --git a/cocos/dragon-bones/CCTextureData.ts b/cocos/dragon-bones/CCTextureData.ts index 5286736826e..03ff2384a00 100644 --- a/cocos/dragon-bones/CCTextureData.ts +++ b/cocos/dragon-bones/CCTextureData.ts @@ -27,7 +27,7 @@ import { BaseObject, TextureAtlasData, TextureData } from '@cocos/dragonbones-js import { SpriteFrame } from '../2d'; import { TextureBase } from '../asset/assets/texture-base'; import { ccclass } from '../core/data/decorators'; -import { Rect } from '../core/math/rect'; +import { Rect } from '../core'; /** * @deprecated since v3.5.1, this is an engine private interface that will be removed in the future. diff --git a/cocos/dragon-bones/DragonBonesAsset.ts b/cocos/dragon-bones/DragonBonesAsset.ts index fd384a495f3..18078ca309d 100644 --- a/cocos/dragon-bones/DragonBonesAsset.ts +++ b/cocos/dragon-bones/DragonBonesAsset.ts @@ -27,9 +27,8 @@ import { EDITOR } from 'internal:constants'; import { Asset } from '../asset/assets'; import { ccclass, serializable } from '../core/data/decorators'; import { ArmatureCache } from './ArmatureCache'; -import { Enum } from '../core'; +import { Enum, cclegacy } from '../core'; import { CCFactory } from './CCFactory'; -import { legacyCC } from '../core/global-exports'; import { Node } from '../scene-graph'; /** @@ -79,7 +78,7 @@ export class DragonBonesAsset extends Asset { reset () { this._clear(); - if (EDITOR && !legacyCC.GAME_VIEW) { + if (EDITOR && !cclegacy.GAME_VIEW) { this._armaturesEnum = null; } } @@ -173,4 +172,4 @@ export class DragonBonesAsset extends Asset { } } -legacyCC.internal.DragonBonesAsset = DragonBonesAsset; +cclegacy.internal.DragonBonesAsset = DragonBonesAsset; diff --git a/cocos/dragon-bones/DragonBonesAtlasAsset.ts b/cocos/dragon-bones/DragonBonesAtlasAsset.ts index 48362c69935..a0e32e1d936 100644 --- a/cocos/dragon-bones/DragonBonesAtlasAsset.ts +++ b/cocos/dragon-bones/DragonBonesAtlasAsset.ts @@ -29,7 +29,7 @@ import { ccclass, serializable, type } from '../core/data/decorators'; import { ArmatureCache } from './ArmatureCache'; import { ArmatureDisplay } from './ArmatureDisplay'; import { CCFactory } from './CCFactory'; -import { legacyCC } from '../core/global-exports'; +import { cclegacy } from '../core'; import { Asset, Texture2D } from '../asset/assets'; import { Node } from '../scene-graph'; @@ -121,4 +121,4 @@ export class DragonBonesAtlasAsset extends Asset { } } -legacyCC.internal.DragonBonesAtlasAsset = DragonBonesAtlasAsset; +cclegacy.internal.DragonBonesAtlasAsset = DragonBonesAtlasAsset; diff --git a/cocos/dragon-bones/assembler/simple.ts b/cocos/dragon-bones/assembler/simple.ts index e26b0e4ccc3..56d016a3a30 100644 --- a/cocos/dragon-bones/assembler/simple.ts +++ b/cocos/dragon-bones/assembler/simple.ts @@ -24,7 +24,7 @@ */ import { Armature, BlendMode } from '@cocos/dragonbones-js'; -import { Color, Mat4, Vec3 } from '../../core'; +import { Color, Mat4, Vec3, cclegacy } from '../../core'; import { BlendFactor } from '../../gfx'; import { vfmtPosUvColor } from '../../2d/renderer/vertex-format'; import { MaterialInstance } from '../../render-scene/core/material-instance'; @@ -33,7 +33,6 @@ import { Batcher2D } from '../../2d/renderer/batcher-2d'; import { ArmatureFrame } from '../ArmatureCache'; import { ArmatureDisplay } from '../ArmatureDisplay'; import { CCSlot } from '../CCSlot'; -import { legacyCC } from '../../core/global-exports'; import { StaticVBAccessor } from '../../2d/renderer/static-vb-accessor'; import { RenderData } from '../../2d/renderer/render-data'; import { Texture2D } from '../../asset/assets'; @@ -494,4 +493,4 @@ function updateComponentRenderData (comp: ArmatureDisplay, batcher: Batcher2D) { _comp = undefined; } -legacyCC.internal.DragonBonesAssembler = simple; +cclegacy.internal.DragonBonesAssembler = simple; diff --git a/cocos/dragon-bones/deprecated.ts b/cocos/dragon-bones/deprecated.ts index f1e1704c1ae..97abaa4502b 100644 --- a/cocos/dragon-bones/deprecated.ts +++ b/cocos/dragon-bones/deprecated.ts @@ -23,7 +23,7 @@ THE SOFTWARE. */ -import { removeProperty } from '../core/utils/x-deprecated'; +import { removeProperty } from '../core'; import { ArmatureDisplay } from './ArmatureDisplay'; removeProperty(ArmatureDisplay.prototype, 'ArmatureDisplay', [ diff --git a/cocos/game/deprecated.ts b/cocos/game/deprecated.ts index e0a143120a5..6c2c3e278db 100644 --- a/cocos/game/deprecated.ts +++ b/cocos/game/deprecated.ts @@ -23,7 +23,7 @@ THE SOFTWARE. */ -import { removeProperty, markAsWarning } from '../core/utils/x-deprecated'; +import { removeProperty, markAsWarning } from '../core'; import { Director } from './director'; import { game } from './game'; diff --git a/cocos/game/director.ts b/cocos/game/director.ts index a8d5cbb5a91..46fbb94fb39 100644 --- a/cocos/game/director.ts +++ b/cocos/game/director.ts @@ -29,23 +29,16 @@ import { DEBUG, EDITOR, BUILD, TEST } from 'internal:constants'; import { SceneAsset } from '../asset/assets/scene-asset'; -import System from '../core/system'; +import { System, EventTarget, Scheduler, js, errorID, error, assertID, warnID, macro, cclegacy } from '../core'; import { CCObject } from '../core/data/object'; -import { EventTarget } from '../core/event'; import { input } from '../input'; import { Root } from '../root'; import { Node, Scene } from '../scene-graph'; import { ComponentScheduler } from '../scene-graph/component-scheduler'; import NodeActivator from '../scene-graph/node-activator'; -import { Scheduler } from '../core/scheduler'; -import { js } from '../core/utils/js'; -import { legacyCC } from '../core/global-exports'; -import { errorID, error, assertID, warnID } from '../core/platform/debug'; import { containerManager } from '../core/memop/container-manager'; import { uiRendererManager } from '../2d/framework/ui-renderer-manager'; import { deviceManager } from '../gfx'; -import { PipelineBuilder } from '../rendering/custom/pipeline'; -import { macro } from '../core/platform/macro'; // ---------------------------------------------------------------------------------------------------------------------- @@ -296,7 +289,7 @@ export class Director extends EventTarget { this._nodeActivator.reset(); if (!EDITOR) { - if (legacyCC.isValid(this._scene)) { + if (cclegacy.isValid(this._scene)) { this._scene!.destroy(); } this._scene = null; @@ -305,7 +298,7 @@ export class Director extends EventTarget { this.stopAnimation(); // Clear all caches - legacyCC.assetManager.releaseAll(); + cclegacy.assetManager.releaseAll(); } /** @@ -379,7 +372,7 @@ export class Director extends EventTarget { if (BUILD && DEBUG) { console.time('Destroy'); } - if (legacyCC.isValid(oldScene)) { + if (cclegacy.isValid(oldScene)) { oldScene!.destroy(); } if (!EDITOR) { @@ -387,7 +380,7 @@ export class Director extends EventTarget { if (BUILD && DEBUG) { console.time('AutoRelease'); } - legacyCC.assetManager._releaseManager._autoRelease(oldScene, scene, this._persistRootNodes); + cclegacy.assetManager._releaseManager._autoRelease(oldScene, scene, this._persistRootNodes); if (BUILD && DEBUG) { console.timeEnd('AutoRelease'); } @@ -460,7 +453,7 @@ export class Director extends EventTarget { warnID(1208, sceneName, this._loadingScene); return false; } - const bundle = legacyCC.assetManager.bundles.find((bundle) => !!bundle.getSceneInfo(sceneName)); + const bundle = cclegacy.assetManager.bundles.find((bundle) => !!bundle.getSceneInfo(sceneName)); if (bundle) { this.emit(Director.EVENT_BEFORE_SCENE_LOADING, sceneName); this._loadingScene = sceneName; @@ -518,7 +511,7 @@ export class Director extends EventTarget { onProgress?: Director.OnLoadSceneProgress | Director.OnSceneLoaded, onLoaded?: Director.OnSceneLoaded, ) { - const bundle = legacyCC.assetManager.bundles.find((bundle) => !!bundle.getSceneInfo(sceneName)); + const bundle = cclegacy.assetManager.bundles.find((bundle) => !!bundle.getSceneInfo(sceneName)); if (bundle) { bundle.preloadScene(sceneName, null, onProgress, onLoaded); } else { @@ -565,7 +558,7 @@ export class Director extends EventTarget { * @deprecated since v3.3.0, please use game.deltaTime instead */ public getDeltaTime () { - return legacyCC.game.deltaTime as number; + return cclegacy.game.deltaTime as number; } /** @@ -574,7 +567,7 @@ export class Director extends EventTarget { * @deprecated since v3.3.0, please use game.totalTime instead */ public getTotalTime () { - return legacyCC.game.totalTime as number; + return cclegacy.game.totalTime as number; } /** @@ -583,7 +576,7 @@ export class Director extends EventTarget { * @deprecated since v3.3.0, please use game.frameStartTime instead */ public getCurrentTime () { - return legacyCC.game.frameStartTime as number; + return cclegacy.game.frameStartTime as number; } /** @@ -652,7 +645,7 @@ export class Director extends EventTarget { * @deprecated since 3.0.0 */ public getAnimationManager (): any { - return this.getSystem(legacyCC.AnimationManager.ID); + return this.getSystem(cclegacy.AnimationManager.ID); } // Loop management @@ -679,10 +672,10 @@ export class Director extends EventTarget { */ public mainLoop (now: number) { let dt; - if (EDITOR && !legacyCC.GAME_VIEW || TEST) { + if (EDITOR && !cclegacy.GAME_VIEW || TEST) { dt = now; } else { - dt = legacyCC.game._calculateDT(now); + dt = cclegacy.game._calculateDT(now); } this.tick(dt); } @@ -695,7 +688,7 @@ export class Director extends EventTarget { public tick (dt: number) { if (!this._invalid) { this.emit(Director.EVENT_BEGIN_FRAME); - if (!EDITOR || legacyCC.GAME_VIEW) { + if (!EDITOR || cclegacy.GAME_VIEW) { // @ts-expect-error _frameDispatchEvents is a private method. input._frameDispatchEvents(); } @@ -739,15 +732,15 @@ export class Director extends EventTarget { private buildRenderPipeline () { if (this._root) { this._root.customPipeline.beginSetup(); - const builder = legacyCC.rendering.getCustomPipeline(macro.CUSTOM_PIPELINE_NAME); + const builder = cclegacy.rendering.getCustomPipeline(macro.CUSTOM_PIPELINE_NAME); builder.setup(this._root.cameraList, this._root.customPipeline); this._root.customPipeline.endSetup(); } } private setupRenderPipelineBuilder () { - if (macro.CUSTOM_PIPELINE_NAME !== '' && legacyCC.rendering && this._root && this._root.usesCustomPipeline) { - legacyCC.director.on(legacyCC.Director.EVENT_BEFORE_RENDER, this.buildRenderPipeline, this); + if (macro.CUSTOM_PIPELINE_NAME !== '' && cclegacy.rendering && this._root && this._root.usesCustomPipeline) { + cclegacy.director.on(cclegacy.Director.EVENT_BEFORE_RENDER, this.buildRenderPipeline, this); } } @@ -783,14 +776,14 @@ export class Director extends EventTarget { * @param node - The node to be made persistent */ public addPersistRootNode (node: Node) { - if (!legacyCC.Node.isNode(node) || !node.uuid) { + if (!cclegacy.Node.isNode(node) || !node.uuid) { warnID(3800); return; } const id = node.uuid; if (!this._persistRootNodes[id]) { const scene = this._scene as any; - if (legacyCC.isValid(scene)) { + if (cclegacy.isValid(scene)) { if (!node.parent) { node.parent = scene; node._originalSceneId = scene.uuid; @@ -806,7 +799,7 @@ export class Director extends EventTarget { } this._persistRootNodes[id] = node; node._persistNode = true; - legacyCC.assetManager._releaseManager._addPersistNodeRef(node); + cclegacy.assetManager._releaseManager._addPersistNodeRef(node); } } @@ -821,7 +814,7 @@ export class Director extends EventTarget { delete this._persistRootNodes[id]; node._persistNode = false; node._originalSceneId = ''; - legacyCC.assetManager._releaseManager._removePersistNodeRef(node); + cclegacy.assetManager._releaseManager._removePersistNodeRef(node); } } @@ -852,10 +845,10 @@ export declare namespace Director { export type OnLoadSceneProgress = (completedCount: number, totalCount: number, item: any) => void; } -legacyCC.Director = Director; +cclegacy.Director = Director; /** * @en Director of the game, used to control game update loop and scene management * @zh 游戏的导演,用于控制游戏更新循环与场景管理。 */ -export const director: Director = Director.instance = legacyCC.director = new Director(); +export const director: Director = Director.instance = cclegacy.director = new Director(); diff --git a/cocos/game/game.ts b/cocos/game/game.ts index bdb053177de..138c772a5f9 100644 --- a/cocos/game/game.ts +++ b/cocos/game/game.ts @@ -30,24 +30,17 @@ import { findCanvas, loadJsFile } from 'pal/env'; import { Pacer } from 'pal/pacer'; import { ConfigOrientation } from 'pal/screen-adapter'; import assetManager, { IAssetManagerOptions } from '../asset/asset-manager/asset-manager'; -import { EventTarget } from '../core/event'; -import { AsyncDelegate } from '../core/event/async-delegate'; +import { EventTarget, AsyncDelegate, sys, macro, VERSION, cclegacy, screen, Settings, settings, assert } from '../core'; import { input } from '../input'; import * as debug from '../core/platform/debug'; import { deviceManager } from '../gfx'; -import { sys } from '../core/platform/sys'; -import { macro } from '../core/platform/macro'; -import { legacyCC, VERSION } from '../core/global-exports'; import { SplashScreen } from './splash-screen'; import { RenderPipeline } from '../rendering'; import { Layers, Node } from '../scene-graph'; import { garbageCollectionManager } from '../core/data/garbage-collection'; -import { screen } from '../core/platform/screen'; import { builtinResMgr } from '../asset/asset-manager/builtin-res-mgr'; -import { Settings, settings } from '../core/settings'; import { Director, director } from './director'; import { bindingMappingInfo } from '../rendering/define'; -import { assert } from '../core/platform/debug'; import { IBundleOptions } from '../asset/asset-manager/shared'; import { ICustomJointTextureLayout } from '../3d/skeletal-animation/skeletal-animation-utils'; import { IPhysicsConfig } from '../physics/framework/physics-config'; @@ -590,7 +583,7 @@ export class Game extends EventTarget { const endFramePromise = new Promise((resolve) => { director.once(Director.EVENT_END_FRAME, () => resolve()); }); return endFramePromise.then(() => { director.reset(); - legacyCC.Object._deferredDestroy(); + cclegacy.Object._deferredDestroy(); this.pause(); this.resume(); this._shouldLoadLaunchScene = true; @@ -927,7 +920,7 @@ export class Game extends EventTarget { if (onStart) { this.onStart = onStart; } - if (!this._inited || (EDITOR && !legacyCC.GAME_VIEW)) { + if (!this._inited || (EDITOR && !cclegacy.GAME_VIEW)) { return; } this.resume(); @@ -1072,7 +1065,7 @@ export declare namespace Game { export type OnStart = () => void; } -legacyCC.Game = Game; +cclegacy.Game = Game; /** * @en @@ -1080,4 +1073,4 @@ legacyCC.Game = Game; * @zh * 这是一个 Game 类的实例,包含游戏主体信息并负责驱动游戏的游戏对象。 */ -export const game = legacyCC.game = new Game(); +export const game = cclegacy.game = new Game(); diff --git a/cocos/game/splash-screen.ts b/cocos/game/splash-screen.ts index 80008e434b0..0b047a9e5ea 100644 --- a/cocos/game/splash-screen.ts +++ b/cocos/game/splash-screen.ts @@ -26,18 +26,14 @@ import { EDITOR, PREVIEW } from 'internal:constants'; import * as easing from '../core/algorithm/easing'; import { Material } from '../asset/assets/material'; -import { clamp01 } from '../core/math/utils'; +import { clamp01, Mat4, Vec2, Settings, settings, sys, cclegacy } from '../core'; import { Sampler, SamplerInfo, Shader, Texture, TextureInfo, Device, InputAssembler, InputAssemblerInfo, Attribute, Buffer, BufferInfo, Rect, Color, BufferTextureCopy, CommandBuffer, BufferUsageBit, Format, MemoryUsageBit, TextureType, TextureUsageBit, Address, SurfaceTransform, Swapchain, } from '../gfx'; import { PipelineStateManager } from '../rendering'; -import { legacyCC } from '../core/global-exports'; import { SetIndex } from '../rendering/define'; -import { Mat4, Vec2 } from '../core/math'; -import { Settings, settings } from '../core/settings'; -import { sys } from '../core/platform/sys'; const v2_0 = new Vec2(); type SplashEffectType = 'NONE' | 'FADE-INOUT'; @@ -103,8 +99,8 @@ export class SplashScreen { if (EDITOR || PREVIEW || !this.settings.enabled || this.settings.base64src === '' || this.settings.totalTime <= 0) { this.settings.totalTime = 0; } else { - this.device = legacyCC.director.root!.device; - this.swapchain = legacyCC.director.root!.mainWindow!.swapchain; + this.device = cclegacy.director.root!.device; + this.swapchain = cclegacy.director.root!.mainWindow!.swapchain; this.preInit(); if (this.settings.displayWatermark) this.initWarterMark(); @@ -291,7 +287,7 @@ export class SplashScreen { device.acquire([swapchain]); // record command const cmdBuff = this.cmdBuff; - const framebuffer = legacyCC.director.root!.mainWindow!.framebuffer; + const framebuffer = cclegacy.director.root!.mainWindow!.framebuffer; const renderArea = this.renderArea; renderArea.width = swapchain.width; @@ -376,4 +372,4 @@ export class SplashScreen { private constructor () { } } -legacyCC.internal.SplashScreen = SplashScreen; +cclegacy.internal.SplashScreen = SplashScreen; diff --git a/cocos/gfx/base/input-assembler.ts b/cocos/gfx/base/input-assembler.ts index 826b9cce401..259ca416f5a 100644 --- a/cocos/gfx/base/input-assembler.ts +++ b/cocos/gfx/base/input-assembler.ts @@ -23,7 +23,7 @@ THE SOFTWARE. */ -import { murmurhash2_32_gc } from '../../core/algorithm/murmurhash2_gc'; +import { murmurhash2_32_gc } from '../../core'; import { Buffer } from './buffer'; import { Attribute, GFXObject, ObjectType, InputAssemblerInfo, DrawInfo } from './define'; diff --git a/cocos/gfx/base/render-pass.ts b/cocos/gfx/base/render-pass.ts index 466a96576cf..6683f65e0e4 100644 --- a/cocos/gfx/base/render-pass.ts +++ b/cocos/gfx/base/render-pass.ts @@ -23,7 +23,7 @@ THE SOFTWARE. */ -import { murmurhash2_32_gc } from '../../core/algorithm/murmurhash2_gc'; +import { murmurhash2_32_gc } from '../../core'; import { GFXObject, ObjectType, diff --git a/cocos/gfx/base/states/buffer-barrier.ts b/cocos/gfx/base/states/buffer-barrier.ts index ae2a6730cb4..f371bd8a45b 100644 --- a/cocos/gfx/base/states/buffer-barrier.ts +++ b/cocos/gfx/base/states/buffer-barrier.ts @@ -23,7 +23,7 @@ THE SOFTWARE. */ -import { murmurhash2_32_gc } from '../../../core/algorithm/murmurhash2_gc'; +import { murmurhash2_32_gc } from '../../../core'; import { GFXObject, ObjectType, BufferBarrierInfo } from '../define'; /** diff --git a/cocos/gfx/base/states/general-barrier.ts b/cocos/gfx/base/states/general-barrier.ts index 6f452138cbe..7ed29cefcaa 100644 --- a/cocos/gfx/base/states/general-barrier.ts +++ b/cocos/gfx/base/states/general-barrier.ts @@ -23,7 +23,7 @@ THE SOFTWARE. */ -import { murmurhash2_32_gc } from '../../../core/algorithm/murmurhash2_gc'; +import { murmurhash2_32_gc } from '../../../core'; import { GFXObject, ObjectType, GeneralBarrierInfo } from '../define'; /** diff --git a/cocos/gfx/base/states/texture-barrier.ts b/cocos/gfx/base/states/texture-barrier.ts index 9ae5c795387..a3fbc82ae12 100644 --- a/cocos/gfx/base/states/texture-barrier.ts +++ b/cocos/gfx/base/states/texture-barrier.ts @@ -23,7 +23,7 @@ THE SOFTWARE. */ -import { murmurhash2_32_gc } from '../../../core/algorithm/murmurhash2_gc'; +import { murmurhash2_32_gc } from '../../../core'; import { GFXObject, ObjectType, TextureBarrierInfo } from '../define'; /** diff --git a/cocos/gfx/deprecated-3.0.0.ts b/cocos/gfx/deprecated-3.0.0.ts index d78b88ba8b6..b52a9b28317 100644 --- a/cocos/gfx/deprecated-3.0.0.ts +++ b/cocos/gfx/deprecated-3.0.0.ts @@ -23,8 +23,7 @@ THE SOFTWARE. */ -import { replaceProperty, removeProperty } from '../core/utils/x-deprecated'; -import { legacyCC } from '../core/global-exports'; +import { replaceProperty, removeProperty, cclegacy } from '../core'; // Deprecated CC polyfill const polyfills = { @@ -98,17 +97,17 @@ for (const name in polyfills) { newName = name; } // Deprecation - replaceProperty(legacyCC, 'cc', [ + replaceProperty(cclegacy, 'cc', [ { name, newName, - target: legacyCC.gfx, + target: cclegacy.gfx, targetName: 'cc.gfx', }, ]); } -removeProperty(legacyCC, 'cc', [ +removeProperty(cclegacy, 'cc', [ { name: 'GFX_MAX_VERTEX_ATTRIBUTES' }, { name: 'GFX_MAX_TEXTURE_UNITS' }, { name: 'GFX_MAX_ATTACHMENTS' }, diff --git a/cocos/gfx/deprecated-3.5.0.ts b/cocos/gfx/deprecated-3.5.0.ts index 09cf9da63a2..ba16708a9b6 100644 --- a/cocos/gfx/deprecated-3.5.0.ts +++ b/cocos/gfx/deprecated-3.5.0.ts @@ -23,7 +23,7 @@ THE SOFTWARE. */ -import { removeProperty, replaceProperty } from '../core/utils/x-deprecated'; +import { removeProperty, replaceProperty } from '../core'; import { Device } from './base/device'; import { Feature, ColorAttachment, DepthStencilAttachment } from './base/define'; diff --git a/cocos/gfx/device-manager.ts b/cocos/gfx/device-manager.ts index 2d66aaf237d..b3d00ee0160 100644 --- a/cocos/gfx/device-manager.ts +++ b/cocos/gfx/device-manager.ts @@ -25,14 +25,10 @@ */ import { JSB, WEBGPU } from 'internal:constants'; -import { legacyCC } from '../core/global-exports'; -import { error, getError } from '../core/platform/debug'; -import { sys } from '../core/platform/sys'; +import { cclegacy, error, getError, sys, screen, Settings, settings } from '../core'; import { BindingMappingInfo, DeviceInfo, SwapchainInfo } from './base/define'; import { Device } from './base/device'; import { Swapchain } from './base/swapchain'; -import { screen } from '../core/platform/screen'; -import { Settings, settings } from '../core/settings'; import { BrowserType } from '../../pal/system-info/enum-type'; /** @@ -130,16 +126,16 @@ export class DeviceManager { const deviceCtors: Constructor[] = []; if (WEBGPU) { - deviceCtors.push(legacyCC.WebGPUDevice); + deviceCtors.push(cclegacy.WebGPUDevice); } - if (useWebGL2 && legacyCC.WebGL2Device) { - deviceCtors.push(legacyCC.WebGL2Device); + if (useWebGL2 && cclegacy.WebGL2Device) { + deviceCtors.push(cclegacy.WebGL2Device); } - if (legacyCC.WebGLDevice) { - deviceCtors.push(legacyCC.WebGLDevice); + if (cclegacy.WebGLDevice) { + deviceCtors.push(cclegacy.WebGLDevice); } - if (legacyCC.EmptyDevice) { - deviceCtors.push(legacyCC.EmptyDevice); + if (cclegacy.EmptyDevice) { + deviceCtors.push(cclegacy.EmptyDevice); } Device.canvas = canvas!; @@ -149,8 +145,8 @@ export class DeviceManager { } this._initSwapchain(); } - } else if (this._renderType === RenderType.HEADLESS && legacyCC.EmptyDevice) { - this._gfxDevice = new legacyCC.EmptyDevice(); + } else if (this._renderType === RenderType.HEADLESS && cclegacy.EmptyDevice) { + this._gfxDevice = new cclegacy.EmptyDevice(); this._gfxDevice.initialize(new DeviceInfo(bindingMappingInfo)); this._initSwapchain(); } diff --git a/cocos/gfx/empty/empty-device.ts b/cocos/gfx/empty/empty-device.ts index 0b53ba4552a..3dc6b84a322 100644 --- a/cocos/gfx/empty/empty-device.ts +++ b/cocos/gfx/empty/empty-device.ts @@ -60,8 +60,7 @@ import { EmptyRenderPass } from './empty-render-pass'; import { EmptyShader } from './empty-shader'; import { EmptySwapchain } from './empty-swapchain'; import { EmptyTexture } from './empty-texture'; -import { debug } from '../../core'; -import { legacyCC } from '../../core/global-exports'; +import { debug, cclegacy } from '../../core'; export class EmptyDevice extends Device { private _swapchain: EmptySwapchain | null = null; @@ -217,4 +216,4 @@ export class EmptyDevice extends Device { public copyTexImagesToTexture (texImages: Readonly, texture: Texture, regions: Readonly) {} } -legacyCC.EmptyDevice = EmptyDevice; +cclegacy.EmptyDevice = EmptyDevice; diff --git a/cocos/gfx/index.ems.ts b/cocos/gfx/index.ems.ts index b6abb8332f1..ac1cb069082 100644 --- a/cocos/gfx/index.ems.ts +++ b/cocos/gfx/index.ems.ts @@ -28,7 +28,7 @@ * @module gfx */ -import { legacyCC } from '../core/global-exports'; +import { cclegacy } from '../core'; import { gfx, webgpuAdapter } from '../webgpu/instantiated'; import './deprecated-3.0.0'; @@ -54,7 +54,7 @@ polyfillCC.PipelineLayout = gfx.CCWGPUPipelineLayout; polyfillCC.PipelineState = gfx.CCWGPUPipelineState; polyfillCC.CommandBuffer = gfx.CCWGPUCommandBuffer; polyfillCC.Queue = gfx.CCWGPUQueue; -legacyCC.gfx = polyfillCC; +cclegacy.gfx = polyfillCC; export * from './webgpu/override'; export * from './webgpu/webgpu-define' diff --git a/cocos/gfx/index.jsb.ts b/cocos/gfx/index.jsb.ts index 050ddbd9323..317bd230b7b 100644 --- a/cocos/gfx/index.jsb.ts +++ b/cocos/gfx/index.jsb.ts @@ -25,7 +25,7 @@ declare const gfx: any; -import { legacyCC } from '../core/global-exports'; +import { cclegacy } from '../core'; import * as defines from './base/define'; import * as pso from './base/pipeline-state'; @@ -65,7 +65,7 @@ polyfillCC.PipelineLayout = gfx.PipelineLayout; polyfillCC.PipelineState = gfx.PipelineState; polyfillCC.CommandBuffer = gfx.CommandBuffer; polyfillCC.Queue = gfx.Queue; -legacyCC.gfx = polyfillCC; +cclegacy.gfx = polyfillCC; polyfillCC.BlendTarget = pso.BlendTarget; polyfillCC.BlendState = pso.BlendState; diff --git a/cocos/gfx/polyfill-legacy-cc.ts b/cocos/gfx/polyfill-legacy-cc.ts index 57a3216d404..be6e2c90006 100644 --- a/cocos/gfx/polyfill-legacy-cc.ts +++ b/cocos/gfx/polyfill-legacy-cc.ts @@ -41,7 +41,7 @@ import { Texture } from './base/texture'; import { GeneralBarrier } from './base/states/general-barrier'; import { TextureBarrier } from './base/states/texture-barrier'; import { BufferBarrier } from './base/states/buffer-barrier'; -import { legacyCC } from '../core/global-exports'; +import { cclegacy } from '../core'; import * as defines from './base/define'; const polyfills: Record = { @@ -72,4 +72,4 @@ const polyfills: Record = { }; Object.assign(polyfills, defines); -legacyCC.gfx = polyfills; +cclegacy.gfx = polyfills; diff --git a/cocos/gi/light-probe/auto-placement.ts b/cocos/gi/light-probe/auto-placement.ts index 45c797b5086..5352a45691f 100644 --- a/cocos/gi/light-probe/auto-placement.ts +++ b/cocos/gi/light-probe/auto-placement.ts @@ -23,7 +23,7 @@ THE SOFTWARE. */ -import { Vec3 } from '../../core/math/vec3'; +import { Vec3, } from '../../core'; import { Enum } from '../../core/value-types'; export const PlaceMethod = Enum({ diff --git a/cocos/gi/light-probe/delaunay.ts b/cocos/gi/light-probe/delaunay.ts index d6fd5ef9bb1..eeecf374e75 100644 --- a/cocos/gi/light-probe/delaunay.ts +++ b/cocos/gi/light-probe/delaunay.ts @@ -24,10 +24,7 @@ */ import { ccclass, serializable } from 'cc.decorator'; -import { Mat3 } from '../../core/math/mat3'; -import { EPSILON } from '../../core/math/utils'; -import { Vec3 } from '../../core/math/vec3'; -import { warnID } from '../../core/platform/debug'; +import { Mat3, EPSILON, Vec3, warnID } from '../../core'; @ccclass('cc.Vertex') export class Vertex { diff --git a/cocos/gi/light-probe/light-probe-group.ts b/cocos/gi/light-probe/light-probe-group.ts index 4e15f93695d..4cf77a88eb6 100644 --- a/cocos/gi/light-probe/light-probe-group.ts +++ b/cocos/gi/light-probe/light-probe-group.ts @@ -27,8 +27,7 @@ import { ccclass, disallowMultiple, displayName, editable, executeInEditMode, me import { EDITOR } from 'internal:constants'; import { NodeEventType } from '../../scene-graph/node-event'; import { Component } from '../../scene-graph/component'; -import { CCInteger } from '../../core/data/utils/attribute'; -import { Vec3 } from '../../core/math'; +import { Vec3, CCInteger } from '../../core'; import { AutoPlacement, PlaceMethod } from './auto-placement'; /** diff --git a/cocos/gi/light-probe/light-probe.ts b/cocos/gi/light-probe/light-probe.ts index bb46aa64fee..73eb2eb0318 100644 --- a/cocos/gi/light-probe/light-probe.ts +++ b/cocos/gi/light-probe/light-probe.ts @@ -27,11 +27,8 @@ import { ccclass, serializable } from 'cc.decorator'; import { Vertex, Tetrahedron, Delaunay } from './delaunay'; import { PolynomialSolver } from './polynomial-solver'; import { LightProbeInfo } from '../../scene-graph/scene-globals'; -import { Vec3 } from '../../core/math/vec3'; -import { Vec4 } from '../../core/math/vec4'; -import { legacyCC } from '../../core/global-exports'; +import { Vec3, Vec4, cclegacy, math } from '../../core'; import { SH } from './sh'; -import { math } from '../../core'; @ccclass('cc.LightProbesData') export class LightProbesData { @@ -232,7 +229,7 @@ export class LightProbesData { @serializable private _tetrahedrons: Tetrahedron[] = []; } -legacyCC.internal.LightProbesData = LightProbesData; +cclegacy.internal.LightProbesData = LightProbesData; /** * @en light probe data @@ -341,7 +338,7 @@ export class LightProbes { } protected _updatePipeline () { - const root = legacyCC.director.root; + const root = cclegacy.director.root; const pipeline = root.pipeline; if (pipeline.macros.CC_LIGHT_PROBE_ENABLED !== this.enabled) { @@ -350,4 +347,4 @@ export class LightProbes { } } } -legacyCC.internal.LightProbes = LightProbes; +cclegacy.internal.LightProbes = LightProbes; diff --git a/cocos/gi/light-probe/sh.ts b/cocos/gi/light-probe/sh.ts index 033ba17349e..15dcfc6325c 100644 --- a/cocos/gi/light-probe/sh.ts +++ b/cocos/gi/light-probe/sh.ts @@ -23,10 +23,8 @@ THE SOFTWARE. */ -import { Vec4 } from '../../core'; +import { Vec4, Vec3, cclegacy } from '../../core'; import { assertIsTrue } from '../../core/data/utils/asserts'; -import { legacyCC } from '../../core/global-exports'; -import { Vec3 } from '../../core/math/vec3'; const SH_BASIS_COUNT = 9; @@ -326,4 +324,4 @@ export class SH { return l * l + l + m; } } -legacyCC.internal.SH = SH; +cclegacy.internal.SH = SH; \ No newline at end of file diff --git a/cocos/input/deprecated-3.3.0.ts b/cocos/input/deprecated-3.3.0.ts index 7173e4f69d3..9c76e8dfaa5 100644 --- a/cocos/input/deprecated-3.3.0.ts +++ b/cocos/input/deprecated-3.3.0.ts @@ -23,7 +23,7 @@ THE SOFTWARE. */ -import { deprecateModuleExportedName } from '../core/utils/x-deprecated'; +import { deprecateModuleExportedName } from '../core'; deprecateModuleExportedName({ SystemEventType: { diff --git a/cocos/input/deprecated-3.4.0.ts b/cocos/input/deprecated-3.4.0.ts index 8bd09af4e5f..5d71191f588 100644 --- a/cocos/input/deprecated-3.4.0.ts +++ b/cocos/input/deprecated-3.4.0.ts @@ -23,7 +23,7 @@ THE SOFTWARE. */ -import { deprecateModuleExportedName } from '../core/utils/x-deprecated'; +import { deprecateModuleExportedName } from '../core'; deprecateModuleExportedName({ SystemEvent: { diff --git a/cocos/input/deprecated.ts b/cocos/input/deprecated.ts index 922682b3141..c8b577bdaff 100644 --- a/cocos/input/deprecated.ts +++ b/cocos/input/deprecated.ts @@ -25,10 +25,9 @@ import './deprecated-3.3.0'; import './deprecated-3.4.0'; -import { markAsWarning, replaceProperty } from '../core/utils/x-deprecated'; -import { Event, EventKeyboard, EventMouse, EventTouch, SystemEventType } from './types'; +import { markAsWarning, replaceProperty, macro } from '../core'; +import { Event, EventMouse, EventTouch, SystemEventType } from './types'; import { SystemEvent } from './system-event'; -import { macro } from '../core/platform/macro'; replaceProperty(SystemEventType, 'Node.EventType', [ { diff --git a/cocos/input/input.ts b/cocos/input/input.ts index a18ca9c06bb..31d38ee8a59 100644 --- a/cocos/input/input.ts +++ b/cocos/input/input.ts @@ -27,11 +27,9 @@ import { EDITOR, NATIVE } from 'internal:constants'; import { TouchInputSource, MouseInputSource, KeyboardInputSource, AccelerometerInputSource, GamepadInputDevice, HandleInputDevice, HMDInputDevice } from 'pal/input'; import { touchManager } from '../../pal/input/touch-manager'; -import { sys } from '../core/platform/sys'; -import { EventTarget } from '../core/event/event-target'; +import { sys, EventTarget, cclegacy } from '../core'; import { Event, EventAcceleration, EventGamepad, EventHandle, EventHMD, EventKeyboard, EventMouse, EventTouch, Touch } from './types'; import { InputEventType } from './types/event-enum'; -import { legacyCC } from '../core/global-exports'; export enum EventDispatcherPriority { GLOBAL = 0, @@ -223,7 +221,7 @@ export class Input { * @param target - The event listener's target and callee */ public off (eventType: K, callback?: InputEventMap[K], target?: any) { - if (EDITOR && !legacyCC.GAME_VIEW) { + if (EDITOR && !cclegacy.GAME_VIEW) { return; } this._eventTarget.off(eventType, callback, target); @@ -236,7 +234,7 @@ export class Input { * 是否启用加速度计事件。 */ public setAccelerometerEnabled (isEnable: boolean) { - if (EDITOR && !legacyCC.GAME_VIEW) { + if (EDITOR && !cclegacy.GAME_VIEW) { return; } if (isEnable) { @@ -254,7 +252,7 @@ export class Input { * 设置加速度计间隔值。 */ public setAccelerometerInterval (intervalInMileSeconds: number): void { - if (EDITOR && !legacyCC.GAME_VIEW) { + if (EDITOR && !cclegacy.GAME_VIEW) { return; } this._accelerometerInput.setInterval(intervalInMileSeconds); @@ -270,7 +268,7 @@ export class Input { const changedTouches = [touch]; const eventTouch = new EventTouch(changedTouches, false, eventType, (eventType === InputEventType.TOUCH_END ? [] : changedTouches)); eventTouch.windowId = eventMouse.windowId; - + if (eventType === InputEventType.TOUCH_END) { touchManager.releaseTouch(touchID); } diff --git a/cocos/input/system-event.ts b/cocos/input/system-event.ts index 710d0a43378..a7d1f14d944 100644 --- a/cocos/input/system-event.ts +++ b/cocos/input/system-event.ts @@ -24,10 +24,9 @@ THE SOFTWARE. */ -import { EventTarget } from '../core/event'; +import { EventTarget, cclegacy } from '../core'; import { EventAcceleration, EventKeyboard, EventMouse, EventTouch, SystemEventType, Touch } from './types'; -import { input, Input } from './input'; -import { legacyCC } from '../core/global-exports'; +import { input } from './input'; import { InputEventType } from './types/event-enum'; export declare namespace SystemEvent { @@ -147,7 +146,7 @@ export class SystemEvent extends EventTarget { } } -legacyCC.SystemEvent = SystemEvent; +cclegacy.SystemEvent = SystemEvent; /** * @module cc */ @@ -159,4 +158,4 @@ legacyCC.SystemEvent = SystemEvent; * @deprecated since v3.4.0, please use input instead. */ export const systemEvent = new SystemEvent(); -legacyCC.systemEvent = systemEvent; +cclegacy.systemEvent = systemEvent; diff --git a/cocos/input/types/event-enum.ts b/cocos/input/types/event-enum.ts index ca36e5f29d6..e232ae62292 100644 --- a/cocos/input/types/event-enum.ts +++ b/cocos/input/types/event-enum.ts @@ -23,7 +23,7 @@ THE SOFTWARE. */ -import { legacyCC } from '../../core/global-exports'; +import { cclegacy } from '../../core'; import { NodeEventType } from '../../scene-graph/node-event'; /** @@ -406,4 +406,4 @@ export enum InputEventType { export type SystemEventTypeUnion = SystemEventType | NodeEventType | InputEventType | string; -legacyCC.SystemEventType = SystemEventType; +cclegacy.SystemEventType = SystemEventType; diff --git a/cocos/input/types/event/event-mouse.ts b/cocos/input/types/event/event-mouse.ts index 00a2c70bbfe..f7423b33bd4 100644 --- a/cocos/input/types/event/event-mouse.ts +++ b/cocos/input/types/event/event-mouse.ts @@ -25,8 +25,7 @@ */ import { Event } from './event'; -import { Vec2 } from '../../../core/math/vec2'; -import { legacyCC } from '../../../core/global-exports'; +import { Vec2, cclegacy } from '../../../core'; import { SystemEventTypeUnion } from '../event-enum'; /** @@ -219,7 +218,7 @@ export class EventMouse extends Event { out = new Vec2(); } - Vec2.set(out, this._x, legacyCC.view._designResolutionSize.height - this._y); + Vec2.set(out, this._x, cclegacy.view._designResolutionSize.height - this._y); return out; } @@ -234,7 +233,7 @@ export class EventMouse extends Event { } Vec2.set(out, this._x, this._y); - legacyCC.view._convertToUISpace(out); + cclegacy.view._convertToUISpace(out); return out; } @@ -263,7 +262,7 @@ export class EventMouse extends Event { } Vec2.set(out, this._prevX, this._prevY); - legacyCC.view._convertToUISpace(out); + cclegacy.view._convertToUISpace(out); return out; } @@ -307,7 +306,7 @@ export class EventMouse extends Event { out = new Vec2(); } - Vec2.set(out, (this._x - this._prevX) / legacyCC.view.getScaleX(), (this._y - this._prevY) / legacyCC.view.getScaleY()); + Vec2.set(out, (this._x - this._prevX) / cclegacy.view.getScaleX(), (this._y - this._prevY) / cclegacy.view.getScaleY()); return out; } @@ -316,7 +315,7 @@ export class EventMouse extends Event { * @zh 获取鼠标距离上一次事件移动在 UI 坐标系下的 X 轴距离。 */ public getUIDeltaX () { - return (this._x - this._prevX) / legacyCC.view.getScaleX(); + return (this._x - this._prevX) / cclegacy.view.getScaleX(); } /** @@ -324,7 +323,7 @@ export class EventMouse extends Event { * @zh 获取鼠标距离上一次事件移动在 UI 坐标系下的 Y 轴距离。 */ public getUIDeltaY () { - return (this._y - this._prevY) / legacyCC.view.getScaleY(); + return (this._y - this._prevY) / cclegacy.view.getScaleY(); } /** @@ -365,8 +364,8 @@ export class EventMouse extends Event { * @zh 获取鼠标当前 X 轴位置。 */ public getUILocationX () { - const viewport = legacyCC.view.getViewportRect(); - return (this._x - viewport.x) / legacyCC.view.getScaleX(); + const viewport = cclegacy.view.getViewportRect(); + return (this._x - viewport.x) / cclegacy.view.getScaleX(); } /** @@ -374,8 +373,8 @@ export class EventMouse extends Event { * @zh 获取鼠标当前 Y 轴位置。 */ public getUILocationY () { - const viewport = legacyCC.view.getViewportRect(); - return (this._y - viewport.y) / legacyCC.view.getScaleY(); + const viewport = cclegacy.view.getViewportRect(); + return (this._y - viewport.y) / cclegacy.view.getScaleY(); } } diff --git a/cocos/input/types/event/event-touch.ts b/cocos/input/types/event/event-touch.ts index 462387fbbc9..6e90d6a38f9 100644 --- a/cocos/input/types/event/event-touch.ts +++ b/cocos/input/types/event/event-touch.ts @@ -25,7 +25,7 @@ */ import { Event } from './event'; -import { Vec2 } from '../../../core/math/vec2'; +import { Vec2 } from '../../../core'; import { Touch } from '../touch'; import { SystemEventTypeUnion } from '../event-enum'; diff --git a/cocos/input/types/event/event.ts b/cocos/input/types/event/event.ts index 83612183632..f712bcb091b 100644 --- a/cocos/input/types/event/event.ts +++ b/cocos/input/types/event/event.ts @@ -24,7 +24,7 @@ THE SOFTWARE. */ -import { legacyCC } from '../../../core/global-exports'; +import { cclegacy } from '../../../core'; import { SystemEventTypeUnion } from '../event-enum'; /** @@ -291,4 +291,4 @@ export class Event { } /* tslint:disable:no-string-literal */ -legacyCC.Event = Event; +cclegacy.Event = Event; diff --git a/cocos/input/types/touch.ts b/cocos/input/types/touch.ts index ad9c3b89448..0da6e7da743 100644 --- a/cocos/input/types/touch.ts +++ b/cocos/input/types/touch.ts @@ -24,8 +24,7 @@ THE SOFTWARE. */ -import { Vec2 } from '../../core/math'; -import { legacyCC } from '../../core/global-exports'; +import { Vec2, cclegacy } from '../../core'; const _vec2 = new Vec2(); /** @@ -94,7 +93,7 @@ export class Touch { } out.set(this._point.x, this._point.y); - legacyCC.view._convertToUISpace(out); + cclegacy.view._convertToUISpace(out); return out; } @@ -103,8 +102,8 @@ export class Touch { * @zh 获取当前触点在 UI 坐标系中 X 轴位置。 */ public getUILocationX () { - const viewport = legacyCC.view.getViewportRect(); - return (this._point.x - viewport.x) / legacyCC.view.getScaleX(); + const viewport = cclegacy.view.getViewportRect(); + return (this._point.x - viewport.x) / cclegacy.view.getScaleX(); } /** @@ -112,8 +111,8 @@ export class Touch { * @zh 获取当前触点在 UI 坐标系中 Y 轴位置。 */ public getUILocationY () { - const viewport = legacyCC.view.getViewportRect(); - return (this._point.y - viewport.y) / legacyCC.view.getScaleY(); + const viewport = cclegacy.view.getViewportRect(); + return (this._point.y - viewport.y) / cclegacy.view.getScaleY(); } /** @@ -141,7 +140,7 @@ export class Touch { } out.set(this._prevPoint.x, this._prevPoint.y); - legacyCC.view._convertToUISpace(out); + cclegacy.view._convertToUISpace(out); return out; } @@ -170,7 +169,7 @@ export class Touch { } out.set(this._startPoint.x, this._startPoint.y); - legacyCC.view._convertToUISpace(out); + cclegacy.view._convertToUISpace(out); return out; } @@ -201,7 +200,7 @@ export class Touch { _vec2.set(this._point); _vec2.subtract(this._prevPoint); - out.set(legacyCC.view.getScaleX(), legacyCC.view.getScaleY()); + out.set(cclegacy.view.getScaleX(), cclegacy.view.getScaleY()); Vec2.divide(out, _vec2, out); return out; } @@ -216,7 +215,7 @@ export class Touch { out = new Vec2(); } - out.set(this._point.x, legacyCC.view._designResolutionSize.height - this._point.y); + out.set(this._point.x, cclegacy.view._designResolutionSize.height - this._point.y); return out; } @@ -230,7 +229,7 @@ export class Touch { out = new Vec2(); } - out.set(this._prevPoint.x, legacyCC.view._designResolutionSize.height - this._prevPoint.y); + out.set(this._prevPoint.x, cclegacy.view._designResolutionSize.height - this._prevPoint.y); return out; } @@ -244,7 +243,7 @@ export class Touch { out = new Vec2(); } - out.set(this._startPoint.x, legacyCC.view._designResolutionSize.height - this._startPoint.y); + out.set(this._startPoint.x, cclegacy.view._designResolutionSize.height - this._startPoint.y); return out; } @@ -297,7 +296,7 @@ export class Touch { this._point.x = x || 0; this._point.y = y || 0; } - this._lastModified = legacyCC.game.frameStartTime; + this._lastModified = cclegacy.game.frameStartTime; } /** @@ -321,8 +320,8 @@ export class Touch { } else { this._prevPoint = new Vec2(x || 0, y || 0); } - this._lastModified = legacyCC.game.frameStartTime; + this._lastModified = cclegacy.game.frameStartTime; } } -legacyCC.Touch = Touch; +cclegacy.Touch = Touch; diff --git a/cocos/misc/camera-component.ts b/cocos/misc/camera-component.ts index e5738c82f2a..9410966dce5 100644 --- a/cocos/misc/camera-component.ts +++ b/cocos/misc/camera-component.ts @@ -28,8 +28,7 @@ import { ccclass, help, executeInEditMode, menu, tooltip, displayOrder, type, se import { RenderTexture } from '../asset/assets/render-texture'; import { UITransform } from '../2d/framework'; import { Component } from '../scene-graph'; -import { Ray } from '../core/geometry'; -import { Color, Rect, toRadian, Vec3 } from '../core/math'; +import { Color, Rect, toRadian, Vec3, cclegacy, geometry } from '../core'; import { CAMERA_DEFAULT_MASK } from '../rendering/define'; import { scene } from '../render-scene'; import { SKYBOX_FLAG, CameraProjection, CameraFOVAxis, CameraAperture, CameraISO, CameraShutter, @@ -38,7 +37,6 @@ import { Node } from '../scene-graph/node'; import { Layers } from '../scene-graph/layers'; import { Enum } from '../core/value-types'; import { TransformBit } from '../scene-graph/node-enum'; -import { legacyCC } from '../core/global-exports'; import { RenderWindow } from '../render-scene/core/render-window'; import { ClearFlagBit } from '../gfx'; @@ -457,7 +455,7 @@ export class Camera extends Component { this._updateTargetTexture(); if (!value && this._camera) { - this._camera.changeTargetWindow(EDITOR ? legacyCC.director.root.tempWindow : null); + this._camera.changeTargetWindow(EDITOR ? cclegacy.director.root.tempWindow : null); this._camera.isWindowSize = true; } this.node.emit(Camera.TARGET_TEXTURE_CHANGE, this); @@ -487,8 +485,8 @@ export class Camera extends Component { set inEditorMode (value) { this._inEditorMode = value; if (this._camera) { - this._camera.changeTargetWindow(value ? legacyCC.director.root && legacyCC.director.root.mainWindow - : legacyCC.director.root && legacyCC.director.root.tempWindow); + this._camera.changeTargetWindow(value ? cclegacy.director.root && cclegacy.director.root.mainWindow + : cclegacy.director.root && cclegacy.director.root.tempWindow); } } @@ -556,8 +554,8 @@ export class Camera extends Component { * @param out The output ray object. * @returns Return the output ray object. */ - public screenPointToRay (x: number, y: number, out?: Ray) { - if (!out) { out = Ray.create(); } + public screenPointToRay (x: number, y: number, out?: geometry.Ray) { + if (!out) { out = geometry.Ray.create(); } if (this._camera) { this._camera.screenPointToRay(out, x, y); } return out; } @@ -610,11 +608,11 @@ export class Camera extends Component { this.worldToScreen(wpos, _temp_vec3_1); const cmp = uiNode.getComponent('cc.UITransform') as UITransform; - const designSize = legacyCC.view.getVisibleSize(); + const designSize = cclegacy.view.getVisibleSize(); const xoffset = _temp_vec3_1.x - this._camera.width * 0.5; const yoffset = _temp_vec3_1.y - this._camera.height * 0.5; - _temp_vec3_1.x = xoffset / legacyCC.view.getScaleX() + designSize.width * 0.5; - _temp_vec3_1.y = yoffset / legacyCC.view.getScaleY() + designSize.height * 0.5; + _temp_vec3_1.x = xoffset / cclegacy.view.getScaleX() + designSize.width * 0.5; + _temp_vec3_1.y = yoffset / cclegacy.view.getScaleY() + designSize.height * 0.5; if (cmp) { cmp.convertToNodeSpaceAR(_temp_vec3_1, out); @@ -628,13 +626,13 @@ export class Camera extends Component { */ public _createCamera () { if (!this._camera) { - this._camera = (legacyCC.director.root).createCamera(); + this._camera = (cclegacy.director.root).createCamera(); this._camera!.initialize({ name: this.node.name, node: this.node, projection: this._projection, - window: this._inEditorMode ? legacyCC.director.root && legacyCC.director.root.mainWindow - : legacyCC.director.root && legacyCC.director.root.tempWindow, + window: this._inEditorMode ? cclegacy.director.root && cclegacy.director.root.mainWindow + : cclegacy.director.root && cclegacy.director.root.tempWindow, priority: this._priority, cameraType: this.cameraType, trackingType: this.trackingType, @@ -703,4 +701,4 @@ export class Camera extends Component { } } -legacyCC.Camera = Camera; +cclegacy.Camera = Camera; diff --git a/cocos/misc/deprecated.ts b/cocos/misc/deprecated.ts index 6d298e20130..17b56cb1b06 100644 --- a/cocos/misc/deprecated.ts +++ b/cocos/misc/deprecated.ts @@ -27,9 +27,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-return */ import { Camera } from './camera-component'; -import { replaceProperty } from '../core/utils/x-deprecated'; -import { legacyCC } from '../core/global-exports'; -import { js } from '../core/utils/js'; +import { replaceProperty, cclegacy, js } from '../core'; import { ModelRenderer } from './model-renderer'; replaceProperty(Camera, 'Camera', [ @@ -59,7 +57,7 @@ replaceProperty(Camera.prototype, 'Camera.prototype', [ * @deprecated Since v1.2 */ export { Camera as CameraComponent }; -legacyCC.CameraComponent = Camera; +cclegacy.CameraComponent = Camera; js.setClassAlias(Camera, 'cc.CameraComponent'); /** @@ -67,5 +65,5 @@ js.setClassAlias(Camera, 'cc.CameraComponent'); * @deprecated Since v3.6 */ export { ModelRenderer as RenderableComponent }; -legacyCC.RenderableComponent = ModelRenderer; +cclegacy.RenderableComponent = ModelRenderer; js.setClassAlias(ModelRenderer, 'cc.RenderableComponent'); diff --git a/cocos/render-scene/core/pass.ts b/cocos/render-scene/core/pass.ts index 951deb2480e..7f82efdb8af 100644 --- a/cocos/render-scene/core/pass.ts +++ b/cocos/render-scene/core/pass.ts @@ -28,7 +28,7 @@ import { Root } from '../../root'; import { TextureBase } from '../../asset/assets/texture-base'; import { builtinResMgr } from '../../asset/asset-manager/builtin-res-mgr'; import { getPhaseID } from '../../rendering/pass-phase'; -import { murmurhash2_32_gc } from '../../core/algorithm/murmurhash2_gc'; +import { murmurhash2_32_gc } from '../../core'; import { BufferUsageBit, DynamicStateFlagBit, DynamicStateFlags, Feature, GetTypeSize, MemoryUsageBit, PrimitiveMode, Type, Color, BlendState, BlendTarget, Buffer, BufferInfo, BufferViewInfo, DepthStencilState, DescriptorSet, DescriptorSetInfo, DescriptorSetLayout, Device, RasterizerState, Sampler, Texture, Shader, PipelineLayout, deviceManager, diff --git a/cocos/rendering/render-pipeline.ts b/cocos/rendering/render-pipeline.ts index 3bc91e218dd..737a39dcce3 100644 --- a/cocos/rendering/render-pipeline.ts +++ b/cocos/rendering/render-pipeline.ts @@ -48,7 +48,7 @@ import { OS } from '../../pal/system-info/enum-type'; import { macro } from '../core/platform/macro'; import { UBOSkinning } from './define'; import { PipelineRuntime } from './custom/pipeline'; -import { murmurhash2_32_gc } from '../core/algorithm/murmurhash2_gc'; +import { murmurhash2_32_gc } from '../core'; /** * @en Render pipeline information descriptor diff --git a/cocos/root.jsb.ts b/cocos/root.jsb.ts index 9f97da89828..7a5d98200a5 100644 --- a/cocos/root.jsb.ts +++ b/cocos/root.jsb.ts @@ -1,12 +1,9 @@ -import { Pool } from './core/memop'; -import { warnID } from './core/platform/debug'; -import { macro } from './core/platform/macro'; import legacyCC from '../predefine'; import { DataPoolManager } from './3d/skeletal-animation/data-pool-manager'; import { Device, deviceManager } from './gfx'; import { DebugView } from './rendering/debug-view'; import { buildDeferredLayout, buildForwardLayout } from './rendering/custom/effect'; -import { settings, Settings } from './core/settings'; +import { settings, Settings, warnID, Pool, macro } from './core'; import { ForwardPipeline } from './rendering'; declare const nr: any; diff --git a/cocos/root.ts b/cocos/root.ts index a554d3fe839..ba378ec1b76 100644 --- a/cocos/root.ts +++ b/cocos/root.ts @@ -23,7 +23,7 @@ THE SOFTWARE. */ -import { Pool } from './core/memop'; +import { Pool, cclegacy, warnID, settings, Settings, macro } from './core'; import { RenderPipeline, createDefaultPipeline, DeferredPipeline } from './rendering'; import { DebugView } from './rendering/debug-view'; import { Camera, Light, Model } from './render-scene/scene'; @@ -33,16 +33,12 @@ import { IRenderSceneInfo, RenderScene } from './render-scene/core/render-scene' import { DirectionalLight } from './render-scene/scene/directional-light'; import { SphereLight } from './render-scene/scene/sphere-light'; import { SpotLight } from './render-scene/scene/spot-light'; -import { legacyCC } from './core/global-exports'; import { RenderWindow, IRenderWindowInfo } from './render-scene/core/render-window'; import { ColorAttachment, DepthStencilAttachment, RenderPassInfo, StoreOp, Device, Swapchain, Feature, deviceManager } from './gfx'; -import { warnID } from './core/platform/debug'; import { Pipeline, PipelineRuntime } from './rendering/custom/pipeline'; import { Batcher2D } from './2d/renderer/batcher-2d'; import { IPipelineEvent } from './rendering/pipeline-event'; -import { settings, Settings } from './core/settings'; import { localDescriptorSetLayout_ResizeMaxJoints } from './rendering/define'; -import { macro } from './core/platform/macro'; /** * @en Initialization information for the Root @@ -282,7 +278,7 @@ export class Root { */ constructor (device: Device) { this._device = device; - this._dataPoolMgr = legacyCC.internal.DataPoolManager && new legacyCC.internal.DataPoolManager(device) as DataPoolManager; + this._dataPoolMgr = cclegacy.internal.DataPoolManager && new cclegacy.internal.DataPoolManager(device) as DataPoolManager; RenderScene.registerCreateFunc(this); RenderWindow.registerCreateFunc(this); @@ -386,8 +382,8 @@ export class Root { //----------------------------------------------- // choose pipeline //----------------------------------------------- - if (macro.CUSTOM_PIPELINE_NAME !== '' && legacyCC.rendering && this.usesCustomPipeline) { - this._customPipeline = legacyCC.rendering.createCustomPipeline(); + if (macro.CUSTOM_PIPELINE_NAME !== '' && cclegacy.rendering && this.usesCustomPipeline) { + this._customPipeline = cclegacy.rendering.createCustomPipeline(); isCreateDefaultPipeline = true; this._pipeline = this._customPipeline!; } else { @@ -412,14 +408,14 @@ export class Root { //----------------------------------------------- // pipeline initialization completed //----------------------------------------------- - const scene = legacyCC.director.getScene(); + const scene = cclegacy.director.getScene(); if (scene) { scene.globals.activate(); } this.onGlobalPipelineStateChanged(); - if (!this._batcher && legacyCC.internal.Batcher2D) { - this._batcher = new legacyCC.internal.Batcher2D(this); + if (!this._batcher && cclegacy.internal.Batcher2D) { + this._batcher = new cclegacy.internal.Batcher2D(this); if (!this._batcher!.initialize()) { this.destroy(); return false; @@ -501,7 +497,7 @@ export class Root { if (this._pipeline && cameraList.length > 0) { this._device.acquire([deviceManager.swapchain]); const scenes = this._scenes; - const stamp = legacyCC.director.getTotalFrames(); + const stamp = cclegacy.director.getTotalFrames(); if (this._batcher) { this._batcher.update(); this._batcher.uploadBuffers(); @@ -511,13 +507,13 @@ export class Root { scenes[i].update(stamp); } - legacyCC.director.emit(legacyCC.Director.EVENT_BEFORE_COMMIT); + cclegacy.director.emit(cclegacy.Director.EVENT_BEFORE_COMMIT); cameraList.sort((a: Camera, b: Camera) => a.priority - b.priority); for (let i = 0; i < cameraList.length; ++i) { cameraList[i].geometryRenderer?.update(); } - legacyCC.director.emit(legacyCC.Director.EVENT_BEFORE_RENDER); + cclegacy.director.emit(cclegacy.Director.EVENT_BEFORE_RENDER); this._pipeline.render(cameraList); this._device.present(); } @@ -720,4 +716,4 @@ export class Root { } } -legacyCC.Root = Root; +cclegacy.Root = Root; diff --git a/cocos/tween/tween-system.ts b/cocos/tween/tween-system.ts index f527b3fb7aa..d67e7419d38 100644 --- a/cocos/tween/tween-system.ts +++ b/cocos/tween/tween-system.ts @@ -24,9 +24,8 @@ */ import { EDITOR } from 'internal:constants'; -import { System } from '../core'; +import { System, cclegacy } from '../core'; import { ActionManager } from './actions/action-manager'; -import { legacyCC } from '../core/global-exports'; import { Director, director } from '../game'; /** @@ -72,7 +71,7 @@ export class TweenSystem extends System { * @param dt @en The delta time @zh 间隔时间 */ update (dt: number) { - if (!EDITOR || legacyCC.GAME_VIEW || this._executeInEditMode) { + if (!EDITOR || cclegacy.GAME_VIEW || this._executeInEditMode) { this.actionMgr.update(dt); } } diff --git a/cocos/ui/editbox/edit-box-impl.ts b/cocos/ui/editbox/edit-box-impl.ts index ff8c68c0ee1..34c563e7591 100644 --- a/cocos/ui/editbox/edit-box-impl.ts +++ b/cocos/ui/editbox/edit-box-impl.ts @@ -30,7 +30,7 @@ import { screenAdapter } from 'pal/screen-adapter'; import { BitmapFont } from '../../2d/assets'; import { director } from '../../game/director'; import { game } from '../../game'; -import { Mat4, Vec3 } from '../../core/math'; +import { Mat4, Vec3, visibleRect, sys } from '../../core'; import { view } from '../view'; import { KeyCode } from '../../input/types'; import { contains } from '../../core/utils/misc'; @@ -38,8 +38,6 @@ import { Label } from '../../2d/components/label'; import { EditBox } from './edit-box'; import { tabIndexUtil } from './tabIndexUtil'; import { InputFlag, InputMode, KeyboardReturnType } from './types'; -import { sys } from '../../core/platform/sys'; -import visibleRect from '../../core/platform/visible-rect'; import { EditBoxImplBase } from './edit-box-impl-base'; import { BrowserType, OS } from '../../../pal/system-info/enum-type'; diff --git a/cocos/ui/view.ts b/cocos/ui/view.ts index 3e5faf6a677..d9d61181df4 100644 --- a/cocos/ui/view.ts +++ b/cocos/ui/view.ts @@ -30,14 +30,9 @@ import { MINIGAME, JSB, RUNTIME_BASED, EDITOR } from 'internal:constants'; import { screenAdapter } from 'pal/screen-adapter'; import { Eventify } from '../core/event'; import { Rect, Size, Vec2 } from '../core/math'; -import visibleRect from '../core/platform/visible-rect'; -import { legacyCC } from '../core/global-exports'; -import { errorID } from '../core/platform/debug'; -import { screen } from '../core/platform/screen'; -import { macro } from '../core/platform/macro'; +import { visibleRect, cclegacy, errorID, screen, macro, System } from '../core'; import { Orientation } from '../../pal/screen-adapter/enum-type'; import { director } from '../game/director'; -import System from '../core/system'; import { Settings, settings } from '../core/settings'; /** @@ -593,7 +588,7 @@ export class View extends Eventify(System) { } private _updateAdaptResult (width: number, height: number, windowId?: number) { - legacyCC.director.root.resize(width, height, windowId === undefined ? 1 : windowId); + cclegacy.director.root.resize(width, height, windowId === undefined ? 1 : windowId); // Frame size changed, do resize works const w = this._designResolutionSize.width; const h = this._designResolutionSize.height; @@ -659,7 +654,7 @@ class ContainerStrategy { protected _setupCanvas () { // TODO: need to figure out why set width and height of canvas - const locCanvas = legacyCC.game.canvas; + const locCanvas = cclegacy.game.canvas; if (locCanvas) { const windowSize = screen.windowSize; locCanvas.width = windowSize.width; @@ -1025,13 +1020,13 @@ export class ResolutionPolicy { } } } -legacyCC.ResolutionPolicy = ResolutionPolicy; +cclegacy.ResolutionPolicy = ResolutionPolicy; /** * @en view is the singleton view object. * @zh view 是全局的视图单例对象。 */ -export const view = View.instance = legacyCC.view = new View(); +export const view = View.instance = cclegacy.view = new View(); director.registerSystem('view', view, 0); /** @@ -1040,4 +1035,4 @@ director.registerSystem('view', view, 0); * * @deprecated since v3.3, please use view.getVisibleSize() instead. */ -legacyCC.winSize = localWinSize; +cclegacy.winSize = localWinSize; diff --git a/cocos/ui/widget-manager.ts b/cocos/ui/widget-manager.ts index bf9e7b9994a..acf48a8a023 100644 --- a/cocos/ui/widget-manager.ts +++ b/cocos/ui/widget-manager.ts @@ -27,15 +27,12 @@ import { EDITOR, DEV } from 'internal:constants'; import { screenAdapter } from 'pal/screen-adapter'; import { Director, director } from '../game/director'; -import { Vec2, Vec3 } from '../core/math'; +import { Vec2, Vec3, visibleRect, js, cclegacy } from '../core'; import { View } from './view'; -import visibleRect from '../core/platform/visible-rect'; import { Scene } from '../scene-graph'; import { Node } from '../scene-graph/node'; -import { array } from '../core/utils/js'; import { AlignFlags, AlignMode, computeInverseTransForTarget, getReadonlyNodeSize, Widget } from './widget'; import { UITransform } from '../2d/framework'; -import { legacyCC } from '../core/global-exports'; const _tempPos = new Vec3(); const _defaultAnchor = new Vec2(); @@ -207,7 +204,7 @@ function visitNode (node: any) { // if ((!EDITOR || widgetManager.animationState!.animatedSinceLastFrame) && widget.alignMode === AlignMode.ONCE) { // widget.enabled = false; // } else { - if (!legacyCC.isValid(node, true)) { + if (!cclegacy.isValid(node, true)) { return; } activeWidgets.push(widget); @@ -265,10 +262,10 @@ function updateAlignment (node: Node) { } } -export const widgetManager = legacyCC._widgetManager = { +export const widgetManager = cclegacy._widgetManager = { isAligning: false, _nodesOrderDirty: false, - _activeWidgetsIterator: new array.MutableForwardIterator(activeWidgets), + _activeWidgetsIterator: new js.array.MutableForwardIterator(activeWidgets), // hack animationState: EDITOR ? { previewing: false, diff --git a/cocos/ui/widget.ts b/cocos/ui/widget.ts index cfb0a4b700f..767457b94bd 100644 --- a/cocos/ui/widget.ts +++ b/cocos/ui/widget.ts @@ -28,15 +28,11 @@ import { ccclass, help, executeInEditMode, executionOrder, menu, requireComponen import { EDITOR, DEV } from 'internal:constants'; import { Component } from '../scene-graph/component'; import { UITransform } from '../2d/framework/ui-transform'; -import { Size, Vec2, Vec3 } from '../core/math'; -import { errorID } from '../core/platform/debug'; +import { Size, Vec2, Vec3, visibleRect, ccenum, errorID, cclegacy } from '../core'; import { View } from './view'; -import visibleRect from '../core/platform/visible-rect'; import { Scene } from '../scene-graph'; import { Node } from '../scene-graph/node'; -import { ccenum } from '../core/value-types/enum'; import { TransformBit } from '../scene-graph/node-enum'; -import { legacyCC } from '../core/global-exports'; import { NodeEventType } from '../scene-graph/node-event'; const _tempScale = new Vec2(); @@ -240,7 +236,7 @@ export class Widget extends Component { this._registerTargetEvents(); if (EDITOR /* && !cc.engine._isPlaying */ && this.node.parent) { // adjust the offsets to keep the size and position unchanged after target changed - legacyCC._widgetManager.updateOffsetsToStayPut(this); + cclegacy._widgetManager.updateOffsetsToStayPut(this); } this._validateTargetInDEV(); @@ -796,7 +792,7 @@ export class Widget extends Component { * ``` */ public updateAlignment () { - legacyCC._widgetManager.updateAlignment(this.node); + cclegacy._widgetManager.updateAlignment(this.node); } /** @@ -824,14 +820,14 @@ export class Widget extends Component { public onEnable () { this.node.getPosition(this._lastPos); this._lastSize.set(this.node._uiProps.uiTransformComp!.contentSize); - legacyCC._widgetManager.add(this); + cclegacy._widgetManager.add(this); this._hadAlignOnce = false; this._registerEvent(); this._registerTargetEvents(); } public onDisable () { - legacyCC._widgetManager.remove(this); + cclegacy._widgetManager.remove(this); this._unregisterEvent(); this._unregisterTargetEvents(); } @@ -870,7 +866,7 @@ export class Widget extends Component { } protected _registerEvent () { - if (EDITOR && !legacyCC.GAME_VIEW) { + if (EDITOR && !cclegacy.GAME_VIEW) { this.node.on(NodeEventType.TRANSFORM_CHANGED, this._adjustWidgetToAllowMovingInEditor, this); this.node.on(NodeEventType.SIZE_CHANGED, this._adjustWidgetToAllowResizingInEditor, this); } else { @@ -882,7 +878,7 @@ export class Widget extends Component { } protected _unregisterEvent () { - if (EDITOR && !legacyCC.GAME_VIEW) { + if (EDITOR && !cclegacy.GAME_VIEW) { this.node.off(NodeEventType.TRANSFORM_CHANGED, this._adjustWidgetToAllowMovingInEditor, this); this.node.off(NodeEventType.SIZE_CHANGED, this._adjustWidgetToAllowResizingInEditor, this); } else { @@ -951,7 +947,7 @@ export class Widget extends Component { } protected _setDirtyByMode () { - if (this.alignMode === AlignMode.ALWAYS || (EDITOR && !legacyCC.GAME_VIEW)) { + if (this.alignMode === AlignMode.ALWAYS || (EDITOR && !cclegacy.GAME_VIEW)) { this._recursiveDirty(); } } @@ -992,7 +988,7 @@ export class Widget extends Component { if (EDITOR && this.node.parent) { // adjust the offsets to keep the size and position unchanged after alignment changed - legacyCC._widgetManager.updateOffsetsToStayPut(this, flag); + cclegacy._widgetManager.updateOffsetsToStayPut(this, flag); } } else { if (isHorizontal) { @@ -1023,7 +1019,7 @@ export declare namespace Widget { } // cc.Widget = module.exports = Widget; -legacyCC.internal.computeInverseTransForTarget = computeInverseTransForTarget; -legacyCC.internal.getReadonlyNodeSize = getReadonlyNodeSize; +cclegacy.internal.computeInverseTransForTarget = computeInverseTransForTarget; +cclegacy.internal.getReadonlyNodeSize = getReadonlyNodeSize; -legacyCC.Widget = Widget; +cclegacy.Widget = Widget; diff --git a/cocos/video/video-player-impl-web.ts b/cocos/video/video-player-impl-web.ts index dce96e86710..71f585388f6 100644 --- a/cocos/video/video-player-impl-web.ts +++ b/cocos/video/video-player-impl-web.ts @@ -24,14 +24,13 @@ */ import { screenAdapter } from 'pal/screen-adapter'; -import { mat4 } from '../core/math'; +import { mat4, visibleRect } from '../core'; import { sys, screen, warn } from '../core/platform'; import { game } from '../game'; import { contains } from '../core/utils/misc'; import { EventType, READY_STATE } from './video-player-enums'; import { VideoPlayerImpl } from './video-player-impl'; import { ClearFlagBit } from '../gfx'; -import visibleRect from '../core/platform/visible-rect'; import { BrowserType, OS } from '../../pal/system-info/enum-type'; const MIN_ZINDEX = -(2 ** 15); diff --git a/editor/exports/offline-mappings.ts b/editor/exports/offline-mappings.ts index 1a45fe4ed21..7c4ac6900c1 100644 --- a/editor/exports/offline-mappings.ts +++ b/editor/exports/offline-mappings.ts @@ -6,7 +6,7 @@ import { ShadeModel, ShaderStageFlagBit, StencilOp, Type, DescriptorType, SamplerInfo, MemoryAccessBit, Sampler, } from '../../cocos/gfx'; import { RenderPassStage, RenderPriority, SetIndex } from '../../cocos/rendering/define'; -import { murmurhash2_32_gc } from '../../cocos/core/algorithm/murmurhash2_gc'; +import { murmurhash2_32_gc } from '../../cocos/core'; const typeMap: Record = {}; typeMap[typeMap.bool = Type.BOOL] = 'bool'; diff --git a/exports/base.ts b/exports/base.ts index a2598cc1c95..e88e3b375ad 100644 --- a/exports/base.ts +++ b/exports/base.ts @@ -53,8 +53,6 @@ legacyCC.renderer = renderer; export * from '../extensions/ccpool/node-pool'; -export { legacyCC as cclegacy }; - export * from '../cocos/input/types'; export * from '../cocos/input'; diff --git a/native/cocos/core/Root.cpp b/native/cocos/core/Root.cpp index c51ef999bfe..7d2b1eacd8b 100644 --- a/native/cocos/core/Root.cpp +++ b/native/cocos/core/Root.cpp @@ -26,6 +26,8 @@ #include "core/Root.h" #include "2d/renderer/Batcher2d.h" #include "application/ApplicationManager.h" +#include "bindings/event/CustomEventTypes.h" +#include "bindings/event/EventDispatcher.h" #include "core/event/CallbacksInvoker.h" #include "core/event/EventTypesToJS.h" #include "platform/interfaces/modules/IScreen.h" @@ -45,8 +47,6 @@ #include "scene/Camera.h" #include "scene/DirectionalLight.h" #include "scene/SpotLight.h" -#include "bindings/event/EventDispatcher.h" -#include "bindings/event/CustomEventTypes.h" namespace cc { diff --git a/native/cocos/core/Root.h b/native/cocos/core/Root.h index 4440be473e2..c5666e0348d 100644 --- a/native/cocos/core/Root.h +++ b/native/cocos/core/Root.h @@ -295,6 +295,7 @@ class Root final { const ccstd::vector &getCameraList() const { return _cameraList; } + private: void frameMoveBegin(); void frameMoveProcess(bool isNeedUpdateScene, int32_t totalFrames, const ccstd::vector> &windows); diff --git a/native/cocos/renderer/gfx-vulkan/VKCommandBuffer.cpp b/native/cocos/renderer/gfx-vulkan/VKCommandBuffer.cpp index 763a555d463..3b2ced8dda4 100644 --- a/native/cocos/renderer/gfx-vulkan/VKCommandBuffer.cpp +++ b/native/cocos/renderer/gfx-vulkan/VKCommandBuffer.cpp @@ -72,7 +72,7 @@ void CCVKCommandBuffer::begin(RenderPass *renderPass, uint32_t subpass, Framebuf CCVKDevice::getInstance()->gpuDevice()->getCommandBufferPool()->request(_gpuCommandBuffer); - _curGPUPipelineState = nullptr; + _curGPUPipelineState = nullptr; _curGPUInputAssembler = nullptr; _curGPUDescriptorSets.assign(_curGPUDescriptorSets.size(), nullptr); _curDynamicOffsetsArray.assign(_curDynamicOffsetsArray.size(), {}); diff --git a/native/cocos/renderer/gfx-vulkan/VKDevice.cpp b/native/cocos/renderer/gfx-vulkan/VKDevice.cpp index d924a5eca13..0bdb2ba3a18 100644 --- a/native/cocos/renderer/gfx-vulkan/VKDevice.cpp +++ b/native/cocos/renderer/gfx-vulkan/VKDevice.cpp @@ -47,8 +47,8 @@ #include "states/VKSampler.h" #include "states/VKTextureBarrier.h" -#include "gfx-base/SPIRVUtils.h" #include "application/ApplicationManager.h" +#include "gfx-base/SPIRVUtils.h" #include "platform/interfaces/modules/IXRInterface.h" #include "profiler/Profiler.h" diff --git a/native/cocos/renderer/pipeline/custom/NativeExecutor.cpp b/native/cocos/renderer/pipeline/custom/NativeExecutor.cpp index 521d8c7cbc4..0cd9ae36a73 100644 --- a/native/cocos/renderer/pipeline/custom/NativeExecutor.cpp +++ b/native/cocos/renderer/pipeline/custom/NativeExecutor.cpp @@ -16,7 +16,6 @@ #include "cocos/renderer/gfx-base/GFXDef-common.h" #include "cocos/renderer/gfx-base/GFXDevice.h" - namespace cc { namespace render { diff --git a/native/cocos/renderer/pipeline/custom/NativePipelineImpl.cpp b/native/cocos/renderer/pipeline/custom/NativePipelineImpl.cpp index 78786110075..ac047306b2b 100644 --- a/native/cocos/renderer/pipeline/custom/NativePipelineImpl.cpp +++ b/native/cocos/renderer/pipeline/custom/NativePipelineImpl.cpp @@ -196,8 +196,7 @@ uint32_t NativePipeline::addDepthStencil(const ccstd::string &name, gfx::Format resourceGraph); } -void NativePipeline::updateRenderWindow(const ccstd::string& name, scene::RenderWindow* renderWindow) { - +void NativePipeline::updateRenderWindow(const ccstd::string &name, scene::RenderWindow *renderWindow) { } void NativePipeline::beginFrame() { From 9bef28065ba09fdd80ac6ac49598a052c1807d8b Mon Sep 17 00:00:00 2001 From: jk20012001 Date: Tue, 25 Oct 2022 16:43:12 +0800 Subject: [PATCH 078/829] [fix] disable skybox clear flag warning in editor (#13138) --- cocos/core/pipeline/scene-culling.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cocos/core/pipeline/scene-culling.ts b/cocos/core/pipeline/scene-culling.ts index eb6228a2253..9984b6336db 100644 --- a/cocos/core/pipeline/scene-culling.ts +++ b/cocos/core/pipeline/scene-culling.ts @@ -23,6 +23,7 @@ THE SOFTWARE. */ +import { EDITOR } from 'internal:constants'; import { intersect, Sphere } from '../geometry'; import { Model } from '../renderer/scene/model'; import { Camera, SKYBOX_FLAG } from '../renderer/scene/camera'; @@ -149,7 +150,7 @@ export function sceneCulling (pipeline: RenderPipeline, camera: Camera) { if ((camera.clearFlag & SKYBOX_FLAG)) { if (skybox.enabled && skybox.model) { renderObjects.push(getRenderObject(skybox.model, camera)); - } else if(camera.clearFlag === SKYBOX_FLAG) { + } else if (camera.clearFlag === SKYBOX_FLAG && !EDITOR) { legacyCC.warnID(15100, camera.name); } } From aeb4d16cebcdc00813ef95663005b158f4a00986 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=87=AF=E9=B9=8F?= <609075410@qq.com> Date: Tue, 25 Oct 2022 18:42:10 +0800 Subject: [PATCH 079/829] feature : support native scene for editor (#12841) --- .../asset-manager/builtin-res-mgr.jsb.ts | 22 +++++++++++++++++++ native/cocos/renderer/gfx-metal/MTLDevice.mm | 2 +- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/cocos/asset/asset-manager/builtin-res-mgr.jsb.ts b/cocos/asset/asset-manager/builtin-res-mgr.jsb.ts index deebba92004..72f9d8c40fa 100644 --- a/cocos/asset/asset-manager/builtin-res-mgr.jsb.ts +++ b/cocos/asset/asset-manager/builtin-res-mgr.jsb.ts @@ -29,6 +29,7 @@ import type { ImageSource } from '../assets/image-asset'; import assetManager from '../asset-manager/asset-manager'; import { BuiltinBundleName } from '../asset-manager/shared'; import { TEST, EDITOR } from 'internal:constants'; +import Bundle from '../asset-manager/bundle'; import { Settings, settings } from '../../core/settings'; import releaseManager from '../asset-manager/release-manager'; @@ -80,6 +81,27 @@ builtinResMgrProto.init = function (): Promise { spriteFrame._uuid = 'default-spriteframe'; resources[spriteFrame._uuid] = spriteFrame; } + if (EDITOR) { + const builtinAssets = settings.querySettings(Settings.Category.ENGINE, 'builtinAssets'); + const builtinBundle = new Bundle(); + builtinBundle.init({ + name: BuiltinBundleName.INTERNAL, + uuids: builtinAssets || [], + deps: [], + importBase: '', + nativeBase: '', + base: '', + paths: {}, + scenes: {}, + packs: {}, + versions: { import: [], native: [] }, + redirect: [], + debug: false, + types: [], + extensionMap: {}, + }); + } + this.initBuiltinRes(); }; diff --git a/native/cocos/renderer/gfx-metal/MTLDevice.mm b/native/cocos/renderer/gfx-metal/MTLDevice.mm index ada3f8943e5..f9fd4f946d1 100644 --- a/native/cocos/renderer/gfx-metal/MTLDevice.mm +++ b/native/cocos/renderer/gfx-metal/MTLDevice.mm @@ -392,7 +392,7 @@ of this software and associated engine source code (the "Software"), a limited, } tempFeature = FormatFeature::RENDER_TARGET | FormatFeature::SAMPLED_TEXTURE | FormatFeature::LINEAR_FILTER | FormatFeature::STORAGE_TEXTURE; - + _formatFeatures[toNumber(Format::BGRA8)] = tempFeature; _formatFeatures[toNumber(Format::R8SN)] = tempFeature; _formatFeatures[toNumber(Format::RG8SN)] = tempFeature; _formatFeatures[toNumber(Format::RGBA8SN)] = tempFeature; From 49974b80ee99009458c6fcef5788a1c662185ef7 Mon Sep 17 00:00:00 2001 From: hyde zhou Date: Wed, 26 Oct 2022 11:16:42 +0800 Subject: [PATCH 080/829] refactor render node name (#13146) --- cocos/rendering/custom/layout-graph.ts | 7 +++ cocos/rendering/custom/pipeline.ts | 10 ++-- cocos/rendering/custom/render-graph.ts | 24 ++++++++++ cocos/rendering/custom/web-pipeline.ts | 36 ++++++++++++++ .../pipeline/custom/NativePipelineTypes.h | 18 +++++++ .../pipeline/custom/NativeRenderGraph.cpp | 48 +++++++++++++++++++ .../pipeline/custom/RenderInterfaceFwd.h | 1 + .../pipeline/custom/RenderInterfaceTypes.h | 34 +++++++------ native/tools/swig-config/renderer.i | 1 + 9 files changed, 158 insertions(+), 21 deletions(-) diff --git a/cocos/rendering/custom/layout-graph.ts b/cocos/rendering/custom/layout-graph.ts index ff418a484c6..19ff3366c2f 100644 --- a/cocos/rendering/custom/layout-graph.ts +++ b/cocos/rendering/custom/layout-graph.ts @@ -98,6 +98,7 @@ export class LayoutGraphNameMap implements impl.PropertyMap { get (v: number): string { return this._names[v]; } + // skip set, name is constant in AddressableGraph readonly _names: string[]; } @@ -376,6 +377,7 @@ export class LayoutGraph implements impl.BidirectionalGraph throw Error('component map not found'); } } + // skip setName, Name is constant in AddressableGraph getName (v: number): string { return this._names[v]; } @@ -712,6 +714,7 @@ export class LayoutGraphDataNameMap implements impl.PropertyMap { get (v: number): string { return this._names[v]; } + // skip set, name is constant in AddressableGraph readonly _names: string[]; } @@ -722,6 +725,9 @@ export class LayoutGraphDataUpdateMap implements impl.PropertyMap { get (v: number): UpdateFrequency { return this._updateFrequencies[v]; } + set (v: number, updateFrequencies: UpdateFrequency): void { + this._updateFrequencies[v] = updateFrequencies; + } readonly _updateFrequencies: UpdateFrequency[]; } @@ -1020,6 +1026,7 @@ export class LayoutGraphData implements impl.BidirectionalGraph throw Error('component map not found'); } } + // skip setName, Name is constant in AddressableGraph getName (v: number): string { return this._names[v]; } diff --git a/cocos/rendering/custom/pipeline.ts b/cocos/rendering/custom/pipeline.ts index a0ed4d9d4ef..1a7aa44bfd0 100644 --- a/cocos/rendering/custom/pipeline.ts +++ b/cocos/rendering/custom/pipeline.ts @@ -67,7 +67,11 @@ export interface PipelineRuntime { readonly macros: MacroRecord; } -export interface Setter { +export interface RenderNode { + name: string; +} + +export interface Setter extends RenderNode { setMat4 (name: string, mat: Mat4): void; setQuaternion (name: string, quat: Quat): void; setColor (name: string, color: Color): void; @@ -118,11 +122,11 @@ export interface ComputePassBuilder extends Setter { addDispatch (shader: string, threadGroupCountX: number, threadGroupCountY: number, threadGroupCountZ: number): void; } -export interface MovePassBuilder { +export interface MovePassBuilder extends RenderNode { addPair (pair: MovePair): void; } -export interface CopyPassBuilder { +export interface CopyPassBuilder extends RenderNode { addPair (pair: CopyPair): void; } diff --git a/cocos/rendering/custom/render-graph.ts b/cocos/rendering/custom/render-graph.ts index a97ae6342ea..99ab767ca70 100644 --- a/cocos/rendering/custom/render-graph.ts +++ b/cocos/rendering/custom/render-graph.ts @@ -168,6 +168,9 @@ export class ResourceGraphNameMap implements impl.PropertyMap { get (v: number): string { return this._names[v]; } + set (v: number, names: string): void { + this._names[v] = names; + } readonly _names: string[]; } @@ -522,6 +525,9 @@ export class ResourceGraph implements impl.BidirectionalGraph getName (v: number): string { return this._names[v]; } + setName (v: number, value: string) { + this._names[v] = value; + } getDesc (v: number): ResourceDesc { return this._descs[v]; } @@ -729,6 +735,9 @@ export class SubpassGraphNameMap implements impl.PropertyMap { get (v: number): string { return this._names[v]; } + set (v: number, names: string): void { + this._names[v] = names; + } readonly _names: string[]; } @@ -996,6 +1005,9 @@ export class SubpassGraph implements impl.BidirectionalGraph getName (v: number): string { return this._names[v]; } + setName (v: number, value: string) { + this._names[v] = value; + } getSubpass (v: number): RasterSubpass { return this._subpasses[v]; } @@ -1215,6 +1227,9 @@ export class RenderGraphNameMap implements impl.PropertyMap { get (v: number): string { return this._names[v]; } + set (v: number, names: string): void { + this._names[v] = names; + } readonly _names: string[]; } @@ -1225,6 +1240,9 @@ export class RenderGraphLayoutMap implements impl.PropertyMap { get (v: number): string { return this._layoutNodes[v]; } + set (v: number, layoutNodes: string): void { + this._layoutNodes[v] = layoutNodes; + } readonly _layoutNodes: string[]; } @@ -1245,6 +1263,9 @@ export class RenderGraphValidMap implements impl.PropertyMap { get (v: number): boolean { return this._valid[v]; } + set (v: number, valid: boolean): void { + this._valid[v] = valid; + } readonly _valid: boolean[]; } @@ -1573,6 +1594,9 @@ export class RenderGraph implements impl.BidirectionalGraph getName (v: number): string { return this._names[v]; } + setName (v: number, value: string) { + this._names[v] = value; + } getLayout (v: number): string { return this._layoutNodes[v]; } diff --git a/cocos/rendering/custom/web-pipeline.ts b/cocos/rendering/custom/web-pipeline.ts index 79394cad435..d664f80c998 100644 --- a/cocos/rendering/custom/web-pipeline.ts +++ b/cocos/rendering/custom/web-pipeline.ts @@ -507,6 +507,12 @@ export class WebRasterQueueBuilder extends WebSetter implements RasterQueueBuild this._queue = queue; this._pipeline = pipeline; } + get name () { + return this._renderGraph.getName(this._vertID); + } + set name (name: string) { + this._renderGraph.setName(this._vertID, name); + } addSceneOfCamera (camera: Camera, light: LightInfo, sceneFlags: SceneFlags, name = 'Camera'): void { const sceneData = new SceneData(name, sceneFlags, light); sceneData.camera = camera; @@ -580,6 +586,12 @@ export class WebRasterPassBuilder extends WebSetter implements RasterPassBuilder ); this._layoutID = layoutGraph.locateChild(layoutGraph.nullVertex(), layoutName); } + get name () { + return this._renderGraph.getName(this._vertID); + } + set name (name: string) { + this._renderGraph.setName(this._vertID, name); + } addRasterView (name: string, view: RasterView) { this._pass.rasterViews.set(name, view); } @@ -643,6 +655,12 @@ export class WebComputeQueueBuilder extends WebSetter implements ComputeQueueBui this._queue = queue; this._pipeline = pipeline; } + get name () { + return this._renderGraph.getName(this._vertID); + } + set name (name: string) { + this._renderGraph.setName(this._vertID, name); + } addDispatch (shader: string, threadGroupCountX: number, threadGroupCountY: number, @@ -674,6 +692,12 @@ export class WebComputePassBuilder extends WebSetter implements ComputePassBuild ); this._layoutID = layoutGraph.locateChild(layoutGraph.nullVertex(), layoutName); } + get name () { + return this._renderGraph.getName(this._vertID); + } + set name (name: string) { + this._renderGraph.setName(this._vertID, name); + } addComputeView (name: string, view: ComputeView) { if (this._pass.computeViews.has(name)) { this._pass.computeViews.get(name)?.push(view); @@ -714,6 +738,12 @@ export class WebMovePassBuilder implements MovePassBuilder { this._vertID = vertID; this._pass = pass; } + get name () { + return this._renderGraph.getName(this._vertID); + } + set name (name: string) { + this._renderGraph.setName(this._vertID, name); + } addPair (pair: MovePair) { this._pass.movePairs.push(pair); } @@ -728,6 +758,12 @@ export class WebCopyPassBuilder implements CopyPassBuilder { this._vertID = vertID; this._pass = pass; } + get name () { + return this._renderGraph.getName(this._vertID); + } + set name (name: string) { + this._renderGraph.setName(this._vertID, name); + } addPair (pair: CopyPair) { this._pass.copyPairs.push(pair); } diff --git a/native/cocos/renderer/pipeline/custom/NativePipelineTypes.h b/native/cocos/renderer/pipeline/custom/NativePipelineTypes.h index f31d1804658..e7a8b4686b0 100644 --- a/native/cocos/renderer/pipeline/custom/NativePipelineTypes.h +++ b/native/cocos/renderer/pipeline/custom/NativePipelineTypes.h @@ -98,6 +98,9 @@ class NativeRasterQueueBuilder final : public RasterQueueBuilder { void setReadWriteTexture(const ccstd::string& name, gfx::Texture* texture) override; void setSampler(const ccstd::string& name, gfx::Sampler* sampler) override; + ccstd::string getName() const override; + void setName(const ccstd::string& name) override; + RenderGraph* renderGraph{nullptr}; const LayoutGraphData* layoutGraph{nullptr}; uint32_t queueID{RenderGraph::null_vertex()}; @@ -135,6 +138,9 @@ class NativeRasterPassBuilder final : public RasterPassBuilder { void setReadWriteTexture(const ccstd::string& name, gfx::Texture* texture) override; void setSampler(const ccstd::string& name, gfx::Sampler* sampler) override; + ccstd::string getName() const override; + void setName(const ccstd::string& name) override; + RenderGraph* renderGraph{nullptr}; const LayoutGraphData* layoutGraph{nullptr}; uint32_t passID{RenderGraph::null_vertex()}; @@ -165,6 +171,9 @@ class NativeComputeQueueBuilder final : public ComputeQueueBuilder { void setReadWriteTexture(const ccstd::string& name, gfx::Texture* texture) override; void setSampler(const ccstd::string& name, gfx::Sampler* sampler) override; + ccstd::string getName() const override; + void setName(const ccstd::string& name) override; + RenderGraph* renderGraph{nullptr}; const LayoutGraphData* layoutGraph{nullptr}; uint32_t queueID{RenderGraph::null_vertex()}; @@ -200,6 +209,9 @@ class NativeComputePassBuilder final : public ComputePassBuilder { void setReadWriteTexture(const ccstd::string& name, gfx::Texture* texture) override; void setSampler(const ccstd::string& name, gfx::Sampler* sampler) override; + ccstd::string getName() const override; + void setName(const ccstd::string& name) override; + RenderGraph* renderGraph{nullptr}; const LayoutGraphData* layoutGraph{nullptr}; uint32_t passID{RenderGraph::null_vertex()}; @@ -215,6 +227,9 @@ class NativeMovePassBuilder final : public MovePassBuilder { void addPair(const MovePair& pair) override; + ccstd::string getName() const override; + void setName(const ccstd::string& name) override; + RenderGraph* renderGraph{nullptr}; uint32_t passID{RenderGraph::null_vertex()}; }; @@ -228,6 +243,9 @@ class NativeCopyPassBuilder final : public CopyPassBuilder { void addPair(const CopyPair& pair) override; + ccstd::string getName() const override; + void setName(const ccstd::string& name) override; + RenderGraph* renderGraph{nullptr}; uint32_t passID{RenderGraph::null_vertex()}; }; diff --git a/native/cocos/renderer/pipeline/custom/NativeRenderGraph.cpp b/native/cocos/renderer/pipeline/custom/NativeRenderGraph.cpp index 351096c9b5a..362ab1bdbe0 100644 --- a/native/cocos/renderer/pipeline/custom/NativeRenderGraph.cpp +++ b/native/cocos/renderer/pipeline/custom/NativeRenderGraph.cpp @@ -11,6 +11,14 @@ namespace cc { namespace render { +ccstd::string NativeRasterPassBuilder::getName() const { + return std::string(get(RenderGraph::Name, *renderGraph, passID)); +} + +void NativeRasterPassBuilder::setName(const ccstd::string& name) { + get(RenderGraph::Name, *renderGraph, passID) = std::string_view(name); +} + void NativeRasterPassBuilder::addRasterView(const ccstd::string &name, const RasterView &view) { auto &pass = get(RasterTag{}, passID, *renderGraph); pass.rasterViews.emplace( @@ -33,6 +41,14 @@ void NativeRasterPassBuilder::addComputeView(const ccstd::string &name, const Co iter->second.emplace_back(view); } +ccstd::string NativeRasterQueueBuilder::getName() const { + return std::string(get(RenderGraph::Name, *renderGraph, queueID)); +} + +void NativeRasterQueueBuilder::setName(const ccstd::string &name) { + get(RenderGraph::Name, *renderGraph, queueID) = std::string_view(name); +} + void NativeRasterQueueBuilder::addSceneOfCamera(scene::Camera *camera, LightInfo light, SceneFlags sceneFlags, const ccstd::string &name) { SceneData scene(renderGraph->get_allocator()); scene.name = name; @@ -405,6 +421,14 @@ void NativeRasterPassBuilder::setSampler(const ccstd::string &name, gfx::Sampler } // NativeComputeQueue +ccstd::string NativeComputeQueueBuilder::getName() const { + return std::string(get(RenderGraph::Name, *renderGraph, queueID)); +} + +void NativeComputeQueueBuilder::setName(const ccstd::string &name) { + get(RenderGraph::Name, *renderGraph, queueID) = std::string_view(name); +} + void NativeComputeQueueBuilder::addDispatch(const ccstd::string &shader, uint32_t threadGroupCountX, uint32_t threadGroupCountY, uint32_t threadGroupCountZ, const ccstd::string &name) { addVertex( DispatchTag{}, @@ -479,6 +503,14 @@ void NativeComputeQueueBuilder::setSampler(const ccstd::string &name, gfx::Sampl addSampler(*layoutGraph, name, sampler, data); } +ccstd::string NativeComputePassBuilder::getName() const { + return std::string(get(RenderGraph::Name, *renderGraph, passID)); +} + +void NativeComputePassBuilder::setName(const ccstd::string &name) { + get(RenderGraph::Name, *renderGraph, passID) = std::string_view(name); +} + void NativeComputePassBuilder::addComputeView(const ccstd::string &name, const ComputeView &view) { auto &pass = get(ComputeTag{}, passID, *renderGraph); auto iter = pass.computeViews.find(name.c_str()); @@ -594,11 +626,27 @@ void NativeComputePassBuilder::setSampler(const ccstd::string &name, gfx::Sample addSampler(*layoutGraph, name, sampler, data); } +ccstd::string NativeMovePassBuilder::getName() const { + return std::string(get(RenderGraph::Name, *renderGraph, passID)); +} + +void NativeMovePassBuilder::setName(const ccstd::string &name) { + get(RenderGraph::Name, *renderGraph, passID) = std::string_view(name); +} + void NativeMovePassBuilder::addPair(const MovePair &pair) { auto &movePass = get(MoveTag{}, passID, *renderGraph); movePass.movePairs.emplace_back(pair); } +ccstd::string NativeCopyPassBuilder::getName() const { + return std::string(get(RenderGraph::Name, *renderGraph, passID)); +} + +void NativeCopyPassBuilder::setName(const ccstd::string &name) { + get(RenderGraph::Name, *renderGraph, passID) = std::string_view(name); +} + void NativeCopyPassBuilder::addPair(const CopyPair &pair) { auto ©Pass = get(CopyTag{}, passID, *renderGraph); copyPass.copyPairs.emplace_back(pair); diff --git a/native/cocos/renderer/pipeline/custom/RenderInterfaceFwd.h b/native/cocos/renderer/pipeline/custom/RenderInterfaceFwd.h index 2d7c4bdb298..593c005afc1 100644 --- a/native/cocos/renderer/pipeline/custom/RenderInterfaceFwd.h +++ b/native/cocos/renderer/pipeline/custom/RenderInterfaceFwd.h @@ -40,6 +40,7 @@ namespace cc { namespace render { class PipelineRuntime; +class RenderNode; class Setter; class RasterQueueBuilder; class RasterPassBuilder; diff --git a/native/cocos/renderer/pipeline/custom/RenderInterfaceTypes.h b/native/cocos/renderer/pipeline/custom/RenderInterfaceTypes.h index 96cb6c80338..3a536004adf 100644 --- a/native/cocos/renderer/pipeline/custom/RenderInterfaceTypes.h +++ b/native/cocos/renderer/pipeline/custom/RenderInterfaceTypes.h @@ -114,14 +114,22 @@ class PipelineRuntime { virtual bool isRenderQueueReset() const = 0; }; -class Setter { +class RenderNode { +public: + RenderNode() noexcept = default; + RenderNode(RenderNode&& rhs) = delete; + RenderNode(RenderNode const& rhs) = delete; + RenderNode& operator=(RenderNode&& rhs) = delete; + RenderNode& operator=(RenderNode const& rhs) = delete; + virtual ~RenderNode() noexcept = default; + + virtual ccstd::string getName() const = 0; + virtual void setName(const ccstd::string& name) = 0; +}; + +class Setter : public RenderNode { public: Setter() noexcept = default; - Setter(Setter&& rhs) = delete; - Setter(Setter const& rhs) = delete; - Setter& operator=(Setter&& rhs) = delete; - Setter& operator=(Setter const& rhs) = delete; - virtual ~Setter() noexcept = default; virtual void setMat4(const ccstd::string& name, const cc::Mat4& mat) = 0; virtual void setQuaternion(const ccstd::string& name, const cc::Quaternion& quat) = 0; @@ -188,26 +196,16 @@ class ComputePassBuilder : public Setter { virtual void addDispatch(const ccstd::string& shader, uint32_t threadGroupCountX, uint32_t threadGroupCountY, uint32_t threadGroupCountZ) = 0; }; -class MovePassBuilder { +class MovePassBuilder : public RenderNode { public: MovePassBuilder() noexcept = default; - MovePassBuilder(MovePassBuilder&& rhs) = delete; - MovePassBuilder(MovePassBuilder const& rhs) = delete; - MovePassBuilder& operator=(MovePassBuilder&& rhs) = delete; - MovePassBuilder& operator=(MovePassBuilder const& rhs) = delete; - virtual ~MovePassBuilder() noexcept = default; virtual void addPair(const MovePair& pair) = 0; }; -class CopyPassBuilder { +class CopyPassBuilder : public RenderNode { public: CopyPassBuilder() noexcept = default; - CopyPassBuilder(CopyPassBuilder&& rhs) = delete; - CopyPassBuilder(CopyPassBuilder const& rhs) = delete; - CopyPassBuilder& operator=(CopyPassBuilder&& rhs) = delete; - CopyPassBuilder& operator=(CopyPassBuilder const& rhs) = delete; - virtual ~CopyPassBuilder() noexcept = default; virtual void addPair(const CopyPair& pair) = 0; }; diff --git a/native/tools/swig-config/renderer.i b/native/tools/swig-config/renderer.i index 8c82024548a..e4d0b316eff 100644 --- a/native/tools/swig-config/renderer.i +++ b/native/tools/swig-config/renderer.i @@ -97,6 +97,7 @@ using namespace cc::render; %attribute(cc::render::PipelineRuntime, cc::scene::Model*, profiler, getProfiler, setProfiler); %attribute(cc::render::PipelineRuntime, cc::pipeline::GeometryRenderer*, geometryRenderer, getGeometryRenderer); %attribute(cc::render::PipelineRuntime, float, shadingScale, getShadingScale, setShadingScale); +%attribute(cc::render::RenderNode, ccstd::string, name, getName, setName); %attribute(cc::render::SceneVisitor, cc::pipeline::PipelineSceneData*, pipelineSceneData, getPipelineSceneData); %attribute(cc::render::SceneTask, cc::render::TaskType, taskType, getTaskType); %attribute(cc::render::Pipeline, cc::render::LayoutGraphBuilder*, layoutGraphBuilder, getLayoutGraphBuilder); From c7050b4c628a11ff4dc99b9163119506f9edfb62 Mon Sep 17 00:00:00 2001 From: Cocos Robot <48829427+cocos-robot@users.noreply.github.com> Date: Wed, 26 Oct 2022 11:22:34 +0800 Subject: [PATCH 081/829] [ci skip][AUTO]: Automated code generating update: 7bd8bf6566861b8c0a866813ca5dfef20da104fc (#13146) (#13149) Co-authored-by: cocos-robot --- .../cocos/bindings/auto/jsb_render_auto.cpp | 124 ++++++++++++++---- native/cocos/bindings/auto/jsb_render_auto.h | 5 + 2 files changed, 107 insertions(+), 22 deletions(-) diff --git a/native/cocos/bindings/auto/jsb_render_auto.cpp b/native/cocos/bindings/auto/jsb_render_auto.cpp index 28675abdc9a..3b726b53fdf 100644 --- a/native/cocos/bindings/auto/jsb_render_auto.cpp +++ b/native/cocos/bindings/auto/jsb_render_auto.cpp @@ -105,6 +105,10 @@ using namespace cc::render; #define cc_render_PipelineRuntime_shadingScale_set(self_, val_) self_->setShadingScale(val_) +#define cc_render_RenderNode_name_get(self_) self_->getName() +#define cc_render_RenderNode_name_set(self_, val_) self_->setName(val_) + + #define cc_render_SceneVisitor_pipelineSceneData_get(self_) self_->getPipelineSceneData() @@ -709,16 +713,84 @@ bool js_register_cc_render_PipelineRuntime(se::Object* obj) { } -se::Class* __jsb_cc_render_Setter_class = nullptr; -se::Object* __jsb_cc_render_Setter_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_render_Setter) +se::Class* __jsb_cc_render_RenderNode_class = nullptr; +se::Object* __jsb_cc_render_RenderNode_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_render_RenderNode) -static bool js_delete_cc_render_Setter(se::State& s) +static bool js_delete_cc_render_RenderNode(se::State& s) { // js_dtoroverride return true; } -SE_BIND_FINALIZE_FUNC(js_delete_cc_render_Setter) +SE_BIND_FINALIZE_FUNC(js_delete_cc_render_RenderNode) + +static bool js_cc_render_RenderNode_name_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::render::RenderNode *arg1 = (cc::render::RenderNode *) NULL ; + ccstd::string arg2 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "RenderNode_name_set,2,SWIGTYPE_ccstd__string"); + + cc_render_RenderNode_name_set(arg1,arg2); + + + return true; +} +SE_BIND_PROP_SET(js_cc_render_RenderNode_name_set) + +static bool js_cc_render_RenderNode_name_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::render::RenderNode *arg1 = (cc::render::RenderNode *) NULL ; + ccstd::string result; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = cc_render_RenderNode_name_get(arg1); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "RenderNode_name_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_PROP_GET(js_cc_render_RenderNode_name_get) + +bool js_register_cc_render_RenderNode(se::Object* obj) { + auto* cls = se::Class::create("RenderNode", obj, nullptr, nullptr); + + cls->defineProperty("name", _SE(js_cc_render_RenderNode_name_get), _SE(js_cc_render_RenderNode_name_set)); + + + + + + cls->defineFinalizeFunction(_SE(js_delete_cc_render_RenderNode)); + + + cls->install(); + JSBClassType::registerClass(cls); + + __jsb_cc_render_RenderNode_proto = cls->getProto(); + __jsb_cc_render_RenderNode_class = cls; + se::ScriptEngine::getInstance()->clearException(); + return true; +} + + +se::Class* __jsb_cc_render_Setter_class = nullptr; +se::Object* __jsb_cc_render_Setter_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_render_Setter) static bool js_cc_render_Setter_setMat4(se::State& s) { @@ -1098,8 +1170,15 @@ static bool js_cc_render_Setter_setSampler(se::State& s) } SE_BIND_FUNC(js_cc_render_Setter_setSampler) +static bool js_delete_cc_render_Setter(se::State& s) +{ + // js_dtoroverride + return true; +} +SE_BIND_FINALIZE_FUNC(js_delete_cc_render_Setter) + bool js_register_cc_render_Setter(se::Object* obj) { - auto* cls = se::Class::create("Setter", obj, nullptr, nullptr); + auto* cls = se::Class::create("Setter", obj, __jsb_cc_render_RenderNode_proto, nullptr); cls->defineFunction("setMat4", _SE(js_cc_render_Setter_setMat4)); @@ -2399,13 +2478,6 @@ se::Class* __jsb_cc_render_MovePassBuilder_class = nullptr; se::Object* __jsb_cc_render_MovePassBuilder_proto = nullptr; SE_DECLARE_FINALIZE_FUNC(js_delete_cc_render_MovePassBuilder) -static bool js_delete_cc_render_MovePassBuilder(se::State& s) -{ - // js_dtoroverride - return true; -} -SE_BIND_FINALIZE_FUNC(js_delete_cc_render_MovePassBuilder) - static bool js_cc_render_MovePassBuilder_addPair(se::State& s) { // js_function @@ -2435,8 +2507,15 @@ static bool js_cc_render_MovePassBuilder_addPair(se::State& s) } SE_BIND_FUNC(js_cc_render_MovePassBuilder_addPair) +static bool js_delete_cc_render_MovePassBuilder(se::State& s) +{ + // js_dtoroverride + return true; +} +SE_BIND_FINALIZE_FUNC(js_delete_cc_render_MovePassBuilder) + bool js_register_cc_render_MovePassBuilder(se::Object* obj) { - auto* cls = se::Class::create("MovePassBuilder", obj, nullptr, nullptr); + auto* cls = se::Class::create("MovePassBuilder", obj, __jsb_cc_render_RenderNode_proto, nullptr); cls->defineFunction("addPair", _SE(js_cc_render_MovePassBuilder_addPair)); @@ -2461,13 +2540,6 @@ se::Class* __jsb_cc_render_CopyPassBuilder_class = nullptr; se::Object* __jsb_cc_render_CopyPassBuilder_proto = nullptr; SE_DECLARE_FINALIZE_FUNC(js_delete_cc_render_CopyPassBuilder) -static bool js_delete_cc_render_CopyPassBuilder(se::State& s) -{ - // js_dtoroverride - return true; -} -SE_BIND_FINALIZE_FUNC(js_delete_cc_render_CopyPassBuilder) - static bool js_cc_render_CopyPassBuilder_addPair(se::State& s) { // js_function @@ -2497,8 +2569,15 @@ static bool js_cc_render_CopyPassBuilder_addPair(se::State& s) } SE_BIND_FUNC(js_cc_render_CopyPassBuilder_addPair) +static bool js_delete_cc_render_CopyPassBuilder(se::State& s) +{ + // js_dtoroverride + return true; +} +SE_BIND_FINALIZE_FUNC(js_delete_cc_render_CopyPassBuilder) + bool js_register_cc_render_CopyPassBuilder(se::Object* obj) { - auto* cls = se::Class::create("CopyPassBuilder", obj, nullptr, nullptr); + auto* cls = se::Class::create("CopyPassBuilder", obj, __jsb_cc_render_RenderNode_proto, nullptr); cls->defineFunction("addPair", _SE(js_cc_render_CopyPassBuilder_addPair)); @@ -4177,6 +4256,7 @@ bool register_all_render(se::Object* obj) { se::Object* ns = nsVal.toObject(); /* Register classes */ js_register_cc_render_PipelineRuntime(ns); + js_register_cc_render_RenderNode(ns); js_register_cc_render_Setter(ns); js_register_cc_render_RasterQueueBuilder(ns); js_register_cc_render_RasterPassBuilder(ns); diff --git a/native/cocos/bindings/auto/jsb_render_auto.h b/native/cocos/bindings/auto/jsb_render_auto.h index a03cd7715a2..29b4c0c53a6 100644 --- a/native/cocos/bindings/auto/jsb_render_auto.h +++ b/native/cocos/bindings/auto/jsb_render_auto.h @@ -51,6 +51,11 @@ extern se::Object *__jsb_cc_render_PipelineRuntime_proto; // NOLINT extern se::Class * __jsb_cc_render_PipelineRuntime_class; // NOLINT +JSB_REGISTER_OBJECT_TYPE(cc::render::RenderNode); +extern se::Object *__jsb_cc_render_RenderNode_proto; // NOLINT +extern se::Class * __jsb_cc_render_RenderNode_class; // NOLINT + + JSB_REGISTER_OBJECT_TYPE(cc::render::Setter); extern se::Object *__jsb_cc_render_Setter_proto; // NOLINT extern se::Class * __jsb_cc_render_Setter_class; // NOLINT From 509b89f799e22f273b87d1a978490aef7734c228 Mon Sep 17 00:00:00 2001 From: mmyduckx <308303735@qq.com> Date: Wed, 26 Oct 2022 12:00:59 +0800 Subject: [PATCH 082/829] remove depreacted binding-generator (#13130) * remove depreacted binding-generator * add xr.i & remove useless code * refine assets.i * add xr.i * remove xr in genbindings.py * remove useless comment. --- native/tools/swig-config/2d.i | 14 +- native/tools/swig-config/README.md | 2 +- native/tools/swig-config/assets.i | 7 +- native/tools/swig-config/editor_support.i | 3 + native/tools/swig-config/geometry.i | 10 -- native/tools/swig-config/gfx.i | 9 ++ native/tools/swig-config/swig-config.js | 1 + native/tools/swig-config/xr.i | 95 ++++++++++++++ native/tools/tojs/2d.ini | 76 ----------- native/tools/tojs/README.mdown | 4 +- native/tools/tojs/anysdk-appstore.ini | 72 ----------- native/tools/tojs/anysdk-common.ini | 75 ----------- native/tools/tojs/assets.ini | 129 ------------------- native/tools/tojs/audio.ini | 65 ---------- native/tools/tojs/cocos.ini | 90 ------------- native/tools/tojs/dragonbones.ini | 86 ------------- native/tools/tojs/editor_support.ini | 47 ------- native/tools/tojs/extension.ini | 68 ---------- native/tools/tojs/genbindings.py | 21 +-- native/tools/tojs/geometry.ini | 71 ---------- native/tools/tojs/gfx.ini | 120 ----------------- native/tools/tojs/gi.ini | 77 ----------- native/tools/tojs/network.ini | 62 --------- native/tools/tojs/physics.ini | 66 ---------- native/tools/tojs/pipeline.ini | 85 ------------ native/tools/tojs/render.ini | 84 ------------ native/tools/tojs/scene.ini | 150 ---------------------- native/tools/tojs/spine.ini | 91 ------------- native/tools/tojs/video.ini | 60 --------- native/tools/tojs/webview.ini | 59 --------- native/tools/tojs/xr.ini | 66 ---------- 31 files changed, 128 insertions(+), 1737 deletions(-) create mode 100644 native/tools/swig-config/xr.i delete mode 100644 native/tools/tojs/2d.ini delete mode 100644 native/tools/tojs/anysdk-appstore.ini delete mode 100644 native/tools/tojs/anysdk-common.ini delete mode 100644 native/tools/tojs/assets.ini delete mode 100644 native/tools/tojs/audio.ini delete mode 100644 native/tools/tojs/cocos.ini delete mode 100644 native/tools/tojs/dragonbones.ini delete mode 100644 native/tools/tojs/editor_support.ini delete mode 100644 native/tools/tojs/extension.ini delete mode 100644 native/tools/tojs/geometry.ini delete mode 100644 native/tools/tojs/gfx.ini delete mode 100644 native/tools/tojs/gi.ini delete mode 100644 native/tools/tojs/network.ini delete mode 100644 native/tools/tojs/physics.ini delete mode 100644 native/tools/tojs/pipeline.ini delete mode 100644 native/tools/tojs/render.ini delete mode 100644 native/tools/tojs/scene.ini delete mode 100644 native/tools/tojs/spine.ini delete mode 100644 native/tools/tojs/video.ini delete mode 100644 native/tools/tojs/webview.ini delete mode 100644 native/tools/tojs/xr.ini diff --git a/native/tools/swig-config/2d.i b/native/tools/swig-config/2d.i index 5dd8f5b2e01..001d181ecf7 100644 --- a/native/tools/swig-config/2d.i +++ b/native/tools/swig-config/2d.i @@ -59,9 +59,8 @@ %ignore cc::RenderDrawInfo::setBatcher; %ignore cc::RenderDrawInfo::parseAttrLayout; %ignore cc::RenderDrawInfo::getRender2dLayout; -%ignore cc::RenderDrawInfo::getStride; -%ignore cc::RenderDrawInfo::getSize; %ignore cc::RenderDrawInfo::getEnumDrawInfoType; +%ignore cc::RenderDrawInfo::resetDrawInfo; %ignore cc::Batcher2d::addVertDirtyRenderer; %ignore cc::Batcher2d::getMeshBuffer; @@ -134,6 +133,15 @@ %attribute(cc::UIMeshBuffer, float*, vData, getVData, setVData); %attribute(cc::UIMeshBuffer, uint16_t*, iData, getIData, setIData); +%attribute(cc::RenderDrawInfo, uint16_t, bufferId, getBufferId, setBufferId); +%attribute(cc::RenderDrawInfo, uint16_t, accId, getAccId, setAccId); +%attribute(cc::RenderDrawInfo, uint32_t, vertexOffset, getVertexOffset, setVertexOffset); +%attribute(cc::RenderDrawInfo, uint32_t, indexOffset, getIndexOffset, setIndexOffset); +%attribute(cc::RenderDrawInfo, uint32_t, vbCount, getVbCount, setVbCount); +%attribute(cc::RenderDrawInfo, uint32_t, ibCount, getIbCount, setIbCount); +%attribute(cc::RenderDrawInfo, bool, vertDirty, getVertDirty, setVertDirty); +%attribute(cc::RenderDrawInfo, ccstd::hash_t, dataHash, getDataHash, setDataHash); +%attribute(cc::RenderDrawInfo, bool, isMeshBuffer, getIsMeshBuffer, setIsMeshBuffer); %attribute(cc::RenderDrawInfo, float*, vbBuffer, getVbBuffer, setVbBuffer); %attribute(cc::RenderDrawInfo, uint16_t*, ibBuffer, getIbBuffer, setIbBuffer); %attribute(cc::RenderDrawInfo, float*, vDataBuffer, getVDataBuffer, setVDataBuffer); @@ -142,7 +150,9 @@ %attribute(cc::RenderDrawInfo, cc::gfx::Texture*, texture, getTexture, setTexture); %attribute(cc::RenderDrawInfo, cc::gfx::Sampler*, sampler, getSampler, setSampler); %attribute(cc::RenderDrawInfo, cc::scene::Model*, model, getModel, setModel); +%attribute(cc::RenderDrawInfo, uint32_t, drawInfoType, getDrawInfoType, setDrawInfoType); %attribute(cc::RenderDrawInfo, cc::Node*, subNode, getSubNode, setSubNode); +%attribute(cc::RenderDrawInfo, uint8_t, stride, getStride, setStride); %attribute(cc::RenderEntity, cc::Node*, node, getNode, setNode); %attribute(cc::RenderEntity, uint32_t, staticDrawInfoSize, getStaticDrawInfoSize, setStaticDrawInfoSize); diff --git a/native/tools/swig-config/README.md b/native/tools/swig-config/README.md index e4632a17471..33189e85728 100644 --- a/native/tools/swig-config/README.md +++ b/native/tools/swig-config/README.md @@ -1,6 +1,6 @@ ## Introduction -From Cocos Creator 3.7.0,we switch the approch of generating JS binding code from [bindings-generator](https://github.com/cocos/cocos-engine/tree/d08a11244d2a31da1aac7af7d2aa8f1b6152e30c/native/tools/bindings-generator) to [Swig](https://www.swig.org). Swig has many benefits in generating glue code by parsing its custom `interface` file (IDL) which is compatible with `C++`. For more about why we switch to Swig, you could refer to [the issue](https://github.com/cocos/cocos-engine/issues/10792) . +From Cocos Creator 3.7.0,we switch the approach of generating JS binding code from [bindings-generator](https://github.com/cocos/cocos-engine/tree/d08a11244d2a31da1aac7af7d2aa8f1b6152e30c/native/tools/bindings-generator) to [Swig](https://www.swig.org). Swig has many benefits in generating glue code by parsing its custom `interface` file (IDL) which is compatible with `C++`. For more about why we switch to Swig, you could refer to [the issue](https://github.com/cocos/cocos-engine/issues/10792) . ## Generate JS Binding Code for Engine diff --git a/native/tools/swig-config/assets.i b/native/tools/swig-config/assets.i index 167e0c025f6..b9eaede4df7 100644 --- a/native/tools/swig-config/assets.i +++ b/native/tools/swig-config/assets.i @@ -50,7 +50,8 @@ // 2. namespace is needed // %ignore cc::Asset::createNode; //FIXME: swig needs to support std::function -// %ignore cc::IMemoryImageSource::data; +%ignore cc::IMemoryImageSource::data; +%ignore cc::IMemoryImageSource::compressed; %ignore cc::SimpleTexture::uploadDataWithArrayBuffer; %ignore cc::TextureCube::_mipmaps; // %ignore cc::Mesh::copyAttribute; @@ -77,13 +78,11 @@ %rename(_getProperty) cc::Material::getProperty; %rename(_propsInternal) cc::Material::_props; +%rename(getHash) cc::Material::getHashForMaterial; %rename(_getBindposes) cc::Skeleton::getBindposes; %rename(_setBindposes) cc::Skeleton::setBindposes; -%rename(_data) cc::IMemoryImageSource::data; -%rename(_compressed) cc::IMemoryImageSource::compressed; - %rename(buffer) cc::BufferAsset::getBuffer; diff --git a/native/tools/swig-config/editor_support.i b/native/tools/swig-config/editor_support.i index cdb9b5cc7cc..3af52c9ec81 100644 --- a/native/tools/swig-config/editor_support.i +++ b/native/tools/swig-config/editor_support.i @@ -37,9 +37,12 @@ %ignore cc::middleware::MiddlewareManager::addTimer; %ignore cc::middleware::MiddlewareManager::removeTimer; %ignore cc::middleware::MiddlewareManager::getMeshBuffer; + %ignore cc::middleware::SharedBufferManager::getBuffer; %ignore cc::middleware::SharedBufferManager::reset; + %ignore cc::middleware::Texture2D::setTexParameters; + %ignore cc::middleware::MeshBuffer::getUIMeshBuffer; %ignore cc::middleware::MeshBuffer::uiMeshBuffers; diff --git a/native/tools/swig-config/geometry.i b/native/tools/swig-config/geometry.i index 68f97613783..c312a8f39bd 100644 --- a/native/tools/swig-config/geometry.i +++ b/native/tools/swig-config/geometry.i @@ -47,16 +47,6 @@ %ignore cc::geometry::AABB::setHalfExtents; %ignore cc::geometry::Frustum::update; -%ignore cc::geometry::Frustum::type; -%ignore cc::geometry::Frustum::split; - -%ignore cc::geometry::Plane::clone; -%ignore cc::geometry::Plane::copy; -%ignore cc::geometry::Plane::normalize; -%ignore cc::geometry::Plane::getSpotAngle; -%ignore cc::geometry::Plane::fromNormalAndPoint; -%ignore cc::geometry::Plane::fromPoints; -%ignore cc::geometry::Plane::set; %ignore cc::geometry::Ray::computeHit; diff --git a/native/tools/swig-config/gfx.i b/native/tools/swig-config/gfx.i index 5fd1fee9223..c3e859a2bea 100644 --- a/native/tools/swig-config/gfx.i +++ b/native/tools/swig-config/gfx.i @@ -78,6 +78,14 @@ namespace cc { namespace gfx { %ignore Device::copyBuffersToTexture; %ignore Device::copyTextureToBuffers; +%ignore Device::createBuffer; +%ignore Device::createTexture; +%ignore Device::getInstance; +%ignore Device::setOptions; +%ignore Device::getOptions; + +%ignore DeviceManager::isDetachDeviceThread; +%ignore DeviceManager::getGFXName; %ignore FormatInfo; @@ -175,6 +183,7 @@ namespace cc { namespace gfx { %attribute(cc::gfx::InputAssembler, uint32_t, firstIndex, getFirstIndex, setFirstIndex); %attribute(cc::gfx::InputAssembler, uint32_t, vertexOffset, getVertexOffset, setVertexOffset); %attribute(cc::gfx::InputAssembler, uint32_t, instanceCount, getInstanceCount, setInstanceCount); +%attribute(cc::gfx::InputAssembler, uint32_t, firstInstance, getFirstInstance, setFirstInstance); // CommandBuffer %attribute(cc::gfx::CommandBuffer, cc::gfx::CommandBufferType, type, getType); diff --git a/native/tools/swig-config/swig-config.js b/native/tools/swig-config/swig-config.js index d608e91ff09..3b8cba82e03 100644 --- a/native/tools/swig-config/swig-config.js +++ b/native/tools/swig-config/swig-config.js @@ -22,6 +22,7 @@ const configList = [ [ 'video.i', 'jsb_video_auto.cpp' ], [ 'renderer.i', 'jsb_render_auto.cpp' ], [ 'gi.i', 'jsb_gi_auto.cpp' ], + [ 'xr.i', 'jsb_xr_auto.cpp' ], ]; const cocosNativeRoot = path.resolve(path.join(__dirname, '..', '..')); diff --git a/native/tools/swig-config/xr.i b/native/tools/swig-config/xr.i new file mode 100644 index 00000000000..2ef2077b5a4 --- /dev/null +++ b/native/tools/swig-config/xr.i @@ -0,0 +1,95 @@ +// Define module +// target_namespace means the name exported to JS, could be same as which in other modules +// 'your_module' at the last means the suffix of binding function name, different modules should use unique name +// Note: doesn't support number prefix +%module(target_namespace="jsb") xr + +// Insert code at the beginning of generated header file (.h) +%insert(header_file) %{ +#pragma once +#include +#include "cocos/bindings/jswrapper/SeApi.h" +#include "cocos/bindings/manual/jsb_conversions.h" +#include "cocos/xr/Xr.h" + +%} + +// Insert code at the beginning of generated source file (.cpp) +%{ +#include "cocos/bindings/manual/jsb_conversions.h" +#include "cocos/bindings/manual/jsb_global.h" +#include "xr/Xr.h" + +%} + +// ----- Ignore Section ------ +// Brief: Classes, methods or attributes need to be ignored +// +// Usage: +// +// %ignore your_namespace::your_class_name; +// %ignore your_namespace::your_class_name::your_method_name; +// %ignore your_namespace::your_class_name::your_attribute_name; +// +// Note: +// 1. 'Ignore Section' should be placed before attribute definition and %import/%include +// 2. namespace is needed +// +%ignore cc::xr::XrEntry::setGamepadCallback; +%ignore cc::xr::XrEntry::setHandleCallback; +%ignore cc::xr::XrEntry::setHMDCallback; +%ignore cc::xr::XrEntry::setXRConfig; +%ignore cc::xr::XrEntry::getXRConfig; + +// ----- Rename Section ------ +// Brief: Classes, methods or attributes needs to be renamed +// +// Usage: +// +// %rename(rename_to_name) your_namespace::original_class_name; +// %rename(rename_to_name) your_namespace::original_class_name::method_name; +// %rename(rename_to_name) your_namespace::original_class_name::attribute_name; +// +// Note: +// 1. 'Rename Section' should be placed before attribute definition and %import/%include +// 2. namespace is needed + + +// ----- Module Macro Section ------ +// Brief: Generated code should be wrapped inside a macro +// Usage: +// 1. Configure for class +// %module_macro(CC_USE_GEOMETRY_RENDERER) cc::pipeline::GeometryRenderer; +// 2. Configure for member function or attribute +// %module_macro(CC_USE_GEOMETRY_RENDERER) cc::pipeline::RenderPipeline::geometryRenderer; +// Note: Should be placed before 'Attribute Section' + +// Write your code bellow + + +// ----- Attribute Section ------ +// Brief: Define attributes ( JS properties with getter and setter ) +// Usage: +// 1. Define an attribute without setter +// %attribute(your_namespace::your_class_name, cpp_member_variable_type, js_property_name, cpp_getter_name) +// 2. Define an attribute with getter and setter +// %attribute(your_namespace::your_class_name, cpp_member_variable_type, js_property_name, cpp_getter_name, cpp_setter_name) +// 3. Define an attribute without getter +// %attribute_writeonly(your_namespace::your_class_name, cpp_member_variable_type, js_property_name, cpp_setter_name) +// +// Note: +// 1. Don't need to add 'const' prefix for cpp_member_variable_type +// 2. The return type of getter should keep the same as the type of setter's parameter +// 3. If using reference, add '&' suffix for cpp_member_variable_type to avoid generated code using value assignment +// 4. 'Attribute Section' should be placed before 'Import Section' and 'Include Section' +// + +// ----- Import Section ------ +// Brief: Import header files which are depended by 'Include Section' +// Note: +// %import "your_header_file.h" will not generate code for that header file +%import "cocos/platform/interfaces/modules/XRCommon.h" + +// ----- Include Section ------ +// Brief: Include header files in which classes and methods will be bound +%include "cocos/xr/Xr.h" \ No newline at end of file diff --git a/native/tools/tojs/2d.ini b/native/tools/tojs/2d.ini deleted file mode 100644 index 951f59d1c44..00000000000 --- a/native/tools/tojs/2d.ini +++ /dev/null @@ -1,76 +0,0 @@ -[2d] -# the prefix to be added to the generated functions. You might or might not use this in your own -# templates -prefix = 2d - -#cpp_headers = - -# create a target namespace (in javascript, this would create some code like the equiv. to `ns = ns || {}`) -# all classes will be embedded in that namespace -target_namespace = n2d - -android_headers = - -android_flags = -target armv7-none-linux-androideabi -D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS -DANDROID -D__ANDROID_API__=14 -gcc-toolchain %(gcc_toolchain_dir)s --sysroot=%(androidndkdir)s/platforms/android-14/arch-arm -idirafter %(androidndkdir)s/sources/android/support/include -idirafter %(androidndkdir)s/sysroot/usr/include -idirafter %(androidndkdir)s/sysroot/usr/include/arm-linux-androideabi -idirafter %(clangllvmdir)s/lib64/clang/5.0/include -I%(androidndkdir)s/sources/cxx-stl/llvm-libc++/include - -clang_headers = -clang_flags = -nostdinc -x c++ -std=c++17 -fsigned-char -U__SSE__ - -cocos_headers = -I%(cocosdir)s/cocos -I%(cocosdir)s/cocos/renderer -I%(cocosdir)s -I%(cocosdir)s/cocos/platform/android -I%(cocosdir)s/external/sources -I%(cocosdir)s/external/android/armeabi-v7a/include/v8 -I%(cocosdir)s/external/android/armeabi-v7a/include/uv -cocos_flags = -DANDROID -DCC_PLATFORM=3 -DCC_PLATFORM_MAC_IOS=1 -DCC_PLATFORM_MAC_OSX=4 -DCC_PLATFORM_WINDOWS=2 -DCC_PLATFORM_ANDROID=3 - - -cxxgenerator_headers = - -# extra arguments for clang -extra_arguments = %(android_headers)s %(clang_headers)s %(cxxgenerator_headers)s %(cocos_headers)s %(android_flags)s %(clang_flags)s %(cocos_flags)s %(extra_flags)s - -# what headers to parse -headers = %(cocosdir)s/cocos/2d/renderer/RenderDrawInfo.h - %(cocosdir)s/cocos/2d/renderer/UIMeshBuffer.h - %(cocosdir)s/cocos/2d/renderer/Batcher2d.h - %(cocosdir)s/cocos/2d/renderer/RenderEntity.h - %(cocosdir)s/cocos/2d/renderer/UIModelProxy.h - -hpp_headers = cocos/bindings/auto/jsb_scene_auto.h - -cpp_headers = cocos/bindings/auto/jsb_scene_auto.h - -# what classes to produce code for. You can use regular expressions here. When testing the regular -# expression, it will be enclosed in "^$", like this: "^Menu*$". -classes = RenderDrawInfo UIMeshBuffer Batcher2d RenderEntity UIModelProxy - -# what should we skip? in the format ClassName::[function function] -# ClassName is a regular expression, but will be used like this: "^ClassName$" functions are also -# regular expressions, they will not be surrounded by "^$". If you want to skip a whole class, just -# add a single "*" as functions. See bellow for several examples. A special class name is "*", which -# will apply to all class names. This is a convenience wildcard to be able to skip similar named -# functions from all classes. -skip = RenderDrawInfo::[getBatcher setBatcher parseAttrLayout getRender2dLayout getEnumDrawInfoType resetDrawInfo], - Batcher2d::[addVertDirtyRenderer getMeshBuffer getDevice updateDescriptorSet fillBuffersAndMergeBatches walk generateBatch generateBatchForMiddleware resetRenderStates handleDrawInfo handleComponentDraw handleModelDraw handleMiddlewareDraw handleSubNode], - UIMeshBuffer::[requireFreeIA createNewIA recycleIA resetIA parseLayout getByteOffset setByteOffset getVertexOffset setVertexOffset getIndexOffset setIndexOffset getDirty setDirty getAttributes], - RenderEntity::[getDynamicRenderDrawInfo getDynamicRenderDrawInfos getRenderEntityType getColorDirty getColor isEnabled getEnumStencilStage setEnumStencilStage getVBColorDirty setVBColorDirty] - -rename_functions = - -getter_setter = RenderDrawInfo::[bufferId accId vertexOffset indexOffset vbBuffer ibBuffer vDataBuffer iDataBuffer vbCount ibCount vertDirty dataHash isMeshBuffer material texture sampler model drawInfoType subNode stride], - UIMeshBuffer::[vData iData], - RenderEntity::[node staticDrawInfoSize stencilStage renderTransform] - -field = - -skip_public_fields = - -rename_classes = - -# for all class names, should we remove something when registering in the target VM? -remove_prefix = - -# classes for which there will be no "parent" lookup -classes_have_no_parents = -# base classes which will be skipped when their sub-classes found them. -base_classes_to_skip = RefCounted UserData - -# classes that create no constructor -# Set is special and we will use a hand-written constructor -abstract_classes = diff --git a/native/tools/tojs/README.mdown b/native/tools/tojs/README.mdown index 860d2abfb4f..296f54ca0b2 100644 --- a/native/tools/tojs/README.mdown +++ b/native/tools/tojs/README.mdown @@ -1,6 +1,8 @@ -How to Use bindings-generator +How to Use ~~bindings-generator~~ ================== +> Notice: this bindings-generator approach has been deprecated in cocos engine internal usage since Cocos Creator 3.7.0, but you could still use it to generate JS binding code for your own projects. However, we recommend you to use [Swig](https://github.com/cocos/cocos-engine/blob/develop/native/tools/swig-config/README.md) which is more convenient. + On Windows: ------------ diff --git a/native/tools/tojs/anysdk-appstore.ini b/native/tools/tojs/anysdk-appstore.ini deleted file mode 100644 index fc35470f28e..00000000000 --- a/native/tools/tojs/anysdk-appstore.ini +++ /dev/null @@ -1,72 +0,0 @@ -[protocols] -# the prefix to be added to the generated functions. You might or might not use this in your own -# templates -prefix = anysdk_framework - -# create a target namespace (in javascript, this would create some code like the equiv. to `ns = ns || {}`) -# all classes will be embedded in that namespace -target_namespace = anysdk - -android_headers = -I%(androidndkdir)s/platforms/android-14/arch-arm/usr/include -I%(androidndkdir)s/sources/cxx-stl/gnu-libstdc++/4.8/libs/armeabi-v7a/include -I%(androidndkdir)s/sources/cxx-stl/gnu-libstdc++/4.8/include -I%(androidndkdir)s/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include -I%(androidndkdir)s/sources/cxx-stl/gnu-libstdc++/4.9/include -android_flags = -D_SIZE_T_DEFINED_ - -clang_headers = -I%(clangllvmdir)s/%(clang_include)s -clang_flags = -nostdinc -x c++ -std=c++17 -fsigned-char -mfloat-abi=soft -U__SSE__ - -cocos_headers = -I%(anysdk_appstore_dir)s -cocos_flags = -DANDROID -DCC_PLATFORM=3 -DCC_PLATFORM_IOS=1 -DCC_PLATFORM_MACOS=4 -DCC_PLATFORM_WINDOWS=2 -DCC_PLATFORM_ANDROID=3 - - -cxxgenerator_headers = - -# extra arguments for clang -extra_arguments = %(android_headers)s %(clang_headers)s %(cxxgenerator_headers)s %(cocos_headers)s %(android_flags)s %(clang_flags)s %(cocos_flags)s - -# what headers to 9 -headers = %(anysdk_appstore_dir)s/PluginManager.h %(anysdk_appstore_dir)s/ProtocolAnalytics.h %(anysdk_appstore_dir)s/ProtocolYAP.h %(anysdk_appstore_dir)s/ProtocolAds.h %(anysdk_appstore_dir)s/ProtocolShare.h %(anysdk_appstore_dir)s/ProtocolSocial.h %(anysdk_appstore_dir)s/ProtocolUser.h %(anysdk_appstore_dir)s/ProtocolPush.h %(anysdk_appstore_dir)s/ProtocolCrash.h %(anysdk_appstore_dir)s/ProtocolREC.h %(anysdk_appstore_dir)s/ProtocolCustom.h %(anysdk_appstore_dir)s/AgentManager.h %(anysdk_appstore_dir)s/JSBRelation.h %(anysdk_appstore_dir)s/ProtocolAdTracking.h - -# what classes to produce code for. You can use regular expressions here. When testing the regular -# expression, it will be enclosed in "^$", like this: "^CCMenu*$". -classes = PluginProtocol PluginFactory PluginManager ProtocolYAP ProtocolAnalytics ProtocolAds ProtocolSocial ProtocolUser ProtocolPush ProtocolREC ProtocolCrash ProtocolCustom AgentManager JSBRelation ProtocolAdTracking - -# what should we skip? in the format ClassName::[function function] -# ClassName is a regular expression, but will be used like this: "^ClassName$" functions are also -# regular expressions, they will not be surrounded by "^$". If you want to skip a whole class, just -# add a single "*" as functions. See bellow for several examples. A special class name is "*", which -# will apply to all class names. This is a convenience wildcard to be able to skip similar named -# functions from all classes. - -skip = ProtocolYAP::[setResultListener getYapListener yapForProduct], - ProtocolAnalytics::[logEvent], - ProtocolAds::[setAdsListener getAdsListener], - ProtocolShare::[setResultListener], - ProtocolSocial::[setListener getListener unlockAchievement], - ProtocolUser::[setActionListener getActionListener], - PluginProtocol::[callFuncWithParam callStringFuncWithParam callIntFuncWithParam callBoolFuncWithParam callFloatFuncWithParam], - ProtocolPush::[setActionListener getActionListener setTags delTags], - ProtocolCustom::[setResultListener getCustomListener], - ProtocolREC::[setResultListener getRECListener], - AgentManager::[getYAPPlugin getFrameworkVersion loadPlugin], - JSBRelation::[getMethodsOfJobject], - ProtocolAdTracking::[trackEvent] - -rename_functions = - -rename_classes = - -# for all class names, should we remove something when registering in the target VM? -remove_prefix = - -# classes for which there will be no "parent" lookup -classes_have_no_parents = - -# base classes which will be skipped when their sub-classes found them. -base_classes_to_skip = - -# classes that create no constructor -# CCSet is special and we will use a hand-written constructor -abstract_classes = PluginProtocol PluginFactory ProtocolYAP ProtocolAnalytics PluginManager ProtocolAds ProtocolShare ProtocolUser ProtocolSocial ProtocolPush AgentManager ProtocolCustom ProtocolCrash ProtocolREC ProtocolAdTracking JSBRelation - -persistent_classes = - -classes_owned_by_cpp = PluginProtocol PluginFactory PluginManager ProtocolYAP ProtocolAnalytics ProtocolAds ProtocolSocial ProtocolUser ProtocolPush ProtocolREC ProtocolCrash ProtocolCustom AgentManager JSBRelation ProtocolAdTracking diff --git a/native/tools/tojs/anysdk-common.ini b/native/tools/tojs/anysdk-common.ini deleted file mode 100644 index a0aaf0397ca..00000000000 --- a/native/tools/tojs/anysdk-common.ini +++ /dev/null @@ -1,75 +0,0 @@ -[protocols] -# the prefix to be added to the generated functions. You might or might not use this in your own -# templates -prefix = anysdk_framework - -# create a target namespace (in javascript, this would create some code like the equiv. to `ns = ns || {}`) -# all classes will be embedded in that namespace -target_namespace = anysdk - -android_headers = -I%(androidndkdir)s/platforms/android-14/arch-arm/usr/include -I%(androidndkdir)s/sources/cxx-stl/gnu-libstdc++/4.8/libs/armeabi-v7a/include -I%(androidndkdir)s/sources/cxx-stl/gnu-libstdc++/4.8/include -I%(androidndkdir)s/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include -I%(androidndkdir)s/sources/cxx-stl/gnu-libstdc++/4.9/include -android_flags = -D_SIZE_T_DEFINED_ - -clang_headers = -I%(clangllvmdir)s/%(clang_include)s -clang_flags = -nostdinc -x c++ -std=c++17 -fsigned-char -mfloat-abi=soft -U__SSE__ - -cocos_headers = -I%(anysdk_common_dir)s - -replace_headers = extensions/anysdk/js-bindings/jsb_anysdk_protocols_auto.hpp::jsb_anysdk_protocols_auto.hpp - -cocos_flags = -DANDROID -DCC_PLATFORM=3 -DCC_PLATFORM_IOS=1 -DCC_PLATFORM_MACOS=4 -DCC_PLATFORM_WINDOWS=2 -DCC_PLATFORM_ANDROID=3 - - -cxxgenerator_headers = - -# extra arguments for clang -extra_arguments = %(android_headers)s %(clang_headers)s %(cxxgenerator_headers)s %(cocos_headers)s %(android_flags)s %(clang_flags)s %(cocos_flags)s - -# what headers to 9 -headers = %(anysdk_common_dir)s/PluginManager.h %(anysdk_common_dir)s/ProtocolAnalytics.h %(anysdk_common_dir)s/ProtocolIAP.h %(anysdk_common_dir)s/ProtocolAds.h %(anysdk_common_dir)s/ProtocolShare.h %(anysdk_common_dir)s/ProtocolSocial.h %(anysdk_common_dir)s/ProtocolUser.h %(anysdk_common_dir)s/ProtocolPush.h %(anysdk_common_dir)s/ProtocolCrash.h %(anysdk_common_dir)s/ProtocolREC.h %(anysdk_common_dir)s/ProtocolCustom.h %(anysdk_common_dir)s/AgentManager.h %(anysdk_common_dir)s/JSBRelation.h %(anysdk_common_dir)s/ProtocolAdTracking.h - -# what classes to produce code for. You can use regular expressions here. When testing the regular -# expression, it will be enclosed in "^$", like this: "^CCMenu*$". -classes = PluginProtocol PluginFactory PluginManager ProtocolIAP ProtocolAnalytics ProtocolAds ProtocolSocial ProtocolUser ProtocolPush ProtocolREC ProtocolCrash ProtocolCustom AgentManager JSBRelation ProtocolAdTracking - -# what should we skip? in the format ClassName::[function function] -# ClassName is a regular expression, but will be used like this: "^ClassName$" functions are also -# regular expressions, they will not be surrounded by "^$". If you want to skip a whole class, just -# add a single "*" as functions. See bellow for several examples. A special class name is "*", which -# will apply to all class names. This is a convenience wildcard to be able to skip similar named -# functions from all classes. - -skip = ProtocolIAP::[setResultListener getPayListener payForProduct], - ProtocolAnalytics::[logEvent], - ProtocolAds::[setAdsListener getAdsListener], - ProtocolShare::[setResultListener], - ProtocolSocial::[setListener getListener unlockAchievement], - ProtocolUser::[setActionListener getActionListener], - PluginProtocol::[callFuncWithParam callStringFuncWithParam callIntFuncWithParam callBoolFuncWithParam callFloatFuncWithParam], - ProtocolPush::[setActionListener getActionListener setTags delTags], - ProtocolCustom::[setResultListener getCustomListener], - ProtocolREC::[setResultListener getRECListener], - AgentManager::[getIAPPlugin getFrameworkVersion loadPlugin], - JSBRelation::[getMethodsOfJobject], - ProtocolAdTracking::[trackEvent] - -rename_functions = - -rename_classes = - -# for all class names, should we remove something when registering in the target VM? -remove_prefix = - -# classes for which there will be no "parent" lookup -classes_have_no_parents = - -# base classes which will be skipped when their sub-classes found them. -base_classes_to_skip = - -# classes that create no constructor -# CCSet is special and we will use a hand-written constructor -abstract_classes = PluginProtocol PluginFactory ProtocolIAP ProtocolAnalytics PluginManager ProtocolAds ProtocolShare ProtocolUser ProtocolSocial ProtocolPush AgentManager ProtocolCustom ProtocolCrash ProtocolREC ProtocolAdTracking JSBRelation - -persistent_classes = - -classes_owned_by_cpp = PluginProtocol PluginFactory PluginManager ProtocolIAP ProtocolAnalytics ProtocolAds ProtocolSocial ProtocolUser ProtocolPush ProtocolREC ProtocolCrash ProtocolCustom AgentManager JSBRelation ProtocolAdTracking diff --git a/native/tools/tojs/assets.ini b/native/tools/tojs/assets.ini deleted file mode 100644 index 438fa62fc9b..00000000000 --- a/native/tools/tojs/assets.ini +++ /dev/null @@ -1,129 +0,0 @@ -[assets] -# the prefix to be added to the generated functions. You might or might not use this in your own -# templates -prefix = assets - -# create a target namespace (in javascript, this would create some code like the equiv. to `ns = ns || {}`) -# all classes will be embedded in that namespace -target_namespace = jsb - -android_headers = - -android_flags = -target armv7-none-linux-androideabi -D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS -DANDROID -D__ANDROID_API__=14 -gcc-toolchain %(gcc_toolchain_dir)s --sysroot=%(androidndkdir)s/platforms/android-14/arch-arm -idirafter %(androidndkdir)s/sources/android/support/include -idirafter %(androidndkdir)s/sysroot/usr/include -idirafter %(androidndkdir)s/sysroot/usr/include/arm-linux-androideabi -idirafter %(clangllvmdir)s/lib64/clang/5.0/include -I%(androidndkdir)s/sources/cxx-stl/llvm-libc++/include - -clang_headers = -clang_flags = -nostdinc -x c++ -std=c++17 -fsigned-char -U__SSE__ - -cocos_headers = -I%(cocosdir)s/cocos -I%(cocosdir)s/cocos/renderer -I%(cocosdir)s -I%(cocosdir)s/cocos/platform/android -I%(cocosdir)s/external/sources -I%(cocosdir)s/external/android/arm64-v8a/include/v8 - -cocos_flags = -DANDROID -DCC_PLATFORM=3 -DCC_PLATFORM_IOS=1 -DCC_PLATFORM_MACOS=4 -DCC_PLATFORM_WINDOWS=2 -DCC_PLATFORM_ANDROID=3 - - -cxxgenerator_headers = - -# extra arguments for clang -extra_arguments = %(android_headers)s %(clang_headers)s %(cxxgenerator_headers)s %(cocos_headers)s %(android_flags)s %(clang_flags)s %(cocos_flags)s %(extra_flags)s - -# what headers to parse -headers = %(cocosdir)s/cocos/core/assets/AssetsModuleHeader.h - %(cocosdir)s/cocos/core/builtin/BuiltinResMgr.h - %(cocosdir)s/cocos/3d/assets/Mesh.h - %(cocosdir)s/cocos/3d/assets/Morph.h - %(cocosdir)s/cocos/3d/assets/MorphRendering.h - %(cocosdir)s/cocos/3d/assets/Skeleton.h - %(cocosdir)s/cocos/3d/misc/CreateMesh.h - -hpp_headers = cocos/bindings/auto/jsb_gfx_auto.h cocos/bindings/auto/jsb_pipeline_auto.h -cpp_headers = cocos/bindings/auto/jsb_cocos_auto.h - -# what classes to produce code for. You can use regular expressions here. When testing the regular -# expression, it will be enclosed in "^$", like this: "^Menu*$". -classes = Asset BufferAsset, - IPropertyInfo ITechniqueInfo IBlockInfo ISamplerTextureInfo IAttributeInfo, - IDefineInfo IBuiltin IBuiltinInfo IBuiltins IShaderSource, - IShaderInfo EffectAsset IPassStates IPassInfo IPassInfoFull, - IInputAttachmentInfo, - IImageInfo, - IBufferInfo ITextureInfo ISamplerInfo, - RasterizerStateInfo DepthStencilStateInfo BlendTargetInfo BlendStateInfo, - IMemoryImageSource ImageAsset, - JsonAsset, - IMaterialInfo Material, - Prefab, - Error, - BoundingBox VertexIdChannel IGeometricInfo IFlatBuffer RenderingSubMesh, - IRenderTextureCreateInfo RenderTexture, - TextureBase, - SceneAsset, - SimpleTexture, - TextAsset, - ITexture2DSerializeData ITexture2DCreateInfo Texture2D, - ITextureCubeMipmap ITextureCubeSerializeMipmapData TextureCubeSerializeData TextureCubeMipmapAtlasInfo MipmapAtlasLayoutInfo TextureCube, - IMeshBufferView, - Mesh ISubMesh IDynamicInfo IDynamicStruct IStruct IVertexBundle ICreateInfo, - CustomAttribute DynamicCustomAttribute IGeometry IDynamicGeometry ICreateMeshOptions ICreateDynamicMeshOptions MeshUtils, - MorphTarget SubMeshMorph Morph MorphRenderingInstance, - StdMorphRendering MorphRendering, - BuiltinResMgr, - Skeleton - - -# what should we skip? in the format ClassName::[function function] -# ClassName is a regular expression, but will be used like this: "^ClassName$" functions are also -# regular expressions, they will not be surrounded by "^$". If you want to skip a whole class, just -# add a single "*" as functions. See bellow for several examples. A special class name is "*", which -# will apply to all class names. This is a convenience wildcard to be able to skip similar named -# functions from all classes. -skip = Material::[getOwner setProperty$], - Mesh::[(s|g)etNativeAsset], - SimpleTexture::[uploadDataWithArrayBuffer], - ImageAsset::[setData], - RasterizerStateInfo::[assignToGFX fromGFX], - DepthStencilStateInfo::[assignToGFX fromGFX], - BlendTargetInfo::[assignToGFX fromGFX], - BlendStateInfo::[assignToGFX fromGFX], - Texture2D::[deserialize] - -field = Material::[morphRendering _effectAsset _techIdx _defines _states _props], - Mesh::[morphRendering], - TextAsset::[text], - Asset::[_native _nativeUrl], - TextureCube::[isRGBE _mipmapMode], - TextureBase::[_format _minFilter _magFilter _mipFilter _wrapS _wrapT _wrapR _anisotropy _width _height] - -skip_public_fields = - -rename_functions = ICreateInfo::[structInfo=struct], - IPassInfoFull::[switch_=switch], - Material::[getProperty=_getProperty _props=_propsInternal getHashForMaterial=getHash], - EffectAsset::[registerAsset=register], - BufferAsset::[getBuffer=buffer], - Skeleton::[getBindposes=_getBindposes setBindposes=_setBindposes] - - -getter_setter= Asset::[_uuid/getUuid/setUuid nativeUrl/getNativeUrl _nativeDep/getNativeDep isDefault/isDefault], - ImageAsset::[format url/getUrl?/setUrl?], - BufferAsset::[_nativeAsset/getNativeAssetForJS/setNativeAssetForJS], - TextureBase::[isCompressed/isCompressed _width:width/getWidth/setWidth _height:height/getHeight/setHeight], - SimpleTexture::[mipmapLevel/mipmapLevel], - RenderTexture::[window], - Mesh::[_hash:hash/getHash/setHash data:_data/getData jointBufferIndices/getJointBufferIndices renderingSubMeshes/getRenderingSubMeshes subMeshCount/getSubMeshCount _nativeAsset/getAssetData/setAssetData _allowDataAccess:allowDataAccess/isAllowDataAccess/setAllowDataAccess], - Material::[effectAsset effectName technique/getTechniqueIndex hash/getHash parent], - RenderingSubMesh::[mesh subMeshIdx flatBuffers:_flatBuffers jointMappedBuffers iaInfo:_iaInfo primitiveMode], - Skeleton::[_joints:joints/getJoints?/setJoints? _hash:hash/getHash?/setHash? _invBindposes:inverseBindposes/getInverseBindposes?/setInverseBindposes?], - EffectAsset::[techniques shaders combinations] - - -rename_classes = - -# for all class names, should we remove something when registering in the target VM? -remove_prefix = - -# classes for which there will be no "parent" lookup -classes_have_no_parents = -# base classes which will be skipped when their sub-classes found them. -base_classes_to_skip = RefCounted - -# classes that create no constructor -# Set is special and we will use a hand-written constructor -abstract_classes = ShapeBase diff --git a/native/tools/tojs/audio.ini b/native/tools/tojs/audio.ini deleted file mode 100644 index fcf109b0436..00000000000 --- a/native/tools/tojs/audio.ini +++ /dev/null @@ -1,65 +0,0 @@ -[audio] -# the prefix to be added to the generated functions. You might or might not use this in your own -# templates -prefix = audio - -# create a target namespace (in javascript, this would create some code like the equiv. to `ns = ns || {}`) -# all classes will be embedded in that namespace -target_namespace = jsb - -macro_judgement = - -android_headers = - -android_flags = -target armv7-none-linux-androideabi -D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS -DANDROID -D__ANDROID_API__=14 -gcc-toolchain %(gcc_toolchain_dir)s --sysroot=%(androidndkdir)s/platforms/android-14/arch-arm -idirafter %(androidndkdir)s/sources/android/support/include -idirafter %(androidndkdir)s/sysroot/usr/include -idirafter %(androidndkdir)s/sysroot/usr/include/arm-linux-androideabi -idirafter %(clangllvmdir)s/lib64/clang/5.0/include -I%(androidndkdir)s/sources/cxx-stl/llvm-libc++/include - -clang_headers = -clang_flags = -nostdinc -x c++ -std=c++17 -fsigned-char -mfloat-abi=soft -U__SSE__ - -cocos_headers = -I%(cocosdir)s -I%(cocosdir)s/cocos -I%(cocosdir)s/cocos/platform/android -I%(cocosdir)s/external/sources -cocos_flags = -DANDROID -DCC_PLATFORM=3 -DCC_PLATFORM_IOS=1 -DCC_PLATFORM_MACOS=4 -DCC_PLATFORM_WINDOWS=2 -DCC_PLATFORM_ANDROID=3 - - -cxxgenerator_headers = - -# extra arguments for clang -extra_arguments = %(android_headers)s %(clang_headers)s %(cxxgenerator_headers)s %(cocos_headers)s %(android_flags)s %(clang_flags)s %(cocos_flags)s %(extra_flags)s - -# what headers to parse -headers = %(cocosdir)s/cocos/audio/include/AudioEngine.h - -replace_headers = AudioEngine.h::audio/include/AudioEngine.h - -# what classes to produce code for. You can use regular expressions here. When testing the regular -# expression, it will be enclosed in "^$", like this: "^Menu*$". -classes = AudioEngine AudioProfile - -# what should we skip? in the format ClassName::[function function] -# ClassName is a regular expression, but will be used like this: "^ClassName$" functions are also -# regular expressions, they will not be surrounded by "^$". If you want to skip a whole class, just -# add a single "*" as functions. See bellow for several examples. A special class name is "*", which -# will apply to all class names. This is a convenience wildcard to be able to skip similar named -# functions from all classes. - -skip = AudioEngine::[getPCMHeader getOriginalPCMBuffer getPCMBufferByFormat] - -field = AudioProfile::[name maxInstances minDelay] - -rename_functions = - -rename_classes = - -# for all class names, should we remove something when registering in the target VM? -remove_prefix = - -# classes for which there will be no "parent" lookup -classes_have_no_parents = AudioEngine AudioProfile - -# base classes which will be skipped when their sub-classes found them. -base_classes_to_skip = Clonable - -# classes that create no constructor -# Set is special and we will use a hand-written constructor -abstract_classes = AudioEngine - -classes_owned_by_cpp = AudioEngine diff --git a/native/tools/tojs/cocos.ini b/native/tools/tojs/cocos.ini deleted file mode 100644 index 98dfada95f7..00000000000 --- a/native/tools/tojs/cocos.ini +++ /dev/null @@ -1,90 +0,0 @@ -[cocos] -# the prefix to be added to the generated functions. You might or might not use this in your own -# templates -prefix = engine - -# create a target namespace (in javascript, this would create some code like the equiv. to `ns = ns || {}`) -# all classes will be embedded in that namespace -target_namespace = jsb - -android_headers = - -android_flags = -target armv7-none-linux-androideabi -D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS -DANDROID -D__ANDROID_API__=14 -gcc-toolchain %(gcc_toolchain_dir)s --sysroot=%(androidndkdir)s/platforms/android-14/arch-arm -idirafter %(androidndkdir)s/sources/android/support/include -idirafter %(androidndkdir)s/sysroot/usr/include -idirafter %(androidndkdir)s/sysroot/usr/include/arm-linux-androideabi -idirafter %(clangllvmdir)s/lib64/clang/5.0/include -I%(androidndkdir)s/sources/cxx-stl/llvm-libc++/include - -clang_headers = -clang_flags = -nostdinc -x c++ -std=c++17 -fsigned-char -mfloat-abi=soft -U__SSE__ - -cocos_headers = -I%(cocosdir)s/cocos -I%(cocosdir)s/cocos/platform/android -I%(cocosdir)s/external/sources -cocos_flags = -DANDROID -DCC_PLATFORM=3 -DCC_PLATFORM_IOS=1 -DCC_PLATFORM_MACOS=4 -DCC_PLATFORM_WINDOWS=2 -DCC_PLATFORM_ANDROID=3 - - -cxxgenerator_headers = - -# extra arguments for clang -extra_arguments = %(android_headers)s %(clang_headers)s %(cxxgenerator_headers)s %(cocos_headers)s %(android_flags)s %(clang_flags)s %(cocos_flags)s %(extra_flags)s - -# what headers to parse -headers = %(cocosdir)s/cocos/platform/FileUtils.h %(cocosdir)s/cocos/bindings/event/EventDispatcher.h %(cocosdir)s/cocos/platform/interfaces/modules/canvas/CanvasRenderingContext2D.h %(cocosdir)s/cocos/platform/interfaces/modules/Device.h %(cocosdir)s/cocos/platform/SAXParser.h %(cocosdir)s/cocos/math/Vec2.h %(cocosdir)s/cocos/math/Vec3.h %(cocosdir)s/cocos/math/Quaternion.h %(cocosdir)s/cocos/math/Color.h %(cocosdir)s/cocos/core/data/Object.h %(cocosdir)s/cocos/core/data/JSBNativeDataHolder.h %(cocosdir)s/cocos/profiler/DebugRenderer.h - -cpp_headers = cocos/bindings/auto/jsb_gfx_auto.h - -replace_headers= - -# what classes to produce code for. You can use regular expressions here. When testing the regular -# expression, it will be enclosed in "^$", like this: "^Menu*$". - -classes = CCObject FileUtils$ SAXParser OSInterface ICanvasRenderingContext2D CanvasRenderingContext2D ICanvasGradient CanvasGradient Device DownloaderHints Vec2 Color JSBNativeDataHolder DebugTextInfo DebugRenderer - -classes_need_extend = - -field = Vec2::[x y], - Color::[r g b a], - CCObject::[_name _objFlags] - -# what should we skip? in the format ClassName::[function function] -# ClassName is a regular expression, but will be used like this: "^ClassName$" functions are also -# regular expressions, they will not be surrounded by "^$". If you want to skip a whole class, just -# add a single "*" as functions. See bellow for several examples. A special class name is "*", which -# will apply to all class names. This is a convenience wildcard to be able to skip similar named -# functions from all classes. - -skip = FileUtils::[getFileData setFilenameLookupDictionary destroyInstance getFullPathCache getContents listFilesRecursively setDelegate], - SAXParser::[(?!(init))], - Device::[getDeviceMotionValue], - CanvasRenderingContext2D::[setCanvasBufferUpdatedCallback set_.+ fillText strokeText fillRect measureText], - Data::[takeBuffer getBytes fastSet copy], - OSInterface::[dispatchEvent dispatchTouchEvent], - Vec2::[^(a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|z)+], - Vec3::[^(a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w)+], - Quaternion::[^(a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v)+ zero], - Color::[^(c|d|e|f|h|i|j|k|l|m|n|o|p|q|s|t|u|v|w|z)+], - JSBNativeDataHolder::[getData setData], - DebugRenderer::[activate render destroy] - -rename_functions = FileUtils::[loadFilenameLookupDictionaryFromFile=loadFilenameLookup], - CCObject::[destroyImmediate=_destroyImmediate destroy=_destroy] - -getter_setter=ICanvasRenderingContext2D::[width//setWidth height//setHeight fillStyle//setFillStyle font//setFont globalCompositeOperation//setGlobalCompositeOperation lineCap//setLineCap lineJoin//setLineJoin lineWidth//setLineWidth strokeStyle//setStrokeStyle textAlign//setTextAlign textBaseline//setTextBaseline], - CCObject::[name hideFlags replicated/isReplicated/setReplicated isValid/isValid] - -rename_classes = SAXParser::PlistParser, - Quaternion::Quat - -# for all class names, should we remove something when registering in the target VM? -remove_prefix = - -# classes for which there will be no "parent" lookup -classes_have_no_parents = SAXParser - -# base classes which will be skipped when their sub-classes found them. -base_classes_to_skip = RefCounted Clonable - -# classes that create no constructor -# Set is special and we will use a hand-written constructor -abstract_classes = SAXParser Device ICanvasRenderingContext2D ICanvasGradient OSInterface FileUtils DebugRenderer - -persistent_classes = FileUtils - -classes_owned_by_cpp = - -class_module_configs = DebugTextInfo::[CC_USE_DEBUG_RENDERER],DebugRenderer::[CC_USE_DEBUG_RENDERER] \ No newline at end of file diff --git a/native/tools/tojs/dragonbones.ini b/native/tools/tojs/dragonbones.ini deleted file mode 100644 index 39379605eae..00000000000 --- a/native/tools/tojs/dragonbones.ini +++ /dev/null @@ -1,86 +0,0 @@ -[dragonbones] -prefix = dragonbones - -target_namespace = dragonBones - -android_headers = - -macro_judgement = - -android_flags = -target armv7-none-linux-androideabi -D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS -DANDROID -D__ANDROID_API__=14 -gcc-toolchain %(gcc_toolchain_dir)s --sysroot=%(androidndkdir)s/platforms/android-14/arch-arm -idirafter %(androidndkdir)s/sources/android/support/include -idirafter %(androidndkdir)s/sysroot/usr/include -idirafter %(androidndkdir)s/sysroot/usr/include/arm-linux-androideabi -idirafter %(clangllvmdir)s/lib64/clang/5.0/include -I%(androidndkdir)s/sources/cxx-stl/llvm-libc++/include -I%(cocosdir)s/external/android/arm64-v8a/include/v8 - -clang_headers = -clang_flags = -nostdinc -x c++ -std=c++17 -fsigned-char -mfloat-abi=soft -U__SSE__ - -cpp_headers = cocos/bindings/auto/jsb_2d_auto.h cocos/bindings/auto/jsb_assets_auto.h -cocos_headers = -I%(cocosdir)s/cocos -I%(cocosdir)s/cocos/bindings/jswrapper -I%(cocosdir)s/cocos/platform/android -I%(cocosdir)s/external/sources -I%(cocosdir)s/cocos/editor-support -cocos_flags = -DANDROID -DCC_PLATFORM=3 -DCC_PLATFORM_IOS=1 -DCC_PLATFORM_MACOS=4 -DCC_PLATFORM_WINDOWS=2 -DCC_PLATFORM_ANDROID=3 - -cxxgenerator_headers = - -# extra arguments for clang -extra_arguments = %(android_headers)s %(clang_headers)s %(cxxgenerator_headers)s %(cocos_headers)s %(android_flags)s %(clang_flags)s %(cocos_flags)s %(extra_flags)s - -headers = %(cocosdir)s/cocos/editor-support/dragonbones-creator-support/CCDragonBonesHeaders.h - -hpp_headers = cocos/bindings/auto/jsb_cocos_auto.h - -classes = Rectangle DragonBonesData CCFactory CCArmatureDisplay Armature CCSlot WorldClock Animation Slot BaseFactory BaseObject TextureData CCTextureData TextureAtlasData CCTextureAtlasData AnimationState EventObject Bone Transform Matrix TransformObject ArmatureData BoneData SlotData SkinData AnimationData CCArmatureCacheDisplay ArmatureCacheMgr RealTimeAttachUtil CacheModeAttachUtil AttachUtilBase - -abstract_classes = DragonBonesData Armature CCSlot WorldClock Animation Slot BaseFactory BaseObject TextureData CCTextureData TextureAtlasData CCTextureAtlasData AnimationState EventObject Bone Transform Matrix TransformObject ArmatureData BoneData SlotData SkinData AnimationData AttachUtilBase - -skip = CCFactory::[destroyInstance loadDragonBonesData loadTextureAtlasData], - BaseFactory::[replaceDisplay getAllTextureAtlasData getAllDragonBonesData getClassTypeIndex replaceSlotDisplayList getTextureAtlasData parseTextureAtlasData], - Armature::[intersectsSegment getAnimatable _addConstraint getReplacedTexture setReplacedTexture getBoneByDisplay getSlotByDisplay init _sortZOrder getBones getSlots getDisplay getTypeIndex], - Animation::[playConfig getAnimationConfig getTypeIndex getStates setAnimations getAnimations], - Slot::[setRawDisplayDatas replaceDisplayData intersectsSegment init getDisplay getRawDisplay getMeshDisplay setDisplay _updateBlendMode _updateVisible _setDisplayIndex _setDisplayList getDisplayList _setColor _setDisplayList], - AnimationState::[init copyFrom getTypeIndex], - CCSlot::[getTexture _onClear getClassTypeIndex getTypeIndex], - Transform::[operator= fromMatrix add identity minus toMatrix], - Matrix::[operator= identity concat invert transformPoint transformRectangle], - WorldClock::[contains add remove], - ArmatureData::[getData setUserData addConstraint getUserData getConstraint addAction setCacheFrame getCacheFrame getTypeIndex getActions getDefaultActions cacheFrames addBone addSlot addSkin addAnimation getSortedBones getSortedSlots], - BoneData::[getData getUserData setUserData getTypeIndex], - SlotData::[getUserData setUserData getDefaultColor createColor setColor getColor getDefaultColor getTypeIndex], - AnimationData::[getActionTimeline setActionTimeline addConstraintTimeline setZOrderTimeline cacheFrames addBoneTimeline addSlotTimeline getSlotTimelines getBoneTimelines getConstraintTimelines getClassTypeIndex getTypeIndex], - BaseObject::[getClassTypeIndex setObjectRecycleOrDestroyCallback isInPool getAllObjects], - TextureAtlasData::[getTextures copyFrom], - DragonBonesData::[getUserData setUserData getTypeIndex], - SkinData::[replaceDisplay setRawDisplayDatas replaceDisplayData addDisplay getDisplay getDisplays getSlotDisplays getTypeIndex], - Bone::[getTypeIndex], - EventObject::[getData getTypeIndex actionDataToInstance], - TextureData::[copyFrom], - CCTextureAtlasData::[setRenderTexture getRenderTexture getTypeIndex], - CCTextureData::[getTypeIndex], - CCArmatureDisplay::[render update requestDrawInfo requestMaterial], - RealTimeAttachUtil::[syncAttachedNode], - CacheModeAttachUtil::[syncAttachedNode], - AttachUtilBase::[releaseAttachedNode], - CCArmatureCacheDisplay::[requestDrawInfo requestMaterial] - -field = Transform::[x y skew scaleX scaleY rotation], - Slot::[displayController _zOrder], - Matrix::[a b c d tx ty], - EventObject::[animationState armature name type bone slot], - AnimationState::[timeScale displayControl additiveBlending playTimes weight autoFadeOutTime fadeTotalTime name], - Animation::[timeScale], - ArmatureData::[frameRate name], - AnimationData::[name frameCount playTimes duration fadeInTime], - BoneData::[name parent], - SlotData::[name parent], - SkinData::[name], - DragonBonesData::[name], - TextureAtlasData::[name] - -remove_prefix = - -classes_have_no_parents = WorldClock AnimationData - -base_classes_to_skip = RefCounted IArmatureProxy IAnimatable IMiddleware - -rename_functions = CCArmatureCacheDisplay::[getArmature=armature], - CCArmatureDisplay::[getArmature=armature] - -rename_classes = - -classes_owned_by_cpp = DragonBonesData Armature CCSlot WorldClock Animation Slot BaseFactory BaseObject TextureData CCTextureData TextureAtlasData CCTextureAtlasData AnimationState EventObject Bone Transform Matrix TransformObject ArmatureData BoneData SlotData SkinData AnimationData diff --git a/native/tools/tojs/editor_support.ini b/native/tools/tojs/editor_support.ini deleted file mode 100644 index 94776c88db7..00000000000 --- a/native/tools/tojs/editor_support.ini +++ /dev/null @@ -1,47 +0,0 @@ -[editor_support] -prefix = editor_support - -target_namespace = middleware - -android_headers = - -macro_judgement = - -android_flags = -target armv7-none-linux-androideabi -D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS -DANDROID -D__ANDROID_API__=14 -gcc-toolchain %(gcc_toolchain_dir)s --sysroot=%(androidndkdir)s/platforms/android-14/arch-arm -idirafter %(androidndkdir)s/sources/android/support/include -idirafter %(androidndkdir)s/sysroot/usr/include -idirafter %(androidndkdir)s/sysroot/usr/include/arm-linux-androideabi -idirafter %(clangllvmdir)s/lib64/clang/5.0/include -I%(androidndkdir)s/sources/cxx-stl/llvm-libc++/include -I%(cocosdir)s/external/android/arm64-v8a/include/v8 - -clang_headers = -clang_flags = -nostdinc -x c++ -std=c++17 -fsigned-char -mfloat-abi=soft -U__SSE__ - -cocos_headers = -I%(cocosdir)s/cocos -I%(cocosdir)s/cocos/bindings/jswrapper -I%(cocosdir)s/cocos/platform/android -I%(cocosdir)s/external/sources -I%(cocosdir)s/cocos/editor-support -cocos_flags = -DANDROID -DCC_PLATFORM=3 -DCC_PLATFORM_IOS=1 -DCC_PLATFORM_MACOS=4 -DCC_PLATFORM_WINDOWS=2 -DCC_PLATFORM_ANDROID=3 - -cxxgenerator_headers = - -# extra arguments for clang -extra_arguments = %(android_headers)s %(clang_headers)s %(cxxgenerator_headers)s %(cocos_headers)s %(android_flags)s %(clang_flags)s %(cocos_flags)s %(extra_flags)s - -headers = %(cocosdir)s/cocos/editor-support/middleware-adapter.h %(cocosdir)s/cocos/editor-support/MiddlewareManager.h %(cocosdir)s/cocos/editor-support/SharedBufferManager.h - -replace_headers = - -classes = Texture2D MiddlewareManager SharedBufferManager - -classes_need_extend = - -skip = MiddlewareManager::[addTimer removeTimer getMeshBuffer], - SharedBufferManager::[getBuffer reset], - Texture2D::[setTexParameters], - MeshBuffer::[getUIMeshBuffer uiMeshBuffers] - - -remove_prefix = - -classes_have_no_parents = - -base_classes_to_skip = RefCounted IMiddleware - -abstract_classes = - -rename_functions = - -rename_classes = diff --git a/native/tools/tojs/extension.ini b/native/tools/tojs/extension.ini deleted file mode 100644 index 10ac00ab08a..00000000000 --- a/native/tools/tojs/extension.ini +++ /dev/null @@ -1,68 +0,0 @@ -[extension] -# the prefix to be added to the generated functions. You might or might not use this in your own -# templates -prefix = extension - -# create a target namespace (in javascript, this would create some code like the equiv. to `ns = ns || {}`) -# all classes will be embedded in that namespace -target_namespace = jsb - -android_headers = -android_flags = -target armv7-none-linux-androideabi -D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS -DANDROID -D__ANDROID_API__=14 -gcc-toolchain %(gcc_toolchain_dir)s --sysroot=%(androidndkdir)s/platforms/android-14/arch-arm -idirafter %(androidndkdir)s/sources/android/support/include -idirafter %(androidndkdir)s/sysroot/usr/include -idirafter %(androidndkdir)s/sysroot/usr/include/arm-linux-androideabi -idirafter %(clangllvmdir)s/lib64/clang/5.0/include -I%(androidndkdir)s/sources/cxx-stl/llvm-libc++/include - -clang_headers = -clang_flags = -nostdinc -x c++ -std=c++17 -fsigned-char -mfloat-abi=soft -U__SSE__ - -cocos_headers = -I%(cocosdir)s -I%(cocosdir)s/cocos -I%(cocosdir)s/cocos/platform/android -I%(cocosdir)s/external/sources - -cocos_flags = -DANDROID -DCC_PLATFORM=3 -DCC_PLATFORM_IOS=1 -DCC_PLATFORM_MACOS=4 -DCC_PLATFORM_WINDOWS=2 -DCC_PLATFORM_ANDROID=3 - - -cxxgenerator_headers = - -# extra arguments for clang -extra_arguments = %(android_headers)s %(clang_headers)s %(cxxgenerator_headers)s %(cocos_headers)s %(android_flags)s %(clang_flags)s %(cocos_flags)s %(extra_flags)s - -# what headers to parse -headers = %(cocosdir)s/extensions/cocos-ext.h - -replace_headers = cocos-ext.h::extensions/cocos-ext.h - -# what classes to produce code for. You can use regular expressions here. When testing the regular -# expression, it will be enclosed in "^$", like this: "^Menu*$". -classes = AssetsManagerEx Manifest EventListenerAssetsManagerEx EventAssetsManagerEx - -# what should we skip? in the format ClassName::[function function] -# ClassName is a regular expression, but will be used like this: "^ClassName$" functions are also -# regular expressions, they will not be surrounded by "^$". If you want to skip a whole class, just -# add a single "*" as functions. See bellow for several examples. A special class name is "*", which -# will apply to all class names. This is a convenience wildcard to be able to skip similar named -# functions from all classes. - -skip = ScrollView::[(g|s)etDelegate$], - .*Delegate::[*], - .*Loader.*::[*], - *::[^visit$ copyWith.* onEnter.* onExit.* ^description$ getObjectType .*HSV onTouch.* onAcc.* onKey.* onRegisterTouchListener], - Manifest::[getAssets], - AssetsManagerEx::[getFailedAssets updateAssets] - -rename_functions = - -rename_classes = AssetsManagerEx::AssetsManager, - EventAssetsManagerEx::EventAssetsManager, - EventListenerAssetsManagerEx::EventListenerAssetsManager - -# for all class names, should we remove something when registering in the target VM? -remove_prefix = - -# classes for which there will be no "parent" lookup -classes_have_no_parents = - -# base classes which will be skipped when their sub-classes found them. -base_classes_to_skip = RefCounted - -# classes that create no constructor -# Set is special and we will use a hand-written constructor -abstract_classes = - -classes_need_extend = diff --git a/native/tools/tojs/genbindings.py b/native/tools/tojs/genbindings.py index d578330c190..f75749fbd33 100755 --- a/native/tools/tojs/genbindings.py +++ b/native/tools/tojs/genbindings.py @@ -4,7 +4,7 @@ # Android ndk version must be ndk-r16 or greater. -import sys, os, shutil, subprocess, re +import sys, os, subprocess, re from contextlib import contextmanager if sys.version_info.major >= 3: @@ -13,25 +13,6 @@ import ConfigParser as configparser defaultSections = [ - 'xr', - 'cocos', - 'video', - 'webview', - 'audio' , - 'extension', - 'network', - 'gfx', - 'pipeline', - 'render', - 'physics', - 'scene', - 'geometry', - 'assets', - '2d', - 'editor_support', - 'spine', - 'dragonbones', - 'gi' ] projectRoot = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..')) diff --git a/native/tools/tojs/geometry.ini b/native/tools/tojs/geometry.ini deleted file mode 100644 index 1fdc22ab299..00000000000 --- a/native/tools/tojs/geometry.ini +++ /dev/null @@ -1,71 +0,0 @@ -[geometry] -# the prefix to be added to the generated functions. You might or might not use this in your own -# templates -prefix = geometry - -#cpp_headers = - -# create a target namespace (in javascript, this would create some code like the equiv. to `ns = ns || {}`) -# all classes will be embedded in that namespace -target_namespace = ns - -android_headers = - -android_flags = -target armv7-none-linux-androideabi -D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS -DANDROID -D__ANDROID_API__=14 -gcc-toolchain %(gcc_toolchain_dir)s --sysroot=%(androidndkdir)s/platforms/android-14/arch-arm -idirafter %(androidndkdir)s/sources/android/support/include -idirafter %(androidndkdir)s/sysroot/usr/include -idirafter %(androidndkdir)s/sysroot/usr/include/arm-linux-androideabi -idirafter %(clangllvmdir)s/lib64/clang/5.0/include -I%(androidndkdir)s/sources/cxx-stl/llvm-libc++/include - -clang_headers = -clang_flags = -nostdinc -x c++ -std=c++17 -fsigned-char -U__SSE__ - -cocos_headers = -I%(cocosdir)s/cocos -I%(cocosdir)s/cocos/renderer -I%(cocosdir)s -I%(cocosdir)s/cocos/platform/android -I%(cocosdir)s/external/sources -I%(cocosdir)s/external/android/arm64-v8a/include/v8 - -cocos_flags = -DANDROID -DCC_PLATFORM=3 -DCC_PLATFORM_IOS=1 -DCC_PLATFORM_MACOS=4 -DCC_PLATFORM_WINDOWS=2 -DCC_PLATFORM_ANDROID=3 - - -cxxgenerator_headers = - -# extra arguments for clang -extra_arguments = %(android_headers)s %(clang_headers)s %(cxxgenerator_headers)s %(cocos_headers)s %(android_flags)s %(clang_flags)s %(cocos_flags)s %(extra_flags)s - -# what headers to parse -headers = %(cocosdir)s/cocos/core/geometry/Geometry.h - -hpp_headers = cocos/bindings/auto/jsb_cocos_auto.h - -# what classes to produce code for. You can use regular expressions here. When testing the regular -# expression, it will be enclosed in "^$", like this: "^Menu*$". -classes = AABB Obb Line Plane Frustum Capsule Sphere Triangle Ray Spline ShapeBase - -# what should we skip? in the format ClassName::[function function] -# ClassName is a regular expression, but will be used like this: "^ClassName$" functions are also -# regular expressions, they will not be surrounded by "^$". If you want to skip a whole class, just -# add a single "*" as functions. See bellow for several examples. A special class name is "*", which -# will apply to all class names. This is a convenience wildcard to be able to skip similar named -# functions from all classes. -skip = AABB::[getBoundary aabbAabb aabbFrustum aabbPlan merge transform transformExtentM4 isValid setValid set fromPoints (g|s)etCenter (g|s)etHalfExtents], - Frustum::[update type planes], - Plane::[getSpotAngle], - Ray::[computeHit], - Sphere::[getBoundary] - -rename_functions = - -getter_setter = ShapeBase::[_type/getType/setType], - Spline::[mode knots] - -rename_classes = - -field = AABB::[center halfExtents], - Frustum::[vertices planes], - Plane::[n d] - -# for all class names, should we remove something when registering in the target VM? -remove_prefix = - -# classes for which there will be no "parent" lookup -classes_have_no_parents = -# base classes which will be skipped when their sub-classes found them. -base_classes_to_skip = RefCounted - -# classes that create no constructor -# Set is special and we will use a hand-written constructor -abstract_classes = ShapeBase diff --git a/native/tools/tojs/gfx.ini b/native/tools/tojs/gfx.ini deleted file mode 100644 index dd1b22a6198..00000000000 --- a/native/tools/tojs/gfx.ini +++ /dev/null @@ -1,120 +0,0 @@ -[gfx] -# the prefix to be added to the generated functions. You might or might not use this in your own -# templates -prefix = gfx - -# create a target namespace (in javascript, this would create some code like the equiv. to `ns = ns || {}`) -# all classes will be embedded in that namespace -target_namespace = gfx - -macro_judgement = - -android_headers = - -android_flags = -target armv7-none-linux-androideabi -D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS -DANDROID -D__ANDROID_API__=14 -gcc-toolchain %(gcc_toolchain_dir)s --sysroot=%(androidndkdir)s/platforms/android-14/arch-arm -idirafter %(androidndkdir)s/sources/android/support/include -idirafter %(androidndkdir)s/sysroot/usr/include -idirafter %(androidndkdir)s/sysroot/usr/include/arm-linux-androideabi -idirafter %(clangllvmdir)s/lib64/clang/5.0/include -I%(androidndkdir)s/sources/cxx-stl/llvm-libc++/include - -clang_headers = -clang_flags = -nostdinc -x c++ -std=c++17 -fsigned-char -mfloat-abi=soft -U__SSE__ - -cocos_headers = -I%(cocosdir)s/cocos -I%(cocosdir)s/cocos/renderer -I%(cocosdir)s/cocos/renderer/core-I%(cocosdir)s/cocos/math -I%(cocosdir)s/cocos/platform/android -I%(cocosdir)s/external/sources -cocos_flags = -DANDROID -DCC_PLATFORM=3 -DCC_PLATFORM_IOS=1 -DCC_PLATFORM_MACOS=4 -DCC_PLATFORM_WINDOWS=2 -DCC_PLATFORM_ANDROID=3 - - -cxxgenerator_headers = - -# extra arguments for clang -extra_arguments = %(android_headers)s %(clang_headers)s %(cxxgenerator_headers)s %(cocos_headers)s %(android_flags)s %(clang_flags)s %(cocos_flags)s %(extra_flags)s - -# what headers to parse -headers = %(cocosdir)s/cocos/renderer/GFXDeviceManager.h - -replace_headers = - -# what classes to produce code for. You can use regular expressions here. When testing the regular -# expression, it will be enclosed in "^$", like this: "^Menu.*$". - -classes = - DeviceManager, - # classes - GFXObject DescriptorSet DescriptorSetLayout Device Buffer BufferBarrier CommandBuffer Framebuffer GeneralBarrier InputAssembler, - PipelineLayout PipelineState Queue QueryPool RenderPass Sampler Shader Swapchain Texture TextureBarrier, - # structs - Attribute BindingMappingInfo BlendState BlendTarget BufferInfo BufferTextureCopy BufferViewInfo BufferBarrierInfo Color ColorAttachment CommandBufferInfo, - DepthStencilAttachment DepthStencilState DescriptorSetInfo DescriptorSetLayoutBinding DescriptorSetLayoutInfo DeviceCaps DeviceInfo, - DispatchInfo DrawInfo Extent FramebufferInfo GeneralBarrierInfo IndirectBuffer InputAssemblerInfo InputState, - MemoryStatus Offset PipelineLayoutInfo PipelineStateInfo QueueInfo QueryPoolInfo RasterizerState Rect RenderPassInfo SamplerInfo ShaderInfo ShaderStage Size SubpassInfo SubpassDependency, - SwapchainInfo TextureBarrierInfo TextureBlit TextureCopy TextureInfo TextureSubresLayers TextureSubresRange TextureViewInfo Uniform, - UniformBlock UniformInputAttachment UniformSampler UniformSamplerTexture UniformStorageBuffer UniformStorageImage UniformTexture Viewport - ; FormatInfo - -classes_need_extend = - -# what should we skip? in the format ClassName::[function function] -# ClassName is a regular expression, but will be used like this: "^ClassName$" functions are also -# regular expressions, they will not be surrounded by "^$". If you want to skip a whole class, just -# add a single "*" as functions. See bellow for several examples. A special class name is "*", which -# will apply to all class names. This is a convenience wildcard to be able to skip similar named -# functions from all classes. - -skip = Buffer::[Buffer initialize update], - CommandBuffer::[CommandBuffer execute updateBuffer copyBuffersToTexture], - Framebuffer::[Framebuffer], - InputAssembler::[InputAssembler], - DescriptorSet::[DescriptorSet forceUpdate], - DescriptorSetLayout::[DescriptorSetLayout getBindingIndices descriptorIndices getDescriptorIndices], - PipelineLayout::[PipelineLayout], - PipelineState::[PipelineState], - Queue::[Queue], - QueryPool::[QueryPool], - RenderPass::[RenderPass getColorAttachments getBindings getBindingIndices], - Shader::[Shader], - Swapchain::[Swapchain], - Texture::[Texture initialize getRaw], - Sampler::[Sampler], - GeneralBarrier::[GeneralBarrier], - TextureBarrier::[TextureBarrier], - BufferBarrier::[BufferBarrier], - Device::[Device copyBuffersToTexture copyTextureToBuffers createBuffer createTexture getInstance setOptions getOptions], - DeviceManager::[addSurfaceEventListener isDetachDeviceThread getGFXName] - -skip_public_fields = *::[_.*] - -getter_setter = Device::[gfxAPI deviceName memoryStatus queue commandBuffer renderer vendor numDrawCalls numInstances numTris capabilities], - Shader::[name stages attributes blocks samplers], - Texture::[info viewInfo width height format size hash], - Queue::[type], - RenderPass::[hash], - DescriptorSet::[layout], - PipelineState::[shader primitive bindPoint inputState rasterizerState depthStencilState blendState renderPass], - InputAssembler::[vertexBuffers attributes indexBuffer indirectBuffer attributesHash drawInfo vertexCount firstVertex indexCount firstIndex vertexOffset instanceCount firstInstance], - CommandBuffer::[type queue numDrawCalls numInstances numTris], - Framebuffer::[renderPass colorTextures depthStencilTexture], - Buffer::[usage memUsage stride count size flags], - Sampler::[info], - Swapchain::[width height surfaceTransform colorTexture depthStencilTexture], - GFXObject::[objectType objectID typedID] - -rename_functions = DepthStencilState::[getHash=hash], - BlendState::[getHash=hash], - RasterizerState::[getHash=hash] - -rename_classes = - -# for all class names, should we remove something when registering in the target VM? -remove_prefix = - -# classes for which there will be no "parent" lookup -classes_have_no_parents = - -# base classes which will be skipped when their sub-classes found them. -base_classes_to_skip = RefCounted Clonable Object - -# classes that create no constructor -# Set is special and we will use a hand-written constructor -abstract_classes = Device - -persistent_classes = - -classes_owned_by_cpp = - -obtain_return_value = Device::[create.*] diff --git a/native/tools/tojs/gi.ini b/native/tools/tojs/gi.ini deleted file mode 100644 index dac91042702..00000000000 --- a/native/tools/tojs/gi.ini +++ /dev/null @@ -1,77 +0,0 @@ -[gi] -# the prefix to be added to the generated functions. You might or might not use this in your own -# templates -prefix = gi - -#cpp_headers = - -# create a target namespace (in javascript, this would create some code like the equiv. to `ns = ns || {}`) -# all classes will be embedded in that namespace -target_namespace = jsb - -android_headers = - -android_flags = -target armv7-none-linux-androideabi -D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS -DANDROID -D__ANDROID_API__=14 -gcc-toolchain %(gcc_toolchain_dir)s --sysroot=%(androidndkdir)s/platforms/android-14/arch-arm -idirafter %(androidndkdir)s/sources/android/support/include -idirafter %(androidndkdir)s/sysroot/usr/include -idirafter %(androidndkdir)s/sysroot/usr/include/arm-linux-androideabi -idirafter %(clangllvmdir)s/lib64/clang/5.0/include -I%(androidndkdir)s/sources/cxx-stl/llvm-libc++/include - -clang_headers = -clang_flags = -nostdinc -x c++ -std=c++17 -fsigned-char -U__SSE__ - -cocos_headers = -I%(cocosdir)s/cocos -I%(cocosdir)s/cocos/renderer -I%(cocosdir)s -I%(cocosdir)s/cocos/platform/android -I%(cocosdir)s/external/sources -I%(cocosdir)s/external/android/armeabi-v7a/include/v8 -I%(cocosdir)s/external/android/armeabi-v7a/include/uv -cocos_flags = -DANDROID -DCC_PLATFORM=3 -DCC_PLATFORM_IOS=1 -DCC_PLATFORM_MACOS=4 -DCC_PLATFORM_WINDOWS=2 -DCC_PLATFORM_ANDROID=3 - - -cxxgenerator_headers = - -# extra arguments for clang -extra_arguments = %(android_headers)s %(clang_headers)s %(cxxgenerator_headers)s %(cocos_headers)s %(android_flags)s %(clang_flags)s %(cocos_flags)s %(extra_flags)s - -# what headers to parse -headers = %(cocosdir)s/cocos/gi/light-probe/LightProbe.h - %(cocosdir)s/cocos/gi/light-probe/Delaunay.h - -hpp_headers = - -cpp_headers = - -# what classes to produce code for. You can use regular expressions here. When testing the regular -# expression, it will be enclosed in "^$", like this: "^Menu*$". -classes = Vertex CircumSphere Tetrahedron LightProbesData LightProbes LightProbeInfo - -# what should we skip? in the format ClassName::[function function] -# ClassName is a regular expression, but will be used like this: "^ClassName$" functions are also -# regular expressions, they will not be surrounded by "^$". If you want to skip a whole class, just -# add a single "*" as functions. See bellow for several examples. A special class name is "*", which -# will apply to all class names. This is a convenience wildcard to be able to skip similar named -# functions from all classes. -skip = - - -rename_functions = - -getter_setter = LightProbesData::[probes/getProbes/setProbes tetrahedrons/getTetrahedrons/setTetrahedrons], - LightProbes::[enabled/isEnabled/setEnabled reduceRinging/getReduceRinging/setReduceRinging showProbe/isShowProbe/setShowProbe showWireframe/isShowWireframe/setShowWireframe showConvex/isShowConvex/setShowConvex data/getData/setData], - LightProbeInfo::[enabled/isEnabled/setEnabled reduceRinging/getReduceRinging/setReduceRingingg showProbe/isShowProbe/setShowProbe showWireframe/isShowWireframe/setShowWireframe showConvex/isShowConvex/setShowConvex data/getData/setData] - -field = Vertex::[position normal coefficients], - CircumSphere::[center radiusSquared], - Tetrahedron::[invalid vertex0 vertex1 vertex2 vertex3 neighbours matrix offset sphere], - LightProbesData::[_probes _tetrahedrons], - LightProbeInfo::[_enabled _reduceRinging _showProbe _showWireframe _showConvex _data] - -skip_public_fields = - -rename_classes = - -# for all class names, should we remove something when registering in the target VM? -remove_prefix = - -# classes for which there will be no "parent" lookup -classes_have_no_parents = -# base classes which will be skipped when their sub-classes found them. -base_classes_to_skip = RefCounted - -# classes that create no constructor -# Set is special and we will use a hand-written constructor -abstract_classes = - -method_module_configs = diff --git a/native/tools/tojs/network.ini b/native/tools/tojs/network.ini deleted file mode 100644 index 74c726d9226..00000000000 --- a/native/tools/tojs/network.ini +++ /dev/null @@ -1,62 +0,0 @@ -[network] -# the prefix to be added to the generated functions. You might or might not use this in your own -# templates -prefix = network - -# create a target namespace (in javascript, this would create some code like the equiv. to `ns = ns || {}`) -# all classes will be embedded in that namespace -target_namespace = jsb - -macro_judgement = - -android_headers = - -android_flags = -target armv7-none-linux-androideabi -D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS -DANDROID -D__ANDROID_API__=14 -gcc-toolchain %(gcc_toolchain_dir)s --sysroot=%(androidndkdir)s/platforms/android-14/arch-arm -idirafter %(androidndkdir)s/sources/android/support/include -idirafter %(androidndkdir)s/sysroot/usr/include -idirafter %(androidndkdir)s/sysroot/usr/include/arm-linux-androideabi -idirafter %(clangllvmdir)s/lib64/clang/5.0/include -I%(androidndkdir)s/sources/cxx-stl/llvm-libc++/include - -clang_headers = -clang_flags = -nostdinc -x c++ -std=c++17 -fsigned-char -mfloat-abi=soft -U__SSE__ - -cocos_headers = -I%(cocosdir)s/cocos -I%(cocosdir)s/cocos/platform/android -I%(cocosdir)s/external/sources -cocos_flags = -DANDROID -DCC_PLATFORM=3 -DCC_PLATFORM_IOS=1 -DCC_PLATFORM_MACOS=4 -DCC_PLATFORM_WINDOWS=2 -DCC_PLATFORM_ANDROID=3 - - -cxxgenerator_headers = - -# extra arguments for clang -extra_arguments = %(android_headers)s %(clang_headers)s %(cxxgenerator_headers)s %(cocos_headers)s %(android_flags)s %(clang_flags)s %(cocos_flags)s %(extra_flags)s - -# what headers to parse -headers = %(cocosdir)s/cocos/network/Downloader.h - -# cpp_headers = network/js_network_manual.h - -# what classes to produce code for. You can use regular expressions here. When testing the regular -# expression, it will be enclosed in "^$", like this: "^Menu*$". -classes = Downloader DownloaderHints DownloadTask - -# what should we skip? in the format ClassName::[function function] -# ClassName is a regular expression, but will be used like this: "^ClassName$" functions are also -# regular expressions, they will not be surrounded by "^$". If you want to skip a whole class, just -# add a single "*" as functions. See bellow for several examples. A special class name is "*", which -# will apply to all class names. This is a convenience wildcard to be able to skip similar named -# functions from all classes. -skip = Downloader::[createDataTask createDownloadTask setOnError setOnSuccess] - -rename_functions = - -getter_setter = Downloader::[onProgress//setOnProgress] - -rename_classes = - -# for all class names, should we remove something when registering in the target VM? -remove_prefix = - -# classes for which there will be no "parent" lookup -classes_have_no_parents = Downloader - -# base classes which will be skipped when their sub-classes found them. -base_classes_to_skip = Clonable - -# classes that create no constructor -# Set is special and we will use a hand-written constructor -abstract_classes = diff --git a/native/tools/tojs/physics.ini b/native/tools/tojs/physics.ini deleted file mode 100644 index e66ca676a56..00000000000 --- a/native/tools/tojs/physics.ini +++ /dev/null @@ -1,66 +0,0 @@ -[physics] -# the prefix to be added to the generated functions. You might or might not use this in your own -# templates -prefix = physics - -# create a target namespace (in javascript, this would create some code like the equiv. to `ns = ns || {}`) -# all classes will be embedded in that namespace -target_namespace = jsb.physics - -macro_judgement = - -android_headers = - -android_flags = -target armv7-none-linux-androideabi -D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS -DANDROID -D__ANDROID_API__=14 -gcc-toolchain %(gcc_toolchain_dir)s --sysroot=%(androidndkdir)s/platforms/android-14/arch-arm -idirafter %(androidndkdir)s/sources/android/support/include -idirafter %(androidndkdir)s/sysroot/usr/include -idirafter %(androidndkdir)s/sysroot/usr/include/arm-linux-androideabi -idirafter %(clangllvmdir)s/lib64/clang/5.0/include -I%(androidndkdir)s/sources/cxx-stl/llvm-libc++/include - -clang_headers = -clang_flags = -nostdinc -x c++ -std=c++17 -fsigned-char -mfloat-abi=soft -U__SSE__ - -cocos_headers = -I%(cocosdir)s -I%(cocosdir)s/cocos -I%(cocosdir)s/cocos/platform/android -I%(cocosdir)s/external/sources -I%(cocosdir)s/external/android/armeabi-v7a/include/v8 -I%(cocosdir)s/cocos/renderer -cocos_flags = -DANDROID -DCC_PLATFORM=3 -DCC_PLATFORM_IOS=1 -DCC_PLATFORM_MACOS=4 -DCC_PLATFORM_WINDOWS=2 -DCC_PLATFORM_ANDROID=3 - - -cxxgenerator_headers = - -# extra arguments for clang -extra_arguments = %(android_headers)s %(clang_headers)s %(cxxgenerator_headers)s %(cocos_headers)s %(android_flags)s %(clang_flags)s %(cocos_flags)s %(extra_flags)s - -# what headers to parse -headers = %(cocosdir)s/cocos/physics/PhysicsSDK.h -hpp_headers = cocos/bindings/auto/jsb_gfx_auto.h cocos/bindings/auto/jsb_scene_auto.h - -replace_headers = - -# what classes to produce code for. You can use regular expressions here. When testing the regular -# expression, it will be enclosed in "^$", like this: "^Menu*$". -classes = PhysXBindings World RigidBody SphereShape BoxShape PlaneShape CapsuleShape TrimeshShape TerrainShape CylinderShape ConeShape RevoluteJoint DistanceJoint - -# what should we skip? in the format ClassName::[function function] -# ClassName is a regular expression, but will be used like this: "^ClassName$" functions are also -# regular expressions, they will not be surrounded by "^$". If you want to skip a whole class, just -# add a single "*" as functions. See bellow for several examples. A special class name is "*", which -# will apply to all class names. This is a convenience wildcard to be able to skip similar named -# functions from all classes. - -skip = - -field = - -rename_functions = - -rename_classes = - -# for all class names, should we remove something when registering in the target VM? -remove_prefix = - -# classes for which there will be no "parent" lookup -classes_have_no_parents = PhysXBindings World RigidBody SphereShape BoxShape PlaneShape CapsuleShape TrimeshShape TerrainShape CylinderShape ConeShape RevoluteJoint DistanceJoint - -# base classes which will be skipped when their sub-classes found them. -base_classes_to_skip = - -# classes that create no constructor -# Set is special and we will use a hand-written constructor -abstract_classes = - -classes_owned_by_cpp = diff --git a/native/tools/tojs/pipeline.ini b/native/tools/tojs/pipeline.ini deleted file mode 100644 index 1511e612bb0..00000000000 --- a/native/tools/tojs/pipeline.ini +++ /dev/null @@ -1,85 +0,0 @@ -[pipeline] -# the prefix to be added to the generated functions. You might or might not use this in your own -# templates -prefix = pipeline - -cpp_headers = cocos/renderer/gfx-base/GFXDevice.h - -# create a target namespace (in javascript, this would create some code like the equiv. to `ns = ns || {}`) -# all classes will be embedded in that namespace -target_namespace = nr - -android_headers = - -android_flags = -target armv7-none-linux-androideabi -D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS -DANDROID -D__ANDROID_API__=14 -gcc-toolchain %(gcc_toolchain_dir)s --sysroot=%(androidndkdir)s/platforms/android-14/arch-arm -idirafter %(androidndkdir)s/sources/android/support/include -idirafter %(androidndkdir)s/sysroot/usr/include -idirafter %(androidndkdir)s/sysroot/usr/include/arm-linux-androideabi -idirafter %(clangllvmdir)s/lib64/clang/5.0/include -I%(androidndkdir)s/sources/cxx-stl/llvm-libc++/include - -clang_headers = -clang_flags = -nostdinc -x c++ -std=c++17 -fsigned-char -mfloat-abi=soft -U__SSE__ - -cocos_headers = -I%(cocosdir)s/cocos -I%(cocosdir)s/cocos/renderer -I%(cocosdir)s -I%(cocosdir)s/cocos/platform/android -I%(cocosdir)s/external/sources -I%(cocosdir)s/external/android/armeabi-v7a/include/v8 -I%(cocosdir)s/external/android/armeabi-v7a/include/uv -cocos_flags = -DANDROID -DCC_PLATFORM=3 -DCC_PLATFORM_IOS=1 -DCC_PLATFORM_MACOS=4 -DCC_PLATFORM_WINDOWS=2 -DCC_PLATFORM_ANDROID=3 -DCC_USE_GEOMETRY_RENDERER=1 -DCC_USE_DEBUG_RENDERER=1 - - -cxxgenerator_headers = - -# extra arguments for clang -extra_arguments = %(android_headers)s %(clang_headers)s %(cxxgenerator_headers)s %(cocos_headers)s %(android_flags)s %(clang_flags)s %(cocos_flags)s %(extra_flags)s - -# what headers to parse -headers = %(cocosdir)s/cocos/renderer/pipeline/forward/ForwardPipeline.h %(cocosdir)s/cocos/renderer/pipeline/forward/ForwardFlow.h %(cocosdir)s/cocos/renderer/pipeline/forward/ForwardStage.h %(cocosdir)s/cocos/renderer/pipeline/shadow/ShadowFlow.h %(cocosdir)s/cocos/renderer/pipeline/shadow/ShadowStage.h %(cocosdir)s/cocos/renderer/pipeline/shadow/CSMLayers.h %(cocosdir)s/cocos/renderer/pipeline/RenderPipeline.h %(cocosdir)s/cocos/renderer/pipeline/RenderFlow.h %(cocosdir)s/cocos/renderer/pipeline/RenderStage.h %(cocosdir)s/cocos/renderer/pipeline/Define.h %(cocosdir)s/cocos/renderer/pipeline/GlobalDescriptorSetManager.h %(cocosdir)s/cocos/renderer/pipeline/InstancedBuffer.h %(cocosdir)s/cocos/renderer/pipeline/deferred/DeferredPipeline.h %(cocosdir)s/cocos/renderer/pipeline/deferred/MainFlow.h %(cocosdir)s/cocos/renderer/pipeline/deferred/GbufferStage.h %(cocosdir)s/cocos/renderer/pipeline/deferred/LightingStage.h %(cocosdir)s/cocos/renderer/pipeline/deferred/BloomStage.h %(cocosdir)s/cocos/renderer/pipeline/deferred/PostProcessStage.h %(cocosdir)s/cocos/renderer/pipeline/PipelineSceneData.h %(cocosdir)s/cocos/renderer/pipeline/BatchedBuffer.h %(cocosdir)s/cocos/renderer/pipeline/GeometryRenderer.h - -hpp_headers = cocos/bindings/auto/jsb_gfx_auto.h cocos/bindings/auto/jsb_scene_auto.h cocos/bindings/auto/jsb_assets_auto.h - -# what classes to produce code for. You can use regular expressions here. When testing the regular -# expression, it will be enclosed in "^$", like this: "^Menu*$". -classes = RenderPipeline GlobalDSManager ForwardPipeline ForwardFlow ForwardStage ShadowFlow ShadowStage RenderPipelineInfo RenderFlowInfo RenderStageInfo RenderQueueDesc RenderFlow RenderStage InstancedBuffer BatchedBuffer DeferredPipeline GbufferStage MainFlow LightingStage BloomStage PostProcessStage SamplerLib PipelineSceneData BatchedItem RenderObject GeometryRenderer CSMLayers - -# what should we skip? in the format ClassName::[function function] -# ClassName is a regular expression, but will be used like this: "^ClassName$" functions are also -# regular expressions, they will not be surrounded by "^$". If you want to skip a whole class, just -# add a single "*" as functions. See bellow for several examples. A special class name is "*", which -# will apply to all class names. This is a convenience wildcard to be able to skip similar named -# functions from all classes. -skip = ForwardPipeline::[getOrCreateRenderPass getLightsUBO getValidLights getLightBuffers getLightIndexOffsets getLightIndices getCommandBuffers], - RenderPipeline::[getFlows getTag getGlobalBindings getMacros getDefaultTexture getPipelineUBO getCommandBuffers getFrameGraph], - RenderFlow::[render destroy getPriority getName], - RenderStage::[render destroy getPriority getName], - ForwardFlow::[initialize activate destroy render], - ForwardStage::[initialize activate destroy render], - ShadowFlow::[initialize activate destroy render], - ShadowStage::[initialize activate destroy render clearFramebuffer], - InstancedBuffer::[merge uploadBuffers clear getInstances getPass hasPendingModels dynamicOffsets], - DeferredPipeline::[getOrCreateRenderPass getLightsUBO getValidLights getLightBuffers getLightIndexOffsets getLightIndices getQuadIA setDepth getDepth getRenderArea createQuadInputAssembler destroyQuadInputAssembler getDeferredRenderData updateQuadVertexData genQuadVertexData getIAByRenderArea getFrameGraph getIAByRenderArea], - MainFlow::[initialize activate destroy render getFrameBuffer createRenderPass createRenderTargets], - GbufferStage::[initialize activate destroy render], - LightingStage::[initialize activate destroy render initLightingBuffer gatherLights getReflectRenderQueue getSsprTexWidth getSsprTexHeight addDenoiseIndex getRendElement getReflectionComp getMatViewProj getSsprSampler], - BloomStage::[initialize activate destroy render], - PostProcessStage::[initialize activate destroy render getUIPhase getUIPhase], - GlobalDSManager::[activate destroy], - GeometryRenderer::[activate render destroy], - PipelineSceneData::[(g|s)etRenderObjects (g|s)etShadowObjects getShadowFramebufferMap getCSMLayers (g|s)etCSMSupported], - CSMLayers::[update (g|s)etCastShadowObjects addCastShadowObject clearCastShadowObjects (g|s)etLayerObjects addLayerObject clearLayerObjects getLayers getSpecialLayer] - -rename_functions = - -getter_setter= RenderPipeline::[globalDSManager descriptorSet descriptorSetLayout constantMacros clusterEnabled bloomEnabled pipelineSceneData geometryRenderer profiler shadingScale], - PipelineSceneData::[isHDR/isHDR/setHDR shadingScale fog ambient skybox shadows/getShadows lightProbes/getLightProbes], - BloomStage::[threshold intensity iterations] - -rename_classes = - -# for all class names, should we remove something when registering in the target VM? -remove_prefix = - -# classes for which there will be no "parent" lookup -classes_have_no_parents = -# base classes which will be skipped when their sub-classes found them. -base_classes_to_skip = Clonable Object RefCounted - -# classes that create no constructor -# Set is special and we will use a hand-written constructor -abstract_classes = RenderStage RenderFlow RenderPipeline - -class_module_configs = GeometryRenderer::[CC_USE_GEOMETRY_RENDERER] -method_module_configs = RenderPipeline::[getGeometryRenderer/CC_USE_GEOMETRY_RENDERER] - diff --git a/native/tools/tojs/render.ini b/native/tools/tojs/render.ini deleted file mode 100644 index f772cfe3d07..00000000000 --- a/native/tools/tojs/render.ini +++ /dev/null @@ -1,84 +0,0 @@ -[render] -# the prefix to be added to the generated functions. You might or might not use this in your own -# templates -prefix = render - -# create a target namespace (in javascript, this would create some code like the equiv. to `ns = ns || {}`) -# all classes will be embedded in that namespace -target_namespace = render - -macro_judgement = - -android_headers = - -android_flags = -target armv7-none-linux-androideabi -D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS -DANDROID -D__ANDROID_API__=14 -gcc-toolchain %(gcc_toolchain_dir)s --sysroot=%(androidndkdir)s/platforms/android-14/arch-arm -idirafter %(androidndkdir)s/sources/android/support/include -idirafter %(androidndkdir)s/sysroot/usr/include -idirafter %(androidndkdir)s/sysroot/usr/include/arm-linux-androideabi -idirafter %(clangllvmdir)s/lib64/clang/5.0/include -I%(androidndkdir)s/sources/cxx-stl/llvm-libc++/include - -clang_headers = -clang_flags = -nostdinc -x c++ -std=c++17 -fsigned-char -mfloat-abi=soft -U__SSE__ - -cocos_headers = -I%(cocosdir)s -I%(cocosdir)s/cocos -I%(cocosdir)s/cocos/renderer -I%(cocosdir)s/cocos/platform/android -I%(cocosdir)s/external/sources -cocos_flags = -DANDROID -DCC_PLATFORM=3 -DCC_PLATFORM_IOS=1 -DCC_PLATFORM_MACOS=4 -DCC_PLATFORM_WINDOWS=2 -DCC_PLATFORM_ANDROID=3 - - -cxxgenerator_headers = - -# extra arguments for clang -extra_arguments = %(android_headers)s %(clang_headers)s %(cxxgenerator_headers)s %(cocos_headers)s %(android_flags)s %(clang_flags)s %(cocos_flags)s %(extra_flags)s - -# what headers to parse -headers = %(cocosdir)s/cocos/renderer/pipeline/custom/RenderInterfaceTypes.h - -hpp_headers = - -cpp_headers = cocos/bindings/auto/jsb_gfx_auto.h cocos/bindings/auto/jsb_scene_auto.h cocos/renderer/pipeline/GeometryRenderer.h cocos/renderer/pipeline/GlobalDescriptorSetManager.h cocos/renderer/pipeline/custom/LayoutGraphJsb.h cocos/renderer/pipeline/custom/RenderCommonJsb.h cocos/renderer/pipeline/custom/RenderGraphJsb.h - -replace_headers = - -# what classes to produce code for. You can use regular expressions here. When testing the regular -# expression, it will be enclosed in "^$", like this: "^Menu.*$". - -classes = PipelineRuntime Setter RasterQueueBuilder RasterPassBuilder ComputeQueueBuilder ComputePassBuilder MovePassBuilder CopyPassBuilder SceneVisitor SceneTask SceneTransversal LayoutGraphBuilder Pipeline PipelineBuilder Factory - -classes_need_extend = - -# what should we skip? in the format ClassName::[function function] -# ClassName is a regular expression, but will be used like this: "^ClassName$" functions are also -# regular expressions, they will not be surrounded by "^$". If you want to skip a whole class, just -# add a single "*" as functions. See bellow for several examples. A special class name is "*", which -# will apply to all class names. This is a convenience wildcard to be able to skip similar named -# functions from all classes. - -skip = PipelineRuntime::[getMacros setValue isOcclusionQueryEnabled resetRenderQueue isRenderQueueReset], - SceneVisitor::[bindDescriptorSet updateBuffer] - -skip_public_fields = - -getter_setter = PipelineRuntime::[device globalDSManager descriptorSetLayout descriptorSet commandBuffers pipelineSceneData constantMacros profiler geometryRenderer shadingScale], - SceneVisitor::[pipelineSceneData], - SceneTask::[taskType], - Pipeline::[layoutGraphBuilder] - -rename_functions = - -rename_classes = - -# for all class names, should we remove something when registering in the target VM? -remove_prefix = - -# classes for which there will be no "parent" lookup -classes_have_no_parents = - -# base classes which will be skipped when their sub-classes found them. -base_classes_to_skip = - -# classes that create no constructor -# Set is special and we will use a hand-written constructor -abstract_classes = PipelineRuntime Setter RasterQueueBuilder RasterPassBuilder ComputeQueueBuilder ComputePassBuilder MovePassBuilder CopyPassBuilder SceneVisitor SceneTask SceneTransversal LayoutGraphBuilder Pipeline PipelineBuilder - -persistent_classes = - -classes_owned_by_cpp = - -obtain_return_value = - -method_module_configs = PipelineRuntime::[getGeometryRenderer/CC_USE_GEOMETRY_RENDERER] diff --git a/native/tools/tojs/scene.ini b/native/tools/tojs/scene.ini deleted file mode 100644 index 6b5b4affbee..00000000000 --- a/native/tools/tojs/scene.ini +++ /dev/null @@ -1,150 +0,0 @@ -[scene] -# the prefix to be added to the generated functions. You might or might not use this in your own -# templates -prefix = scene - -#cpp_headers = - -# create a target namespace (in javascript, this would create some code like the equiv. to `ns = ns || {}`) -# all classes will be embedded in that namespace -target_namespace = jsb - -android_headers = - -android_flags = -target armv7-none-linux-androideabi -D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS -DANDROID -D__ANDROID_API__=14 -gcc-toolchain %(gcc_toolchain_dir)s --sysroot=%(androidndkdir)s/platforms/android-14/arch-arm -idirafter %(androidndkdir)s/sources/android/support/include -idirafter %(androidndkdir)s/sysroot/usr/include -idirafter %(androidndkdir)s/sysroot/usr/include/arm-linux-androideabi -idirafter %(clangllvmdir)s/lib64/clang/5.0/include -I%(androidndkdir)s/sources/cxx-stl/llvm-libc++/include - -clang_headers = -clang_flags = -nostdinc -x c++ -std=c++17 -fsigned-char -U__SSE__ - -cocos_headers = -I%(cocosdir)s/cocos -I%(cocosdir)s/cocos/renderer -I%(cocosdir)s -I%(cocosdir)s/cocos/platform/android -I%(cocosdir)s/external/sources -I%(cocosdir)s/external/android/armeabi-v7a/include/v8 -I%(cocosdir)s/external/android/armeabi-v7a/include/uv -cocos_flags = -DANDROID -DCC_PLATFORM=3 -DCC_PLATFORM_IOS=1 -DCC_PLATFORM_MACOS=4 -DCC_PLATFORM_WINDOWS=2 -DCC_PLATFORM_ANDROID=3 - - -cxxgenerator_headers = - -# extra arguments for clang -extra_arguments = %(android_headers)s %(clang_headers)s %(cxxgenerator_headers)s %(cocos_headers)s %(android_flags)s %(clang_flags)s %(cocos_flags)s %(extra_flags)s - -# what headers to parse -headers = %(cocosdir)s/cocos/core/data/Object.h - %(cocosdir)s/cocos/core/scene-graph/Node.h - %(cocosdir)s/cocos/core/scene-graph/Scene.h - %(cocosdir)s/cocos/core/scene-graph/SceneGlobals.h - %(cocosdir)s/cocos/scene/Light.h - %(cocosdir)s/cocos/scene/Fog.h - %(cocosdir)s/cocos/scene/Shadow.h - %(cocosdir)s/cocos/scene/Skybox.h - %(cocosdir)s/cocos/scene/DirectionalLight.h - %(cocosdir)s/cocos/scene/SpotLight.h - %(cocosdir)s/cocos/scene/SphereLight.h - %(cocosdir)s/cocos/scene/Model.h - %(cocosdir)s/cocos/scene/SubModel.h - %(cocosdir)s/cocos/scene/Pass.h - %(cocosdir)s/cocos/scene/RenderScene.h - %(cocosdir)s/cocos/scene/RenderWindow.h - %(cocosdir)s/cocos/scene/Camera.h - %(cocosdir)s/cocos/scene/Define.h - %(cocosdir)s/cocos/scene/Ambient.h - %(cocosdir)s/cocos/renderer/core/PassInstance.h - %(cocosdir)s/cocos/renderer/core/MaterialInstance.h - %(cocosdir)s/cocos/3d/models/MorphModel.h - %(cocosdir)s/cocos/3d/models/SkinningModel.h - %(cocosdir)s/cocos/3d/models/BakedSkinningModel.h - %(cocosdir)s/cocos/core/Root.h - %(cocosdir)s/cocos/renderer/core/ProgramLib.h - %(cocosdir)s/cocos/scene/Octree.h - %(cocosdir)s/cocos/platform/interfaces/modules/ISystemWindowManager.h - -hpp_headers = cocos/bindings/auto/jsb_gfx_auto.h cocos/bindings/auto/jsb_geometry_auto.h cocos/bindings/auto/jsb_assets_auto.h cocos/bindings/auto/jsb_gi_auto.h - -cpp_headers = cocos/bindings/auto/jsb_render_auto.h cocos/bindings/auto/jsb_pipeline_auto.h cocos/bindings/auto/jsb_cocos_auto.h cocos/bindings/auto/jsb_2d_auto.h - -# what classes to produce code for. You can use regular expressions here. When testing the regular -# expression, it will be enclosed in "^$", like this: "^Menu*$". -classes = Light DirectionalLight SpotLight SphereLight Model SubModel Pass RenderScene Camera RenderWindow Fog Skybox Shadows PipelineSharedSceneData Ambient Root SkinningModel BakedSkinningModel IRenderWindowInfo AmbientInfo IRenderSceneInfo ShadowsInfo Node SkyboxInfo FogInfo ICameraInfo IMacroPatch IProgramInfo IDefineRecord MaterialInstance IMaterialInstanceInfo PassInstance ProgramLib Scene SceneGlobals InstancedAttributeBlock PassDynamicsValue MorphModel Octree OctreeInfo DebugViewConfig ISystemWindowInfo - -# what should we skip? in the format ClassName::[function function] -# ClassName is a regular expression, but will be used like this: "^ClassName$" functions are also -# regular expressions, they will not be surrounded by "^$". If you want to skip a whole class, just -# add a single "*" as functions. See bellow for several examples. A special class name is "*", which -# will apply to all class names. This is a convenience wildcard to be able to skip similar named -# functions from all classes. -skip = Pass::[getBlocks initPassFromTarget], - AABB::[getBoundary aabbAabb aabbFrustum aabbPlan merge transform transformExtentM4 setCenter getCenter isValid setValid setHalfExtents getHalfExtents set fromPoints], - SubModel::[getInstancedAttributeBlock (g|s)etInstancedWorldMatrixIndex (g|s)etInstancedAttributeIndex updateInstancedAttributes updateInstancedWorldMatrix], - Model::[getEventProcessor getOctreeNode setOctreeNode updateOctree], - SkinningModel::[uploadJointData], - Frustum::[update type planes], - Plane::[clone copy normalize getSpotAngle fromNormalAndPoint fromPoints set], - RenderScene::[updateBatches addBatch removeBatch removeBatches getBatches], - BakedSkinningModel::[updateInstancedJointTextureInfo updateModelBounds], - AmbientInfo::[activate], - Node::[setLayerPtr setUIPropsTransformDirtyCallback rotate$ setUserData getUserData getChildren rotateForJS setScale$ setRotation$ setRotationFromEuler$ setPosition$ isActiveInHierarchy setActiveInHierarchy setActiveInHierarchyPtr setRTS$ findComponent findChildComponent findChildComponents addComponent removeComponent getComponent getComponents getComponentInChildren getComponentsInChildren checkMultipleComp getEventProcessor dispatchEvent hasEventListener getUIProps getPosition getRotation getScale getEulerAngles getForward getUp getRight getWorldPosition getWorldRotation getWorldScale getWorldMatrix getWorldRS getWorldRT inverseTransformPoint ^on$ ^off$], - Camera::[screenPointToRay screenToWorld worldToScreen worldMatrixToScreen syncCameraEditor getMatView getMatProj getMatProjInv getMatViewProj getMatViewProjInv], - NodeUiProperties::[getUITransformComp setUITransformComp getUIComp setUIComp], # not impl - ProgramLib::[destroyInstance] - - -rename_functions = Root::[initialize=_initialize], - Node::[resetChangedFlags=resetHasChangedFlags _parent=_parentInternal updateSiblingIndex=_updateSiblingIndex onPreDestroyBase=_onPreDestroyBase onPreDestroy=_onPreDestroy], - FogInfo::[_isEnabled=_enabled], - ProgramLib::[registerEffect=register], - Model::[initLocalDescriptors=_initLocalDescriptors initLocalSHDescriptors=_initLocalSHDescriptors updateLocalDescriptors=_updateLocalDescriptors updateLocalSHDescriptors=_updateLocalSHDescriptors], - Scene::[load=_load activate=_activate], - Pass::[initPassFromTarget=_initPassFromTarget updatePassHash=_updatePassHash] - -getter_setter = Root::[device:_device mainWindow curWindow tempWindow windows scenes cumulativeTime frameTime frameCount fps fixedFPS useDeferredPipeline/isUsingDeferredPipeline usesCustomPipeline/usesCustomPipeline pipeline customPipeline], - RenderWindow::[width height framebuffer cameras swapchain], - Pass::[root device shaderInfo localSetLayout program properties defines passIndex propertyIndex dynamics rootBufferDirty/isRootBufferDirty _rootBufferDirty/isRootBufferDirty/_setRootBufferDirty priority primitive stage phase rasterizerState depthStencilState blendState dynamicStates batchingScheme descriptorSet hash/getHash pipelineLayout], - PassInstance::[parent], - Node::[uuid angle matrix hasChangedFlags/getChangedFlags/setChangedFlags _persistNode/isPersistNode/setPersistNode mobility/getMobility/setMobility], - Ambient::[skyColor skyIllum groundAlbedo enabled/isEnabled mipmapCount], - Light::[baked/isBaked/setBaked color useColorTemperature/isUseColorTemperature/setUseColorTemperature colorTemperature colorTemperatureRGB node type name scene], - DirectionalLight::[direction illuminance illuminanceHDR illuminanceLDR shadowEnabled/isShadowEnabled shadowPcf shadowBias shadowNormalBias shadowSaturation shadowDistance shadowInvisibleOcclusionRange csmLevel/getCSMLevel/setCSMLevel csmNeedUpdate/isCSMNeedUpdate/setCSMNeedUpdate csmLayerLambda/getCSMLayerLambda/setCSMLayerLambda csmOptimizationMode/getCSMOptimizationMode/setCSMOptimizationMode shadowFixedArea/isShadowFixedArea shadowNear shadowFar shadowOrthoSize], - SpotLight::[position size range luminance luminanceHDR luminanceLDR direction spotAngle angle aabb/getAABB frustum shadowEnabled/isShadowEnabled shadowPcf shadowBias shadowNormalBias], - SphereLight::[position size range luminance luminanceHDR luminanceLDR aabb/getAABB], - Camera::[iso isoValue ec exposure shutter shutterValue apertureValue width height scene name window systemWindowId forward aperture position projectionType/getProjectionType/setProjectionType fovAxis fov nearClip farClip viewport orthoHeight clearColor clearDepth clearFlag clearStencil enabled/isEnabled/setEnabled exposure frustum isWindowSize/isWindowSize/setWindowSize priority screenScale visibility node surfaceTransform geometryRenderer], - Camera::[iso isoValue ec exposure shutter shutterValue apertureValue width height scene name window forward aperture position projectionType/getProjectionType/setProjectionType fovAxis fov nearClip farClip viewport orthoHeight clearColor clearDepth clearFlag clearStencil enabled/isEnabled/setEnabled exposure frustum isWindowSize/isWindowSize/setWindowSize priority screenScale visibility node surfaceTransform geometryRenderer cameraType trackingType], - RenderScene::[name cameras? mainLight? sphereLights? spotLights? models], - Skybox::[model enabled/isEnabled/setEnabled useHDR/isUseHDR/setUseHDR useIBL/isUseIBL/setUseIBL useDiffuseMap/isUseDiffuseMap/setUseDiffuseMap isRGBE/isRGBE/setRGBE envmap diffuseMap], - Fog::[enabled/isEnabled/setEnabled accurate/isAccurate/setAccurate fogColor type fogDensity fogStart fogEnd fogAtten fogTop fogRange fogRange colorArray], - Model::[scene _subModels:subModels/getSubModels inited/isInited _localDataUpdated/isLocalDataUpdated/setLocalDataUpdated _worldBounds:worldBounds/getWorldBounds/setWorldBounds _modelBounds:modelBounds/getModelBounds/setModelBounds worldBoundBuffer localBuffer updateStamp receiveShadow/isReceiveShadow/setReceiveShadow castShadow/isCastShadow/setCastShadow shadowBias shadowNormalBias node transform visFlags enabled/isEnabled/setEnabled type isDynamicBatching/isDynamicBatching/setDynamicBatching priority], - SubModel::[passes shaders subMesh priority inputAssembler descriptorSet patches planarInstanceShader planarShader], - ShadowsInfo::[enabled/isEnabled/setEnabled type planeDirection planeHeight shadowColor maxReceived shadowMapSize], - Shadows::[enabled/isEnabled/setEnabled type normal distance shadowColor maxReceived size shadowMapDirty/isShadowMapDirty/setShadowMapDirty matLight material instancingMaterial], - AmbientInfo::[skyColor skyIllum groundAlbedo _skyColor/getSkyColorHDR?/setSkyColorHDR _skyIllum/getSkyIllumHDR?/setSkyIllumHDR _groundAlbedo/getGroundAlbedoHDR?/setGroundAlbedoHDR skyColorLDR groundAlbedoLDR skyIllumLDR skyLightingColor groundLightingColor groundAlbedoHDR skyColorHDR skyIllumHDR], - FogInfo::[type fogColor enabled/isEnabled/setEnabled accurate/isAccurate/setAccurate fogDensity fogStart fogEnd fogAtten fogTop fogRange], - SkyboxInfo::[_envmap/getEnvmapForJS/setEnvmapForJS applyDiffuseMap/isApplyDiffuseMap/setApplyDiffuseMap enabled/isEnabled/setEnabled useIBL/isUseIBL/setUseIBL useHDR/isUseHDR/setUseHDR envmap envLightingType diffuseMap], - OctreeInfo::[enabled/isEnabled/setEnabled minPos maxPos depth], - Scene::[autoReleaseAssets/isAutoReleaseAssets/setAutoReleaseAssets] - - -field = Ambient::[SUN_ILLUM SKY_ILLUM], - AmbientInfo::[_skyColorHDR _skyIllumHDR _groundAlbedoHDR _skyColorLDR _skyIllumLDR _groundAlbedoLDR], - Camera::[SKYBOX_FLAG], - Shadows::[MAX_FAR COEFFICIENT_OF_EXPANSION], - ShadowsInfo::[_enabled _type _normal _distance _shadowColor _maxReceived _size], - FogInfo::[_type _fogColor _isEnabled _fogDensity _fogStart _fogEnd _fogAtten _fogTop _fogRange _accurate], - SkyboxInfo::[_envLightingType _envmapHDR _envmapLDR _diffuseMapHDR _diffuseMapLDR _enabled _useHDR _editableMaterial _reflectionHDR _reflectionLDR _rotationAngle], - OctreeInfo::[_enabled _minPos _maxPos _depth], - Node::[_siblingIndex _parent _active$ _id _mobility] - - -skip_public_fields = IMaterialInstanceInfo::[owner], - IDefineRecord::[map] - -rename_classes = InstancedAttributeBlock::IInstancedAttributeBlock - -# for all class names, should we remove something when registering in the target VM? -remove_prefix = - -# classes for which there will be no "parent" lookup -classes_have_no_parents = -# base classes which will be skipped when their sub-classes found them. -base_classes_to_skip = RefCounted - -# classes that create no constructor -# Set is special and we will use a hand-written constructor -abstract_classes = EventListener ProgramLib - -method_module_configs = Camera::[getGeometryRenderer/CC_USE_GEOMETRY_RENDERER] diff --git a/native/tools/tojs/spine.ini b/native/tools/tojs/spine.ini deleted file mode 100644 index 1875f6f475a..00000000000 --- a/native/tools/tojs/spine.ini +++ /dev/null @@ -1,91 +0,0 @@ -[spine] -prefix = spine - -target_namespace = spine - -android_headers = - -macro_judgement = - -android_flags = -target armv7-none-linux-androideabi -D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS -DANDROID -D__ANDROID_API__=14 -gcc-toolchain %(gcc_toolchain_dir)s --sysroot=%(androidndkdir)s/platforms/android-14/arch-arm -idirafter %(androidndkdir)s/sources/android/support/include -idirafter %(androidndkdir)s/sysroot/usr/include -idirafter %(androidndkdir)s/sysroot/usr/include/arm-linux-androideabi -idirafter %(clangllvmdir)s/lib64/clang/5.0/include -I%(androidndkdir)s/sources/cxx-stl/llvm-libc++/include -I%(cocosdir)s/external/android/arm64-v8a/include/v8 - -clang_headers = -clang_flags = -nostdinc -x c++ -std=c++17 -fsigned-char -mfloat-abi=soft -U__SSE__ - -cpp_headers = cocos/bindings/auto/jsb_2d_auto.h cocos/bindings/auto/jsb_assets_auto.h -cocos_headers = -I%(cocosdir)s/cocos -I%(cocosdir)s/cocos/bindings/jswrapper -I%(cocosdir)s/cocos/platform/android -I%(cocosdir)s/external/sources -I%(cocosdir)s/cocos/editor-support -cocos_flags = -DANDROID -DCC_PLATFORM=3 -DCC_PLATFORM_IOS=1 -DCC_PLATFORM_MACOS=4 -DCC_PLATFORM_WINDOWS=2 -DCC_PLATFORM_ANDROID=3 - -cxxgenerator_headers = - -# extra arguments for clang -extra_arguments = %(android_headers)s %(clang_headers)s %(cxxgenerator_headers)s %(cocos_headers)s %(android_flags)s %(clang_flags)s %(cocos_flags)s %(extra_flags)s - -headers = %(cocosdir)s/cocos/editor-support/spine-creator-support/spine-cocos2dx.h - -replace_headers = spine-cocos2dx.h::spine-creator-support/spine-cocos2dx.h - -classes = SkeletonRenderer SkeletonAnimation VertexEffectDelegate Animation TrackEntry AnimationState AnimationStateData Attachment AttachmentTimeline BoundingBoxAttachment Bone BoneData ClippingAttachment Color ColorTimeline CurveTimeline DeformTimeline DrawOrderTimeline Event EventData EventTimeline IkConstraint IkConstraintData IkConstraintTimeline MeshAttachment Polygon PathAttachment PathConstraint PathConstraintData PathConstraintMixTimeline PathConstraintPositionTimeline PathConstraintSpacingTimeline PointAttachment RegionAttachment RotateTimeline ScaleTimeline ShearTimeline Skeleton Slot Skin SkeletonBounds SkeletonData SlotData Timeline TransformConstraint TransformConstraintData TransformConstraintTimeline TranslateTimeline TwoColorTimeline VertexAttachment VertexEffect JitterVertexEffect SwirlVertexEffect SkeletonDataMgr SkeletonCacheAnimation SkeletonCacheMgr ConstraintData - -classes_need_extend = - -skip = SkeletonRenderer::[create initWithJsonFile initWithBinaryFile createWithData initWithData createWithSkeleton createWithFile requestDrawInfo requestMaterial], - SkeletonAnimation::[createWithData onTrackEntryEvent onAnimationStateEvent], - Animation::[apply], - TrackEntry::[setListener], - AnimationState::[apply setListener], - Attachment::[getRTTI], - AttachmentTimeline::[apply getRTTI], - BoundingBoxAttachment::[getRTTI], - Bone::[worldToLocal localToWorld getRTTI], - ClippingAttachment::[getRTTI], - Color::[set add], - ColorTimeline::[apply getRTTI], - CurveTimeline::[apply getRTTI], - DeformTimeline::[apply setFrame getVertices getRTTI], - DrawOrderTimeline::[apply setFrame getDrawOrders getRTTI], - EventTimeline::[apply getRTTI], - IkConstraint::[apply getRTTI], - IkConstraintTimeline::[apply getRTTI], - MeshAttachment::[getRTTI], - PathAttachment::[getRTTI], - PathConstraint::[getRTTI], - PathConstraintMixTimeline::[apply getRTTI], - PathConstraintPositionTimeline::[apply getRTTI], - PathConstraintSpacingTimeline::[apply getRTTI], - PointAttachment::[computeWorldPosition getRTTI computeWorldRotation], - RegionAttachment::[computeWorldVertices getRTTI], - RotateTimeline::[apply getRTTI], - ScaleTimeline::[apply getRTTI], - ShearTimeline::[apply getRTTI], - Skeleton::[getBounds], - Skin::[getAttachments findAttachmentsForSlot findNamesForSlot], - SkeletonBounds::[update aabbIntersectsSkeleton], - Timeline::[apply getRTTI], - TransformConstraint::[getRTTI], - TransformConstraintTimeline::[apply getRTTI], - TranslateTimeline::[apply getRTTI], - TwoColorTimeline::[apply getRTTI], - VertexEffect::[begin transform end], - JitterVertexEffect::[begin transform end], - SwirlVertexEffect::[begin transform end], - VertexAttachment::[computeWorldVertices getBones getRTTI], - SkeletonDataMgr::[destroyInstance hasSkeletonData setSkeletonData retainByUUID releaseByUUID], - SkeletonCacheAnimation::[render requestDrawInfo requestMaterial] - -field = Color::[r g b a] - -remove_prefix = - -classes_have_no_parents = - -base_classes_to_skip = RefCounted IMiddleware SpineObject HasRendererObject Updatable Constraint - -abstract_classes = Animation TrackEntry AnimationState AnimationStateData Attachment AttachmentTimeline BoundingBoxAttachment Bone BoneData ClippingAttachment Color ColorTimeline CurveTimeline DeformTimeline DrawOrderTimeline Event EventData EventTimeline IkConstraint IkConstraintData IkConstraintTimeline MeshAttachment Polygon PathAttachment PathConstraint PathConstraintData PathConstraintMixTimeline PathConstraintPositionTimeline PathConstraintSpacingTimeline PointAttachment RegionAttachment RotateTimeline ScaleTimeline ShearTimeline Skeleton Slot Skin SlotData SkeletonBounds SkeletonData Timeline TransformConstraint TransformConstraintData TransformConstraintTimeline TranslateTimeline TwoColorTimeline VertexAttachment VertexEffect JitterVertexEffect SwirlVertexEffect ConstraintData - -rename_functions = SkeletonAnimation::[createWithFile=create setCompleteListener=setCompleteListenerNative setTrackCompleteListener=setTrackCompleteListenerNative], - SkeletonRenderer::[createWithFile=create] - -rename_classes = - -classes_owned_by_cpp = Animation TrackEntry AnimationState AnimationStateData Attachment AttachmentTimeline BoundingBoxAttachment Bone BoneData ClippingAttachment Color ColorTimeline CurveTimeline DeformTimeline DrawOrderTimeline Event EventData EventTimeline IkConstraint IkConstraintData IkConstraintTimeline MeshAttachment Polygon PathAttachment PathConstraint PathConstraintData PathConstraintMixTimeline PathConstraintPositionTimeline PathConstraintSpacingTimeline PointAttachment RegionAttachment RotateTimeline ScaleTimeline ShearTimeline Skeleton Slot Skin SlotData SkeletonBounds SkeletonData Timeline TransformConstraint TransformConstraintData TransformConstraintTimeline TranslateTimeline TwoColorTimeline VertexAttachment VertexEffect JitterVertexEffect SwirlVertexEffect diff --git a/native/tools/tojs/video.ini b/native/tools/tojs/video.ini deleted file mode 100644 index 0155f82ac7e..00000000000 --- a/native/tools/tojs/video.ini +++ /dev/null @@ -1,60 +0,0 @@ -[video] -# the prefix to be added to the generated functions. You might or might not use this in your own -# templates -prefix = video - -# create a target namespace (in javascript, this would create some code like the equiv. to `ns = ns || {}`) -# all classes will be embedded in that namespace -target_namespace = jsb - -macro_judgement = - -android_headers = - -android_flags = -target armv7-none-linux-androideabi -D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS -DANDROID -D__ANDROID_API__=14 -gcc-toolchain %(gcc_toolchain_dir)s --sysroot=%(androidndkdir)s/platforms/android-14/arch-arm -idirafter %(androidndkdir)s/sources/android/support/include -idirafter %(androidndkdir)s/sysroot/usr/include -idirafter %(androidndkdir)s/sysroot/usr/include/arm-linux-androideabi -idirafter %(clangllvmdir)s/lib64/clang/5.0/include -I%(androidndkdir)s/sources/cxx-stl/llvm-libc++/include - -clang_headers = -clang_flags = -nostdinc -x c++ -std=c++17 -fsigned-char -mfloat-abi=soft -U__SSE__ - -cocos_headers = -I%(cocosdir)s/cocos -I%(cocosdir)s/cocos/platform/android -I%(cocosdir)s/external/sources - -cocos_flags = -DANDROID -DCC_PLATFORM=3 -DCC_PLATFORM_IOS=1 -DCC_PLATFORM_MACOS=4 -DCC_PLATFORM_WINDOWS=2 -DCC_PLATFORM_ANDROID=3 - - -cxxgenerator_headers = - -# extra arguments for clang -extra_arguments = %(android_headers)s %(clang_headers)s %(cxxgenerator_headers)s %(cocos_headers)s %(android_flags)s %(clang_flags)s %(cocos_flags)s %(extra_flags)s - -# what headers to parse -headers = %(cocosdir)s/cocos/ui/videoplayer/VideoPlayer.h - -# what classes to produce code for. You can use regular expressions here. When testing the regular -# expression, it will be enclosed in "^$", like this: "^Menu*$". -classes = VideoPlayer - -# what should we skip? in the format ClassName::[function function] -# ClassName is a regular expression, but will be used like this: "^ClassName$" functions are also -# regular expressions, they will not be surrounded by "^$". If you want to skip a whole class, just -# add a single "*" as functions. See bellow for several examples. A special class name is "*", which -# will apply to all class names. This is a convenience wildcard to be able to skip similar named -# functions from all classes. - -skip = - -rename_functions = - -rename_classes = - -# for all class names, should we remove something when registering in the target VM? -remove_prefix = - -# classes for which there will be no "parent" lookup -classes_have_no_parents = - -# base classes which will be skipped when their sub-classes found them. -base_classes_to_skip = RefCounted - -# classes that create no constructor -# Set is special and we will use a hand-written constructor -abstract_classes = diff --git a/native/tools/tojs/webview.ini b/native/tools/tojs/webview.ini deleted file mode 100644 index f7ab46d3e79..00000000000 --- a/native/tools/tojs/webview.ini +++ /dev/null @@ -1,59 +0,0 @@ -[webview] -# the prefix to be added to the generated functions. You might or might not use this in your own -# templates -prefix = webview - -# create a target namespace (in javascript, this would create some code like the equiv. to `ns = ns || {}`) -# all classes will be embedded in that namespace -target_namespace = jsb - -macro_judgement = - -android_headers = - -android_flags = -target armv7-none-linux-androideabi -D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS -DANDROID -D__ANDROID_API__=14 -gcc-toolchain %(gcc_toolchain_dir)s --sysroot=%(androidndkdir)s/platforms/android-14/arch-arm -idirafter %(androidndkdir)s/sources/android/support/include -idirafter %(androidndkdir)s/sysroot/usr/include -idirafter %(androidndkdir)s/sysroot/usr/include/arm-linux-androideabi -idirafter %(clangllvmdir)s/lib64/clang/5.0/include -I%(androidndkdir)s/sources/cxx-stl/llvm-libc++/include - -clang_headers = -clang_flags = -nostdinc -x c++ -std=c++17 -fsigned-char -mfloat-abi=soft -U__SSE__ - -cocos_headers = -I%(cocosdir)s/cocos -I%(cocosdir)s/cocos/platform/android -I%(cocosdir)s/external/sources - -cocos_flags = -DANDROID -DCC_PLATFORM=3 -DCC_PLATFORM_IOS=1 -DCC_PLATFORM_MACOS=4 -DCC_PLATFORM_WINDOWS=2 -DCC_PLATFORM_ANDROID=3 - -cxxgenerator_headers = - -# extra arguments for clang -extra_arguments = %(android_headers)s %(clang_headers)s %(cxxgenerator_headers)s %(cocos_headers)s %(android_flags)s %(clang_flags)s %(cocos_flags)s %(extra_flags)s - -# what headers to parse -headers = %(cocosdir)s/cocos/ui/webview/WebView.h - -# what classes to produce code for. You can use regular expressions here. When testing the regular -# expression, it will be enclosed in "^$", like this: "^Menu*$". -classes = WebView - -# what should we skip? in the format ClassName::[function function] -# ClassName is a regular expression, but will be used like this: "^ClassName$" functions are also -# regular expressions, they will not be surrounded by "^$". If you want to skip a whole class, just -# add a single "*" as functions. See bellow for several examples. A special class name is "*", which -# will apply to all class names. This is a convenience wildcard to be able to skip similar named -# functions from all classes. - -skip = - -rename_functions = - -rename_classes = - -# for all class names, should we remove something when registering in the target VM? -remove_prefix = - -# classes for which there will be no "parent" lookup -classes_have_no_parents = - -# base classes which will be skipped when their sub-classes found them. -base_classes_to_skip = RefCounted - -# classes that create no constructor -# Set is special and we will use a hand-written constructor -abstract_classes = diff --git a/native/tools/tojs/xr.ini b/native/tools/tojs/xr.ini deleted file mode 100644 index 9c70c41f094..00000000000 --- a/native/tools/tojs/xr.ini +++ /dev/null @@ -1,66 +0,0 @@ -[xr] -# the prefix to be added to the generated functions. You might or might not use this in your own -# templates -prefix = xr - -# create a target namespace (in javascript, this would create some code like the equiv. to `ns = ns || {}`) -# all classes will be embedded in that namespace -target_namespace = xr - -macro_judgement = #if (CC_USE_XR > 0) - -android_headers = - -clang_headers = - -cxxgenerator_headers = - -cocos_headers = -I%(cocosdir)s/cocos/platform/interfaces/modules - -android_flags = -target armv7-none-linux-androideabi -D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS -DANDROID -D__ANDROID_API__=14 -gcc-toolchain %(gcc_toolchain_dir)s --sysroot=%(androidndkdir)s/platforms/android-14/arch-arm -idirafter %(androidndkdir)s/sources/android/support/include -idirafter %(androidndkdir)s/sysroot/usr/include -idirafter %(androidndkdir)s/sysroot/usr/include/arm-linux-androideabi -idirafter %(clangllvmdir)s/lib64/clang/5.0/include -I%(androidndkdir)s/sources/cxx-stl/llvm-libc++/include - -clang_flags = -nostdinc -x c++ -std=c++17 -fsigned-char -mfloat-abi=soft -U__SSE__ - -cocos_flags = -DANDROID -DCC_PLATFORM=3 -DCC_PLATFORM_IOS=1 -DCC_PLATFORM_MACOS=4 -DCC_PLATFORM_WINDOWS=2 -DCC_PLATFORM_ANDROID=3 - -# extra arguments for clang -extra_arguments = %(android_headers)s %(clang_headers)s %(cxxgenerator_headers)s %(cocos_headers)s %(android_flags)s %(clang_flags)s %(cocos_flags)s %(extra_flags)s - -# what headers to parse -headers = %(cocosdir)s/cocos/xr/Xr.h - -replace_headers = - -# what classes to produce code for. You can use regular expressions here. When testing the regular -# expression, it will be enclosed in "^$", like this: "^Menu*$". -classes = XrEntry - -# what should we skip? in the format ClassName::[function function] -# ClassName is a regular expression, but will be used like this: "^ClassName$" functions are also -# regular expressions, they will not be surrounded by "^$". If you want to skip a whole class, just -# add a single "*" as functions. See bellow for several examples. A special class name is "*", which -# will apply to all class names. This is a convenience wildcard to be able to skip similar named -# functions from all classes. - -skip = XrEntry::[setGamepadCallback setHandleCallback setHMDCallback setXRConfig getXRConfig] - -field = - -rename_functions = - -rename_classes = - -# for all class names, should we remove something when registering in the target VM? -remove_prefix = - -# classes for which there will be no "parent" lookup -classes_have_no_parents = - -# base classes which will be skipped when their sub-classes found them. -base_classes_to_skip = - -# classes that create no constructor -# Set is special and we will use a hand-written constructor -abstract_classes = XrEntry - -classes_owned_by_cpp = From d88a183f8799e92020f2b46eb67883fdc1b5bdb7 Mon Sep 17 00:00:00 2001 From: Cocos Robot <48829427+cocos-robot@users.noreply.github.com> Date: Wed, 26 Oct 2022 13:36:59 +0800 Subject: [PATCH 083/829] [ci skip][AUTO]: Automated code generating update: cf408abc275ee5c35e1e634758e3d9f5d9663ef3 (#13130) (#13152) Co-authored-by: cocos-robot --- native/cocos/bindings/auto/jsb_2d_auto.cpp | 789 ++++---- .../cocos/bindings/auto/jsb_assets_auto.cpp | 95 +- .../cocos/bindings/auto/jsb_geometry_auto.cpp | 329 ++++ native/cocos/bindings/auto/jsb_gfx_auto.cpp | 405 +--- native/cocos/bindings/auto/jsb_xr_auto.cpp | 1631 ++++++++++------- native/cocos/bindings/auto/jsb_xr_auto.h | 92 +- 6 files changed, 1765 insertions(+), 1576 deletions(-) diff --git a/native/cocos/bindings/auto/jsb_2d_auto.cpp b/native/cocos/bindings/auto/jsb_2d_auto.cpp index d283a632f6f..3cc9f43fe95 100644 --- a/native/cocos/bindings/auto/jsb_2d_auto.cpp +++ b/native/cocos/bindings/auto/jsb_2d_auto.cpp @@ -75,6 +75,42 @@ #define cc_UIMeshBuffer_iData_set(self_, val_) self_->setIData(val_) +#define cc_RenderDrawInfo_bufferId_get(self_) self_->getBufferId() +#define cc_RenderDrawInfo_bufferId_set(self_, val_) self_->setBufferId(val_) + + +#define cc_RenderDrawInfo_accId_get(self_) self_->getAccId() +#define cc_RenderDrawInfo_accId_set(self_, val_) self_->setAccId(val_) + + +#define cc_RenderDrawInfo_vertexOffset_get(self_) self_->getVertexOffset() +#define cc_RenderDrawInfo_vertexOffset_set(self_, val_) self_->setVertexOffset(val_) + + +#define cc_RenderDrawInfo_indexOffset_get(self_) self_->getIndexOffset() +#define cc_RenderDrawInfo_indexOffset_set(self_, val_) self_->setIndexOffset(val_) + + +#define cc_RenderDrawInfo_vbCount_get(self_) self_->getVbCount() +#define cc_RenderDrawInfo_vbCount_set(self_, val_) self_->setVbCount(val_) + + +#define cc_RenderDrawInfo_ibCount_get(self_) self_->getIbCount() +#define cc_RenderDrawInfo_ibCount_set(self_, val_) self_->setIbCount(val_) + + +#define cc_RenderDrawInfo_vertDirty_get(self_) self_->getVertDirty() +#define cc_RenderDrawInfo_vertDirty_set(self_, val_) self_->setVertDirty(val_) + + +#define cc_RenderDrawInfo_dataHash_get(self_) self_->getDataHash() +#define cc_RenderDrawInfo_dataHash_set(self_, val_) self_->setDataHash(val_) + + +#define cc_RenderDrawInfo_isMeshBuffer_get(self_) self_->getIsMeshBuffer() +#define cc_RenderDrawInfo_isMeshBuffer_set(self_, val_) self_->setIsMeshBuffer(val_) + + #define cc_RenderDrawInfo_vbBuffer_get(self_) self_->getVbBuffer() #define cc_RenderDrawInfo_vbBuffer_set(self_, val_) self_->setVbBuffer(val_) @@ -107,10 +143,18 @@ #define cc_RenderDrawInfo_model_set(self_, val_) self_->setModel(val_) +#define cc_RenderDrawInfo_drawInfoType_get(self_) self_->getDrawInfoType() +#define cc_RenderDrawInfo_drawInfoType_set(self_, val_) self_->setDrawInfoType(val_) + + #define cc_RenderDrawInfo_subNode_get(self_) self_->getSubNode() #define cc_RenderDrawInfo_subNode_set(self_, val_) self_->setSubNode(val_) +#define cc_RenderDrawInfo_stride_get(self_) self_->getStride() +#define cc_RenderDrawInfo_stride_set(self_, val_) self_->setStride(val_) + + #define cc_RenderEntity_node_get(self_) self_->getNode() #define cc_RenderEntity_node_set(self_, val_) self_->setNode(val_) @@ -1050,7 +1094,7 @@ static bool js_delete_cc_RenderDrawInfo(se::State& s) } SE_BIND_FINALIZE_FUNC(js_delete_cc_RenderDrawInfo) -static bool js_cc_RenderDrawInfo_getDrawInfoType(se::State& s) +static bool js_cc_RenderDrawInfo_setMeshBuffer(se::State& s) { // js_function @@ -1058,27 +1102,25 @@ static bool js_cc_RenderDrawInfo_getDrawInfoType(se::State& s) const auto& args = s.args(); size_t argc = args.size(); cc::RenderDrawInfo *arg1 = (cc::RenderDrawInfo *) NULL ; - uint32_t result; + cc::UIMeshBuffer *arg2 = (cc::UIMeshBuffer *) NULL ; - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = ((cc::RenderDrawInfo const *)arg1)->getDrawInfoType(); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "RenderDrawInfo_getDrawInfoType, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "RenderDrawInfo_setMeshBuffer,2,SWIGTYPE_p_cc__UIMeshBuffer"); + (arg1)->setMeshBuffer(arg2); return true; } -SE_BIND_FUNC(js_cc_RenderDrawInfo_getDrawInfoType) +SE_BIND_FUNC(js_cc_RenderDrawInfo_setMeshBuffer) -static bool js_cc_RenderDrawInfo_setDrawInfoType(se::State& s) +static bool js_cc_RenderDrawInfo_getMeshBuffer(se::State& s) { // js_function @@ -1086,27 +1128,26 @@ static bool js_cc_RenderDrawInfo_setDrawInfoType(se::State& s) const auto& args = s.args(); size_t argc = args.size(); cc::RenderDrawInfo *arg1 = (cc::RenderDrawInfo *) NULL ; - uint32_t arg2 ; + cc::UIMeshBuffer *result = 0 ; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "RenderDrawInfo_setDrawInfoType,2,SWIGTYPE_uint32_t"); - - (arg1)->setDrawInfoType(arg2); + result = (cc::UIMeshBuffer *)((cc::RenderDrawInfo const *)arg1)->getMeshBuffer(); + // %typemap(out) SWIGTYPE* + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "RenderDrawInfo_getMeshBuffer, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); return true; } -SE_BIND_FUNC(js_cc_RenderDrawInfo_setDrawInfoType) +SE_BIND_FUNC(js_cc_RenderDrawInfo_getMeshBuffer) -static bool js_cc_RenderDrawInfo_getAccId(se::State& s) +static bool js_cc_RenderDrawInfo_changeMeshBuffer(se::State& s) { // js_function @@ -1114,7 +1155,6 @@ static bool js_cc_RenderDrawInfo_getAccId(se::State& s) const auto& args = s.args(); size_t argc = args.size(); cc::RenderDrawInfo *arg1 = (cc::RenderDrawInfo *) NULL ; - uint16_t result; if(argc != 0) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); @@ -1122,19 +1162,14 @@ static bool js_cc_RenderDrawInfo_getAccId(se::State& s) } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = ((cc::RenderDrawInfo const *)arg1)->getAccId(); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "RenderDrawInfo_getAccId, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - + (arg1)->changeMeshBuffer(); return true; } -SE_BIND_FUNC(js_cc_RenderDrawInfo_getAccId) +SE_BIND_FUNC(js_cc_RenderDrawInfo_changeMeshBuffer) -static bool js_cc_RenderDrawInfo_setAccId(se::State& s) +static bool js_cc_RenderDrawInfo_setRender2dBufferToNative(se::State& s) { // js_function @@ -1142,7 +1177,7 @@ static bool js_cc_RenderDrawInfo_setAccId(se::State& s) const auto& args = s.args(); size_t argc = args.size(); cc::RenderDrawInfo *arg1 = (cc::RenderDrawInfo *) NULL ; - uint16_t arg2 ; + uint8_t *arg2 = (uint8_t *) NULL ; if(argc != 1) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); @@ -1150,19 +1185,17 @@ static bool js_cc_RenderDrawInfo_setAccId(se::State& s) } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - // %typemap(in) SWIGTYPE value in + // %typemap(in) SWIGTYPE* ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "RenderDrawInfo_setAccId,2,SWIGTYPE_uint16_t"); - - (arg1)->setAccId(arg2); + SE_PRECONDITION2(ok, false, "RenderDrawInfo_setRender2dBufferToNative,2,SWIGTYPE_p_uint8_t"); + (arg1)->setRender2dBufferToNative(arg2); return true; } -SE_BIND_FUNC(js_cc_RenderDrawInfo_setAccId) +SE_BIND_FUNC(js_cc_RenderDrawInfo_setRender2dBufferToNative) -static bool js_cc_RenderDrawInfo_getBufferId(se::State& s) +static bool js_cc_RenderDrawInfo_getAttrSharedBufferForJS(se::State& s) { // js_function @@ -1170,7 +1203,7 @@ static bool js_cc_RenderDrawInfo_getBufferId(se::State& s) const auto& args = s.args(); size_t argc = args.size(); cc::RenderDrawInfo *arg1 = (cc::RenderDrawInfo *) NULL ; - uint16_t result; + se::Object *result = 0 ; if(argc != 0) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); @@ -1178,19 +1211,18 @@ static bool js_cc_RenderDrawInfo_getBufferId(se::State& s) } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = ((cc::RenderDrawInfo const *)arg1)->getBufferId(); - // %typemap(out) SWIGTYPE + result = (se::Object *)((cc::RenderDrawInfo const *)arg1)->getAttrSharedBufferForJS(); + // %typemap(out) SWIGTYPE* ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "RenderDrawInfo_getBufferId, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - + SE_PRECONDITION2(ok, false, "RenderDrawInfo_getAttrSharedBufferForJS, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); return true; } -SE_BIND_FUNC(js_cc_RenderDrawInfo_getBufferId) +SE_BIND_FUNC(js_cc_RenderDrawInfo_getAttrSharedBufferForJS) -static bool js_cc_RenderDrawInfo_setBufferId(se::State& s) +static bool js_cc_RenderDrawInfo_requestIA(se::State& s) { // js_function @@ -1198,7 +1230,8 @@ static bool js_cc_RenderDrawInfo_setBufferId(se::State& s) const auto& args = s.args(); size_t argc = args.size(); cc::RenderDrawInfo *arg1 = (cc::RenderDrawInfo *) NULL ; - uint16_t arg2 ; + cc::gfx::Device *arg2 = (cc::gfx::Device *) NULL ; + cc::gfx::InputAssembler *result = 0 ; if(argc != 1) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); @@ -1206,19 +1239,21 @@ static bool js_cc_RenderDrawInfo_setBufferId(se::State& s) } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - // %typemap(in) SWIGTYPE value in + // %typemap(in) SWIGTYPE* ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "RenderDrawInfo_setBufferId,2,SWIGTYPE_uint16_t"); - - (arg1)->setBufferId(arg2); + SE_PRECONDITION2(ok, false, "RenderDrawInfo_requestIA,2,SWIGTYPE_p_cc__gfx__Device"); + result = (cc::gfx::InputAssembler *)(arg1)->requestIA(arg2); + // %typemap(out) SWIGTYPE* + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "RenderDrawInfo_requestIA, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); return true; } -SE_BIND_FUNC(js_cc_RenderDrawInfo_setBufferId) +SE_BIND_FUNC(js_cc_RenderDrawInfo_requestIA) -static bool js_cc_RenderDrawInfo_getVertexOffset(se::State& s) +static bool js_cc_RenderDrawInfo_uploadBuffers(se::State& s) { // js_function @@ -1226,7 +1261,6 @@ static bool js_cc_RenderDrawInfo_getVertexOffset(se::State& s) const auto& args = s.args(); size_t argc = args.size(); cc::RenderDrawInfo *arg1 = (cc::RenderDrawInfo *) NULL ; - uint32_t result; if(argc != 0) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); @@ -1234,19 +1268,14 @@ static bool js_cc_RenderDrawInfo_getVertexOffset(se::State& s) } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = ((cc::RenderDrawInfo const *)arg1)->getVertexOffset(); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "RenderDrawInfo_getVertexOffset, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - + (arg1)->uploadBuffers(); return true; } -SE_BIND_FUNC(js_cc_RenderDrawInfo_getVertexOffset) +SE_BIND_FUNC(js_cc_RenderDrawInfo_uploadBuffers) -static bool js_cc_RenderDrawInfo_setVertexOffset(se::State& s) +static bool js_cc_RenderDrawInfo_resetMeshIA(se::State& s) { // js_function @@ -1254,27 +1283,21 @@ static bool js_cc_RenderDrawInfo_setVertexOffset(se::State& s) const auto& args = s.args(); size_t argc = args.size(); cc::RenderDrawInfo *arg1 = (cc::RenderDrawInfo *) NULL ; - uint32_t arg2 ; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "RenderDrawInfo_setVertexOffset,2,SWIGTYPE_uint32_t"); - - (arg1)->setVertexOffset(arg2); + (arg1)->resetMeshIA(); return true; } -SE_BIND_FUNC(js_cc_RenderDrawInfo_setVertexOffset) +SE_BIND_FUNC(js_cc_RenderDrawInfo_resetMeshIA) -static bool js_cc_RenderDrawInfo_getIndexOffset(se::State& s) +static bool js_cc_RenderDrawInfo_getLocalDes(se::State& s) { // js_function @@ -1282,7 +1305,7 @@ static bool js_cc_RenderDrawInfo_getIndexOffset(se::State& s) const auto& args = s.args(); size_t argc = args.size(); cc::RenderDrawInfo *arg1 = (cc::RenderDrawInfo *) NULL ; - uint32_t result; + cc::gfx::DescriptorSet *result = 0 ; if(argc != 0) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); @@ -1290,19 +1313,18 @@ static bool js_cc_RenderDrawInfo_getIndexOffset(se::State& s) } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = ((cc::RenderDrawInfo const *)arg1)->getIndexOffset(); - // %typemap(out) SWIGTYPE + result = (cc::gfx::DescriptorSet *)(arg1)->getLocalDes(); + // %typemap(out) SWIGTYPE* ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "RenderDrawInfo_getIndexOffset, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - + SE_PRECONDITION2(ok, false, "RenderDrawInfo_getLocalDes, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); return true; } -SE_BIND_FUNC(js_cc_RenderDrawInfo_getIndexOffset) +SE_BIND_FUNC(js_cc_RenderDrawInfo_getLocalDes) -static bool js_cc_RenderDrawInfo_setIndexOffset(se::State& s) +static bool js_cc_RenderDrawInfo_updateLocalDescriptorSet(se::State& s) { // js_function @@ -1310,605 +1332,395 @@ static bool js_cc_RenderDrawInfo_setIndexOffset(se::State& s) const auto& args = s.args(); size_t argc = args.size(); cc::RenderDrawInfo *arg1 = (cc::RenderDrawInfo *) NULL ; - uint32_t arg2 ; + cc::Node *arg2 = (cc::Node *) NULL ; + cc::gfx::DescriptorSetLayout *arg3 = (cc::gfx::DescriptorSetLayout *) NULL ; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + if(argc != 2) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); return false; } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "RenderDrawInfo_updateLocalDescriptorSet,2,SWIGTYPE_p_cc__Node"); + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[1], &arg3, s.thisObject()); + SE_PRECONDITION2(ok, false, "RenderDrawInfo_updateLocalDescriptorSet,3,SWIGTYPE_p_cc__gfx__DescriptorSetLayout"); + (arg1)->updateLocalDescriptorSet(arg2,arg3); + + + return true; +} +SE_BIND_FUNC(js_cc_RenderDrawInfo_updateLocalDescriptorSet) + +static bool js_cc_RenderDrawInfo_bufferId_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::RenderDrawInfo *arg1 = (cc::RenderDrawInfo *) NULL ; + uint16_t arg2 ; + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE value in ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "RenderDrawInfo_setIndexOffset,2,SWIGTYPE_uint32_t"); + SE_PRECONDITION2(ok, false, "RenderDrawInfo_bufferId_set,2,SWIGTYPE_uint16_t"); - (arg1)->setIndexOffset(arg2); + cc_RenderDrawInfo_bufferId_set(arg1,arg2); return true; } -SE_BIND_FUNC(js_cc_RenderDrawInfo_setIndexOffset) +SE_BIND_PROP_SET(js_cc_RenderDrawInfo_bufferId_set) -static bool js_cc_RenderDrawInfo_getVbCount(se::State& s) +static bool js_cc_RenderDrawInfo_bufferId_get(se::State& s) { - // js_function - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); cc::RenderDrawInfo *arg1 = (cc::RenderDrawInfo *) NULL ; - uint32_t result; + uint16_t result; - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = ((cc::RenderDrawInfo const *)arg1)->getVbCount(); + result = cc_RenderDrawInfo_bufferId_get(arg1); // %typemap(out) SWIGTYPE ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "RenderDrawInfo_getVbCount, Error processing arguments"); + SE_PRECONDITION2(ok, false, "RenderDrawInfo_bufferId_get, Error processing arguments"); SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); return true; } -SE_BIND_FUNC(js_cc_RenderDrawInfo_getVbCount) +SE_BIND_PROP_GET(js_cc_RenderDrawInfo_bufferId_get) -static bool js_cc_RenderDrawInfo_setVbCount(se::State& s) +static bool js_cc_RenderDrawInfo_accId_set(se::State& s) { - // js_function - CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); cc::RenderDrawInfo *arg1 = (cc::RenderDrawInfo *) NULL ; - uint32_t arg2 ; + uint16_t arg2 ; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE value in ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "RenderDrawInfo_setVbCount,2,SWIGTYPE_uint32_t"); + SE_PRECONDITION2(ok, false, "RenderDrawInfo_accId_set,2,SWIGTYPE_uint16_t"); - (arg1)->setVbCount(arg2); + cc_RenderDrawInfo_accId_set(arg1,arg2); return true; } -SE_BIND_FUNC(js_cc_RenderDrawInfo_setVbCount) +SE_BIND_PROP_SET(js_cc_RenderDrawInfo_accId_set) -static bool js_cc_RenderDrawInfo_getIbCount(se::State& s) +static bool js_cc_RenderDrawInfo_accId_get(se::State& s) { - // js_function - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); cc::RenderDrawInfo *arg1 = (cc::RenderDrawInfo *) NULL ; - uint32_t result; + uint16_t result; - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = ((cc::RenderDrawInfo const *)arg1)->getIbCount(); + result = cc_RenderDrawInfo_accId_get(arg1); // %typemap(out) SWIGTYPE ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "RenderDrawInfo_getIbCount, Error processing arguments"); + SE_PRECONDITION2(ok, false, "RenderDrawInfo_accId_get, Error processing arguments"); SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); return true; } -SE_BIND_FUNC(js_cc_RenderDrawInfo_getIbCount) +SE_BIND_PROP_GET(js_cc_RenderDrawInfo_accId_get) -static bool js_cc_RenderDrawInfo_setIbCount(se::State& s) +static bool js_cc_RenderDrawInfo_vertexOffset_set(se::State& s) { - // js_function - CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); cc::RenderDrawInfo *arg1 = (cc::RenderDrawInfo *) NULL ; uint32_t arg2 ; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE value in ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "RenderDrawInfo_setIbCount,2,SWIGTYPE_uint32_t"); + SE_PRECONDITION2(ok, false, "RenderDrawInfo_vertexOffset_set,2,SWIGTYPE_uint32_t"); - (arg1)->setIbCount(arg2); + cc_RenderDrawInfo_vertexOffset_set(arg1,arg2); return true; } -SE_BIND_FUNC(js_cc_RenderDrawInfo_setIbCount) +SE_BIND_PROP_SET(js_cc_RenderDrawInfo_vertexOffset_set) -static bool js_cc_RenderDrawInfo_getVertDirty(se::State& s) +static bool js_cc_RenderDrawInfo_vertexOffset_get(se::State& s) { - // js_function - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); cc::RenderDrawInfo *arg1 = (cc::RenderDrawInfo *) NULL ; - bool result; + uint32_t result; - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (bool)((cc::RenderDrawInfo const *)arg1)->getVertDirty(); - // out 5 + result = cc_RenderDrawInfo_vertexOffset_get(arg1); + // %typemap(out) SWIGTYPE ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "RenderDrawInfo_vertexOffset_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + return true; } -SE_BIND_FUNC(js_cc_RenderDrawInfo_getVertDirty) +SE_BIND_PROP_GET(js_cc_RenderDrawInfo_vertexOffset_get) -static bool js_cc_RenderDrawInfo_setVertDirty(se::State& s) +static bool js_cc_RenderDrawInfo_indexOffset_set(se::State& s) { - // js_function - CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); cc::RenderDrawInfo *arg1 = (cc::RenderDrawInfo *) NULL ; - bool arg2 ; + uint32_t arg2 ; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) bool - ok &= sevalue_to_native(args[0], &arg2); - SE_PRECONDITION2(ok, false, "RenderDrawInfo_setVertDirty,2,SWIGTYPE_bool"); - (arg1)->setVertDirty(arg2); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "RenderDrawInfo_indexOffset_set,2,SWIGTYPE_uint32_t"); + + cc_RenderDrawInfo_indexOffset_set(arg1,arg2); return true; } -SE_BIND_FUNC(js_cc_RenderDrawInfo_setVertDirty) +SE_BIND_PROP_SET(js_cc_RenderDrawInfo_indexOffset_set) -static bool js_cc_RenderDrawInfo_getDataHash(se::State& s) +static bool js_cc_RenderDrawInfo_indexOffset_get(se::State& s) { - // js_function - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); cc::RenderDrawInfo *arg1 = (cc::RenderDrawInfo *) NULL ; - ccstd::hash_t result; + uint32_t result; - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = ((cc::RenderDrawInfo const *)arg1)->getDataHash(); + result = cc_RenderDrawInfo_indexOffset_get(arg1); // %typemap(out) SWIGTYPE ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "RenderDrawInfo_getDataHash, Error processing arguments"); + SE_PRECONDITION2(ok, false, "RenderDrawInfo_indexOffset_get, Error processing arguments"); SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); return true; } -SE_BIND_FUNC(js_cc_RenderDrawInfo_getDataHash) +SE_BIND_PROP_GET(js_cc_RenderDrawInfo_indexOffset_get) -static bool js_cc_RenderDrawInfo_setDataHash(se::State& s) +static bool js_cc_RenderDrawInfo_vbCount_set(se::State& s) { - // js_function - CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); cc::RenderDrawInfo *arg1 = (cc::RenderDrawInfo *) NULL ; - ccstd::hash_t arg2 ; + uint32_t arg2 ; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE value in ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "RenderDrawInfo_setDataHash,2,SWIGTYPE_ccstd__hash_t"); + SE_PRECONDITION2(ok, false, "RenderDrawInfo_vbCount_set,2,SWIGTYPE_uint32_t"); - (arg1)->setDataHash(arg2); + cc_RenderDrawInfo_vbCount_set(arg1,arg2); return true; } -SE_BIND_FUNC(js_cc_RenderDrawInfo_setDataHash) +SE_BIND_PROP_SET(js_cc_RenderDrawInfo_vbCount_set) -static bool js_cc_RenderDrawInfo_getIsMeshBuffer(se::State& s) +static bool js_cc_RenderDrawInfo_vbCount_get(se::State& s) { - // js_function - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); cc::RenderDrawInfo *arg1 = (cc::RenderDrawInfo *) NULL ; - bool result; + uint32_t result; - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (bool)((cc::RenderDrawInfo const *)arg1)->getIsMeshBuffer(); - // out 5 + result = cc_RenderDrawInfo_vbCount_get(arg1); + // %typemap(out) SWIGTYPE ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "RenderDrawInfo_vbCount_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + return true; } -SE_BIND_FUNC(js_cc_RenderDrawInfo_getIsMeshBuffer) +SE_BIND_PROP_GET(js_cc_RenderDrawInfo_vbCount_get) -static bool js_cc_RenderDrawInfo_setIsMeshBuffer(se::State& s) +static bool js_cc_RenderDrawInfo_ibCount_set(se::State& s) { - // js_function - CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); cc::RenderDrawInfo *arg1 = (cc::RenderDrawInfo *) NULL ; - bool arg2 ; - - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) bool - ok &= sevalue_to_native(args[0], &arg2); - SE_PRECONDITION2(ok, false, "RenderDrawInfo_setIsMeshBuffer,2,SWIGTYPE_bool"); - (arg1)->setIsMeshBuffer(arg2); - - - return true; -} -SE_BIND_FUNC(js_cc_RenderDrawInfo_setIsMeshBuffer) - -static bool js_cc_RenderDrawInfo_setStride(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::RenderDrawInfo *arg1 = (cc::RenderDrawInfo *) NULL ; - uint8_t arg2 ; + uint32_t arg2 ; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE value in ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "RenderDrawInfo_setStride,2,SWIGTYPE_uint8_t"); + SE_PRECONDITION2(ok, false, "RenderDrawInfo_ibCount_set,2,SWIGTYPE_uint32_t"); - (arg1)->setStride(arg2); + cc_RenderDrawInfo_ibCount_set(arg1,arg2); return true; } -SE_BIND_FUNC(js_cc_RenderDrawInfo_setStride) +SE_BIND_PROP_SET(js_cc_RenderDrawInfo_ibCount_set) -static bool js_cc_RenderDrawInfo_setMeshBuffer(se::State& s) +static bool js_cc_RenderDrawInfo_ibCount_get(se::State& s) { - // js_function - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); cc::RenderDrawInfo *arg1 = (cc::RenderDrawInfo *) NULL ; - cc::UIMeshBuffer *arg2 = (cc::UIMeshBuffer *) NULL ; - - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE* - ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "RenderDrawInfo_setMeshBuffer,2,SWIGTYPE_p_cc__UIMeshBuffer"); - (arg1)->setMeshBuffer(arg2); - - - return true; -} -SE_BIND_FUNC(js_cc_RenderDrawInfo_setMeshBuffer) - -static bool js_cc_RenderDrawInfo_getMeshBuffer(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::RenderDrawInfo *arg1 = (cc::RenderDrawInfo *) NULL ; - cc::UIMeshBuffer *result = 0 ; + uint32_t result; - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (cc::UIMeshBuffer *)((cc::RenderDrawInfo const *)arg1)->getMeshBuffer(); - // %typemap(out) SWIGTYPE* + result = cc_RenderDrawInfo_ibCount_get(arg1); + // %typemap(out) SWIGTYPE ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "RenderDrawInfo_getMeshBuffer, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - - - return true; -} -SE_BIND_FUNC(js_cc_RenderDrawInfo_getMeshBuffer) - -static bool js_cc_RenderDrawInfo_changeMeshBuffer(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::RenderDrawInfo *arg1 = (cc::RenderDrawInfo *) NULL ; - - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - (arg1)->changeMeshBuffer(); - - - return true; -} -SE_BIND_FUNC(js_cc_RenderDrawInfo_changeMeshBuffer) - -static bool js_cc_RenderDrawInfo_setRender2dBufferToNative(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::RenderDrawInfo *arg1 = (cc::RenderDrawInfo *) NULL ; - uint8_t *arg2 = (uint8_t *) NULL ; + SE_PRECONDITION2(ok, false, "RenderDrawInfo_ibCount_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE* - ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "RenderDrawInfo_setRender2dBufferToNative,2,SWIGTYPE_p_uint8_t"); - (arg1)->setRender2dBufferToNative(arg2); return true; } -SE_BIND_FUNC(js_cc_RenderDrawInfo_setRender2dBufferToNative) +SE_BIND_PROP_GET(js_cc_RenderDrawInfo_ibCount_get) -static bool js_cc_RenderDrawInfo_getAttrSharedBufferForJS(se::State& s) +static bool js_cc_RenderDrawInfo_vertDirty_set(se::State& s) { - // js_function - CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); cc::RenderDrawInfo *arg1 = (cc::RenderDrawInfo *) NULL ; - se::Object *result = 0 ; + bool arg2 ; - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (se::Object *)((cc::RenderDrawInfo const *)arg1)->getAttrSharedBufferForJS(); - // %typemap(out) SWIGTYPE* - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "RenderDrawInfo_getAttrSharedBufferForJS, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + // %typemap(in) bool + ok &= sevalue_to_native(args[0], &arg2); + SE_PRECONDITION2(ok, false, "RenderDrawInfo_vertDirty_set,2,SWIGTYPE_bool"); + cc_RenderDrawInfo_vertDirty_set(arg1,arg2); return true; } -SE_BIND_FUNC(js_cc_RenderDrawInfo_getAttrSharedBufferForJS) +SE_BIND_PROP_SET(js_cc_RenderDrawInfo_vertDirty_set) -static bool js_cc_RenderDrawInfo_requestIA(se::State& s) +static bool js_cc_RenderDrawInfo_vertDirty_get(se::State& s) { - // js_function - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); cc::RenderDrawInfo *arg1 = (cc::RenderDrawInfo *) NULL ; - cc::gfx::Device *arg2 = (cc::gfx::Device *) NULL ; - cc::gfx::InputAssembler *result = 0 ; + bool result; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE* - ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "RenderDrawInfo_requestIA,2,SWIGTYPE_p_cc__gfx__Device"); - result = (cc::gfx::InputAssembler *)(arg1)->requestIA(arg2); - // %typemap(out) SWIGTYPE* + result = (bool)cc_RenderDrawInfo_vertDirty_get(arg1); + // out 5 ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "RenderDrawInfo_requestIA, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); return true; } -SE_BIND_FUNC(js_cc_RenderDrawInfo_requestIA) +SE_BIND_PROP_GET(js_cc_RenderDrawInfo_vertDirty_get) -static bool js_cc_RenderDrawInfo_uploadBuffers(se::State& s) +static bool js_cc_RenderDrawInfo_dataHash_set(se::State& s) { - // js_function - CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); cc::RenderDrawInfo *arg1 = (cc::RenderDrawInfo *) NULL ; + ccstd::hash_t arg2 ; - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - (arg1)->uploadBuffers(); + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "RenderDrawInfo_dataHash_set,2,SWIGTYPE_ccstd__hash_t"); - return true; -} -SE_BIND_FUNC(js_cc_RenderDrawInfo_uploadBuffers) - -static bool js_cc_RenderDrawInfo_resetMeshIA(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::RenderDrawInfo *arg1 = (cc::RenderDrawInfo *) NULL ; - - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - (arg1)->resetMeshIA(); + cc_RenderDrawInfo_dataHash_set(arg1,arg2); return true; } -SE_BIND_FUNC(js_cc_RenderDrawInfo_resetMeshIA) +SE_BIND_PROP_SET(js_cc_RenderDrawInfo_dataHash_set) -static bool js_cc_RenderDrawInfo_getLocalDes(se::State& s) +static bool js_cc_RenderDrawInfo_dataHash_get(se::State& s) { - // js_function - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); cc::RenderDrawInfo *arg1 = (cc::RenderDrawInfo *) NULL ; - cc::gfx::DescriptorSet *result = 0 ; + ccstd::hash_t result; - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (cc::gfx::DescriptorSet *)(arg1)->getLocalDes(); - // %typemap(out) SWIGTYPE* + result = cc_RenderDrawInfo_dataHash_get(arg1); + // %typemap(out) SWIGTYPE ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "RenderDrawInfo_getLocalDes, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + SE_PRECONDITION2(ok, false, "RenderDrawInfo_dataHash_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + return true; } -SE_BIND_FUNC(js_cc_RenderDrawInfo_getLocalDes) +SE_BIND_PROP_GET(js_cc_RenderDrawInfo_dataHash_get) -static bool js_cc_RenderDrawInfo_updateLocalDescriptorSet(se::State& s) +static bool js_cc_RenderDrawInfo_isMeshBuffer_set(se::State& s) { - // js_function - CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); cc::RenderDrawInfo *arg1 = (cc::RenderDrawInfo *) NULL ; - cc::Node *arg2 = (cc::Node *) NULL ; - cc::gfx::DescriptorSetLayout *arg3 = (cc::gfx::DescriptorSetLayout *) NULL ; + bool arg2 ; - if(argc != 2) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); - return false; - } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE* - ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "RenderDrawInfo_updateLocalDescriptorSet,2,SWIGTYPE_p_cc__Node"); - // %typemap(in) SWIGTYPE* - ok &= sevalue_to_native(args[1], &arg3, s.thisObject()); - SE_PRECONDITION2(ok, false, "RenderDrawInfo_updateLocalDescriptorSet,3,SWIGTYPE_p_cc__gfx__DescriptorSetLayout"); - (arg1)->updateLocalDescriptorSet(arg2,arg3); + // %typemap(in) bool + ok &= sevalue_to_native(args[0], &arg2); + SE_PRECONDITION2(ok, false, "RenderDrawInfo_isMeshBuffer_set,2,SWIGTYPE_bool"); + cc_RenderDrawInfo_isMeshBuffer_set(arg1,arg2); return true; } -SE_BIND_FUNC(js_cc_RenderDrawInfo_updateLocalDescriptorSet) +SE_BIND_PROP_SET(js_cc_RenderDrawInfo_isMeshBuffer_set) -static bool js_cc_RenderDrawInfo_resetDrawInfo(se::State& s) +static bool js_cc_RenderDrawInfo_isMeshBuffer_get(se::State& s) { - // js_function - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); cc::RenderDrawInfo *arg1 = (cc::RenderDrawInfo *) NULL ; + bool result; - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - (arg1)->resetDrawInfo(); + result = (bool)cc_RenderDrawInfo_isMeshBuffer_get(arg1); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); return true; } -SE_BIND_FUNC(js_cc_RenderDrawInfo_resetDrawInfo) +SE_BIND_PROP_GET(js_cc_RenderDrawInfo_isMeshBuffer_get) static bool js_cc_RenderDrawInfo_vbBuffer_set(se::State& s) { @@ -2222,6 +2034,48 @@ static bool js_cc_RenderDrawInfo_model_get(se::State& s) } SE_BIND_PROP_GET(js_cc_RenderDrawInfo_model_get) +static bool js_cc_RenderDrawInfo_drawInfoType_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::RenderDrawInfo *arg1 = (cc::RenderDrawInfo *) NULL ; + uint32_t arg2 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "RenderDrawInfo_drawInfoType_set,2,SWIGTYPE_uint32_t"); + + cc_RenderDrawInfo_drawInfoType_set(arg1,arg2); + + + return true; +} +SE_BIND_PROP_SET(js_cc_RenderDrawInfo_drawInfoType_set) + +static bool js_cc_RenderDrawInfo_drawInfoType_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::RenderDrawInfo *arg1 = (cc::RenderDrawInfo *) NULL ; + uint32_t result; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = cc_RenderDrawInfo_drawInfoType_get(arg1); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "RenderDrawInfo_drawInfoType_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_PROP_GET(js_cc_RenderDrawInfo_drawInfoType_get) + static bool js_cc_RenderDrawInfo_subNode_set(se::State& s) { CC_UNUSED bool ok = true; @@ -2261,9 +2115,60 @@ static bool js_cc_RenderDrawInfo_subNode_get(se::State& s) } SE_BIND_PROP_GET(js_cc_RenderDrawInfo_subNode_get) +static bool js_cc_RenderDrawInfo_stride_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::RenderDrawInfo *arg1 = (cc::RenderDrawInfo *) NULL ; + uint8_t arg2 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "RenderDrawInfo_stride_set,2,SWIGTYPE_uint8_t"); + + cc_RenderDrawInfo_stride_set(arg1,arg2); + + + return true; +} +SE_BIND_PROP_SET(js_cc_RenderDrawInfo_stride_set) + +static bool js_cc_RenderDrawInfo_stride_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::RenderDrawInfo *arg1 = (cc::RenderDrawInfo *) NULL ; + uint8_t result; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = cc_RenderDrawInfo_stride_get(arg1); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "RenderDrawInfo_stride_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_PROP_GET(js_cc_RenderDrawInfo_stride_get) + bool js_register_cc_RenderDrawInfo(se::Object* obj) { auto* cls = se::Class::create("RenderDrawInfo", obj, nullptr, _SE(js_new_cc_RenderDrawInfo)); + cls->defineProperty("bufferId", _SE(js_cc_RenderDrawInfo_bufferId_get), _SE(js_cc_RenderDrawInfo_bufferId_set)); + cls->defineProperty("accId", _SE(js_cc_RenderDrawInfo_accId_get), _SE(js_cc_RenderDrawInfo_accId_set)); + cls->defineProperty("vertexOffset", _SE(js_cc_RenderDrawInfo_vertexOffset_get), _SE(js_cc_RenderDrawInfo_vertexOffset_set)); + cls->defineProperty("indexOffset", _SE(js_cc_RenderDrawInfo_indexOffset_get), _SE(js_cc_RenderDrawInfo_indexOffset_set)); + cls->defineProperty("vbCount", _SE(js_cc_RenderDrawInfo_vbCount_get), _SE(js_cc_RenderDrawInfo_vbCount_set)); + cls->defineProperty("ibCount", _SE(js_cc_RenderDrawInfo_ibCount_get), _SE(js_cc_RenderDrawInfo_ibCount_set)); + cls->defineProperty("vertDirty", _SE(js_cc_RenderDrawInfo_vertDirty_get), _SE(js_cc_RenderDrawInfo_vertDirty_set)); + cls->defineProperty("dataHash", _SE(js_cc_RenderDrawInfo_dataHash_get), _SE(js_cc_RenderDrawInfo_dataHash_set)); + cls->defineProperty("isMeshBuffer", _SE(js_cc_RenderDrawInfo_isMeshBuffer_get), _SE(js_cc_RenderDrawInfo_isMeshBuffer_set)); cls->defineProperty("vbBuffer", _SE(js_cc_RenderDrawInfo_vbBuffer_get), _SE(js_cc_RenderDrawInfo_vbBuffer_set)); cls->defineProperty("ibBuffer", _SE(js_cc_RenderDrawInfo_ibBuffer_get), _SE(js_cc_RenderDrawInfo_ibBuffer_set)); cls->defineProperty("vDataBuffer", _SE(js_cc_RenderDrawInfo_vDataBuffer_get), _SE(js_cc_RenderDrawInfo_vDataBuffer_set)); @@ -2272,29 +2177,10 @@ bool js_register_cc_RenderDrawInfo(se::Object* obj) { cls->defineProperty("texture", _SE(js_cc_RenderDrawInfo_texture_get), _SE(js_cc_RenderDrawInfo_texture_set)); cls->defineProperty("sampler", _SE(js_cc_RenderDrawInfo_sampler_get), _SE(js_cc_RenderDrawInfo_sampler_set)); cls->defineProperty("model", _SE(js_cc_RenderDrawInfo_model_get), _SE(js_cc_RenderDrawInfo_model_set)); + cls->defineProperty("drawInfoType", _SE(js_cc_RenderDrawInfo_drawInfoType_get), _SE(js_cc_RenderDrawInfo_drawInfoType_set)); cls->defineProperty("subNode", _SE(js_cc_RenderDrawInfo_subNode_get), _SE(js_cc_RenderDrawInfo_subNode_set)); + cls->defineProperty("stride", _SE(js_cc_RenderDrawInfo_stride_get), _SE(js_cc_RenderDrawInfo_stride_set)); - cls->defineFunction("getDrawInfoType", _SE(js_cc_RenderDrawInfo_getDrawInfoType)); - cls->defineFunction("setDrawInfoType", _SE(js_cc_RenderDrawInfo_setDrawInfoType)); - cls->defineFunction("getAccId", _SE(js_cc_RenderDrawInfo_getAccId)); - cls->defineFunction("setAccId", _SE(js_cc_RenderDrawInfo_setAccId)); - cls->defineFunction("getBufferId", _SE(js_cc_RenderDrawInfo_getBufferId)); - cls->defineFunction("setBufferId", _SE(js_cc_RenderDrawInfo_setBufferId)); - cls->defineFunction("getVertexOffset", _SE(js_cc_RenderDrawInfo_getVertexOffset)); - cls->defineFunction("setVertexOffset", _SE(js_cc_RenderDrawInfo_setVertexOffset)); - cls->defineFunction("getIndexOffset", _SE(js_cc_RenderDrawInfo_getIndexOffset)); - cls->defineFunction("setIndexOffset", _SE(js_cc_RenderDrawInfo_setIndexOffset)); - cls->defineFunction("getVbCount", _SE(js_cc_RenderDrawInfo_getVbCount)); - cls->defineFunction("setVbCount", _SE(js_cc_RenderDrawInfo_setVbCount)); - cls->defineFunction("getIbCount", _SE(js_cc_RenderDrawInfo_getIbCount)); - cls->defineFunction("setIbCount", _SE(js_cc_RenderDrawInfo_setIbCount)); - cls->defineFunction("getVertDirty", _SE(js_cc_RenderDrawInfo_getVertDirty)); - cls->defineFunction("setVertDirty", _SE(js_cc_RenderDrawInfo_setVertDirty)); - cls->defineFunction("getDataHash", _SE(js_cc_RenderDrawInfo_getDataHash)); - cls->defineFunction("setDataHash", _SE(js_cc_RenderDrawInfo_setDataHash)); - cls->defineFunction("getIsMeshBuffer", _SE(js_cc_RenderDrawInfo_getIsMeshBuffer)); - cls->defineFunction("setIsMeshBuffer", _SE(js_cc_RenderDrawInfo_setIsMeshBuffer)); - cls->defineFunction("setStride", _SE(js_cc_RenderDrawInfo_setStride)); cls->defineFunction("setMeshBuffer", _SE(js_cc_RenderDrawInfo_setMeshBuffer)); cls->defineFunction("getMeshBuffer", _SE(js_cc_RenderDrawInfo_getMeshBuffer)); cls->defineFunction("changeMeshBuffer", _SE(js_cc_RenderDrawInfo_changeMeshBuffer)); @@ -2305,7 +2191,6 @@ bool js_register_cc_RenderDrawInfo(se::Object* obj) { cls->defineFunction("resetMeshIA", _SE(js_cc_RenderDrawInfo_resetMeshIA)); cls->defineFunction("getLocalDes", _SE(js_cc_RenderDrawInfo_getLocalDes)); cls->defineFunction("updateLocalDescriptorSet", _SE(js_cc_RenderDrawInfo_updateLocalDescriptorSet)); - cls->defineFunction("resetDrawInfo", _SE(js_cc_RenderDrawInfo_resetDrawInfo)); diff --git a/native/cocos/bindings/auto/jsb_assets_auto.cpp b/native/cocos/bindings/auto/jsb_assets_auto.cpp index 65908f8156b..c8b4a8f2a14 100644 --- a/native/cocos/bindings/auto/jsb_assets_auto.cpp +++ b/native/cocos/bindings/auto/jsb_assets_auto.cpp @@ -17315,77 +17315,6 @@ se::Class* __jsb_cc_IMemoryImageSource_class = nullptr; se::Object* __jsb_cc_IMemoryImageSource_proto = nullptr; SE_DECLARE_FINALIZE_FUNC(js_delete_cc_IMemoryImageSource) -static bool js_cc_IMemoryImageSource__data_set(se::State& s) -{ - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::IMemoryImageSource *arg1 = (cc::IMemoryImageSource *) NULL ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1->data, s.thisObject()); - SE_PRECONDITION2(ok, false, "IMemoryImageSource__data_set,2,SWIGTYPE_cc__IntrusivePtrT_cc__ArrayBuffer_t"); - - - - return true; -} -SE_BIND_PROP_SET(js_cc_IMemoryImageSource__data_set) - -static bool js_cc_IMemoryImageSource__data_get(se::State& s) -{ - CC_UNUSED bool ok = true; - cc::IMemoryImageSource *arg1 = (cc::IMemoryImageSource *) NULL ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(arg1->data, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "IMemoryImageSource__data_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->data, s.thisObject(), s.rval()); - - - - return true; -} -SE_BIND_PROP_GET(js_cc_IMemoryImageSource__data_get) - -static bool js_cc_IMemoryImageSource__compressed_set(se::State& s) -{ - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::IMemoryImageSource *arg1 = (cc::IMemoryImageSource *) NULL ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) bool - ok &= sevalue_to_native(args[0], &arg1->compressed); - SE_PRECONDITION2(ok, false, "IMemoryImageSource__compressed_set,2,SWIGTYPE_bool"); - - - return true; -} -SE_BIND_PROP_SET(js_cc_IMemoryImageSource__compressed_set) - -static bool js_cc_IMemoryImageSource__compressed_get(se::State& s) -{ - CC_UNUSED bool ok = true; - cc::IMemoryImageSource *arg1 = (cc::IMemoryImageSource *) NULL ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // out 5 - ok &= nativevalue_to_se(arg1->compressed, s.rval(), s.thisObject() /*ctx*/); - - - return true; -} -SE_BIND_PROP_GET(js_cc_IMemoryImageSource__compressed_get) - static bool js_cc_IMemoryImageSource_width_set(se::State& s) { CC_UNUSED bool ok = true; @@ -17535,18 +17464,6 @@ bool sevalue_to_native(const se::Value &from, cc::IMemoryImageSource * to, se::O se::Value field; bool ok = true; - json->getProperty("_data", &field, true); - if (!field.isNullOrUndefined()) { - ok &= sevalue_to_native(field, &(to->data), ctx); - } - - - json->getProperty("_compressed", &field, true); - if (!field.isNullOrUndefined()) { - ok &= sevalue_to_native(field, &(to->compressed), ctx); - } - - json->getProperty("width", &field, true); if (!field.isNullOrUndefined()) { ok &= sevalue_to_native(field, &(to->width), ctx); @@ -17572,8 +17489,6 @@ bool sevalue_to_native(const se::Value &from, cc::IMemoryImageSource * to, se::O bool js_register_cc_IMemoryImageSource(se::Object* obj) { auto* cls = se::Class::create("IMemoryImageSource", obj, nullptr, _SE(js_new_cc_IMemoryImageSource)); - cls->defineProperty("_data", _SE(js_cc_IMemoryImageSource__data_get), _SE(js_cc_IMemoryImageSource__data_set)); - cls->defineProperty("_compressed", _SE(js_cc_IMemoryImageSource__compressed_get), _SE(js_cc_IMemoryImageSource__compressed_set)); cls->defineProperty("width", _SE(js_cc_IMemoryImageSource_width_get), _SE(js_cc_IMemoryImageSource_width_set)); cls->defineProperty("height", _SE(js_cc_IMemoryImageSource_height_get), _SE(js_cc_IMemoryImageSource_height_set)); cls->defineProperty("format", _SE(js_cc_IMemoryImageSource_format_get), _SE(js_cc_IMemoryImageSource_format_set)); @@ -18382,7 +18297,7 @@ se::Class* __jsb_cc_Material_class = nullptr; se::Object* __jsb_cc_Material_proto = nullptr; SE_DECLARE_FINALIZE_FUNC(js_delete_cc_Material) -static bool js_cc_Material_getHashForMaterial_static(se::State& s) +static bool js_cc_Material_getHash_static(se::State& s) { // js_function @@ -18398,18 +18313,18 @@ static bool js_cc_Material_getHashForMaterial_static(se::State& s) } // %typemap(in) SWIGTYPE* ok &= sevalue_to_native(args[0], &arg1, s.thisObject()); - SE_PRECONDITION2(ok, false, "Material_getHashForMaterial,1,SWIGTYPE_p_cc__Material"); + SE_PRECONDITION2(ok, false, "Material_getHash,1,SWIGTYPE_p_cc__Material"); result = cc::Material::getHashForMaterial(arg1); // %typemap(out) SWIGTYPE ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Material_getHashForMaterial, Error processing arguments"); + SE_PRECONDITION2(ok, false, "Material_getHash, Error processing arguments"); SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); return true; } -SE_BIND_FUNC(js_cc_Material_getHashForMaterial_static) +SE_BIND_FUNC(js_cc_Material_getHash_static) // js_ctor static bool js_new_cc_Material(se::State& s) // NOLINT(readability-identifier-naming) @@ -21335,7 +21250,7 @@ bool js_register_cc_Material(se::Object* obj) { cls->defineFunction("getPasses", _SE(js_cc_Material_getPasses)); - cls->defineStaticFunction("getHashForMaterial", _SE(js_cc_Material_getHashForMaterial_static)); + cls->defineStaticFunction("getHash", _SE(js_cc_Material_getHash_static)); cls->defineFinalizeFunction(_SE(js_delete_cc_Material)); diff --git a/native/cocos/bindings/auto/jsb_geometry_auto.cpp b/native/cocos/bindings/auto/jsb_geometry_auto.cpp index 70c4d2ccfc6..ed411b87568 100644 --- a/native/cocos/bindings/auto/jsb_geometry_auto.cpp +++ b/native/cocos/bindings/auto/jsb_geometry_auto.cpp @@ -1262,6 +1262,236 @@ static bool js_cc_geometry_Plane_create_static(se::State& s) } SE_BIND_FUNC(js_cc_geometry_Plane_create_static) +static bool js_cc_geometry_Plane_clone_static__SWIG_0(se::State& s) +{ + // js_overloaded_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + cc::geometry::Plane *arg1 = 0 ; + cc::geometry::Plane temp1 ; + cc::geometry::Plane *result = 0 ; + + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp1, s.thisObject()); + SE_PRECONDITION2(ok, false, "Plane_clone,1,SWIGTYPE_p_cc__geometry__Plane"); + arg1 = &temp1; + + result = (cc::geometry::Plane *)cc::geometry::Plane::clone((cc::geometry::Plane const &)*arg1); + // %typemap(out) SWIGTYPE* + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "Plane_clone, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + return true; +} + +static bool js_cc_geometry_Plane_copy_static(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::geometry::Plane *arg1 = (cc::geometry::Plane *) NULL ; + cc::geometry::Plane *arg2 = 0 ; + cc::geometry::Plane temp2 ; + cc::geometry::Plane *result = 0 ; + + if(argc != 2) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); + return false; + } + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg1, s.thisObject()); + SE_PRECONDITION2(ok, false, "Plane_copy,1,SWIGTYPE_p_cc__geometry__Plane"); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[1], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "Plane_copy,2,SWIGTYPE_p_cc__geometry__Plane"); + arg2 = &temp2; + + result = (cc::geometry::Plane *)cc::geometry::Plane::copy(arg1,(cc::geometry::Plane const &)*arg2); + // %typemap(out) SWIGTYPE* + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "Plane_copy, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + return true; +} +SE_BIND_FUNC(js_cc_geometry_Plane_copy_static) + +static bool js_cc_geometry_Plane_fromPoints_static(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::geometry::Plane *arg1 = (cc::geometry::Plane *) NULL ; + cc::Vec3 *arg2 = 0 ; + cc::Vec3 *arg3 = 0 ; + cc::Vec3 *arg4 = 0 ; + cc::Vec3 temp2 ; + cc::Vec3 temp3 ; + cc::Vec3 temp4 ; + cc::geometry::Plane *result = 0 ; + + if(argc != 4) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 4); + return false; + } + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg1, s.thisObject()); + SE_PRECONDITION2(ok, false, "Plane_fromPoints,1,SWIGTYPE_p_cc__geometry__Plane"); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[1], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "Plane_fromPoints,2,SWIGTYPE_p_cc__Vec3"); + arg2 = &temp2; + + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[2], &temp3, s.thisObject()); + SE_PRECONDITION2(ok, false, "Plane_fromPoints,3,SWIGTYPE_p_cc__Vec3"); + arg3 = &temp3; + + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[3], &temp4, s.thisObject()); + SE_PRECONDITION2(ok, false, "Plane_fromPoints,4,SWIGTYPE_p_cc__Vec3"); + arg4 = &temp4; + + result = (cc::geometry::Plane *)cc::geometry::Plane::fromPoints(arg1,(cc::Vec3 const &)*arg2,(cc::Vec3 const &)*arg3,(cc::Vec3 const &)*arg4); + // %typemap(out) SWIGTYPE* + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "Plane_fromPoints, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + return true; +} +SE_BIND_FUNC(js_cc_geometry_Plane_fromPoints_static) + +static bool js_cc_geometry_Plane_set_static(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::geometry::Plane *arg1 = (cc::geometry::Plane *) NULL ; + float arg2 ; + float arg3 ; + float arg4 ; + float arg5 ; + cc::geometry::Plane *result = 0 ; + + if(argc != 5) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 5); + return false; + } + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg1, s.thisObject()); + SE_PRECONDITION2(ok, false, "Plane_set,1,SWIGTYPE_p_cc__geometry__Plane"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "Plane_set,2,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[2], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "Plane_set,3,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[3], &arg4, nullptr); + SE_PRECONDITION2(ok, false, "Plane_set,4,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[4], &arg5, nullptr); + SE_PRECONDITION2(ok, false, "Plane_set,5,SWIGTYPE_float"); + result = (cc::geometry::Plane *)cc::geometry::Plane::set(arg1,arg2,arg3,arg4,arg5); + // %typemap(out) SWIGTYPE* + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "Plane_set, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + return true; +} +SE_BIND_FUNC(js_cc_geometry_Plane_set_static) + +static bool js_cc_geometry_Plane_fromNormalAndPoint_static(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::geometry::Plane *arg1 = (cc::geometry::Plane *) NULL ; + cc::Vec3 *arg2 = 0 ; + cc::Vec3 *arg3 = 0 ; + cc::Vec3 temp2 ; + cc::Vec3 temp3 ; + cc::geometry::Plane *result = 0 ; + + if(argc != 3) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); + return false; + } + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg1, s.thisObject()); + SE_PRECONDITION2(ok, false, "Plane_fromNormalAndPoint,1,SWIGTYPE_p_cc__geometry__Plane"); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[1], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "Plane_fromNormalAndPoint,2,SWIGTYPE_p_cc__Vec3"); + arg2 = &temp2; + + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[2], &temp3, s.thisObject()); + SE_PRECONDITION2(ok, false, "Plane_fromNormalAndPoint,3,SWIGTYPE_p_cc__Vec3"); + arg3 = &temp3; + + result = (cc::geometry::Plane *)cc::geometry::Plane::fromNormalAndPoint(arg1,(cc::Vec3 const &)*arg2,(cc::Vec3 const &)*arg3); + // %typemap(out) SWIGTYPE* + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "Plane_fromNormalAndPoint, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + return true; +} +SE_BIND_FUNC(js_cc_geometry_Plane_fromNormalAndPoint_static) + +static bool js_cc_geometry_Plane_normalize_static(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::geometry::Plane *arg1 = (cc::geometry::Plane *) NULL ; + cc::geometry::Plane *arg2 = 0 ; + cc::geometry::Plane temp2 ; + cc::geometry::Plane *result = 0 ; + + if(argc != 2) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); + return false; + } + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg1, s.thisObject()); + SE_PRECONDITION2(ok, false, "Plane_normalize,1,SWIGTYPE_p_cc__geometry__Plane"); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[1], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "Plane_normalize,2,SWIGTYPE_p_cc__geometry__Plane"); + arg2 = &temp2; + + result = (cc::geometry::Plane *)cc::geometry::Plane::normalize(arg1,(cc::geometry::Plane const &)*arg2); + // %typemap(out) SWIGTYPE* + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "Plane_normalize, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + return true; +} +SE_BIND_FUNC(js_cc_geometry_Plane_normalize_static) + static bool js_cc_geometry_Plane_setX(se::State& s) { // js_function @@ -1773,6 +2003,53 @@ static bool js_cc_geometry_Plane_distance(se::State& s) } SE_BIND_FUNC(js_cc_geometry_Plane_distance) +static bool js_cc_geometry_Plane_clone__SWIG_1(se::State& s) +{ + // js_overloaded_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + cc::geometry::Plane *arg1 = (cc::geometry::Plane *) NULL ; + cc::geometry::Plane result; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = ((cc::geometry::Plane const *)arg1)->clone(); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "Plane_clone, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + + return true; +} + +static bool js_cc_geometry_Plane_clone(se::State& s) +{ + // js_function_dispatcher + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + + // js_function_dispatch_case + if (argc == 1) { + ok = js_cc_geometry_Plane_clone_static__SWIG_0(s); + if (ok) { + return true; + } + } // js_function_dispatch_case + if (argc == 0) { + ok = js_cc_geometry_Plane_clone__SWIG_1(s); + if (ok) { + return true; + } + } + SE_REPORT_ERROR("wrong number of arguments: %d", (int)argc); + return false; +} +SE_BIND_FUNC(js_cc_geometry_Plane_clone) + static bool js_delete_cc_geometry_Plane(se::State& s) { // js_dtoroverride @@ -1797,9 +2074,15 @@ bool js_register_cc_geometry_Plane(se::Object* obj) { cls->defineFunction("transform", _SE(js_cc_geometry_Plane_transform)); cls->defineFunction("define", _SE(js_cc_geometry_Plane_define)); cls->defineFunction("distance", _SE(js_cc_geometry_Plane_distance)); + cls->defineFunction("clone", _SE(js_cc_geometry_Plane_clone)); cls->defineStaticFunction("create", _SE(js_cc_geometry_Plane_create_static)); + cls->defineStaticFunction("copy", _SE(js_cc_geometry_Plane_copy_static)); + cls->defineStaticFunction("fromPoints", _SE(js_cc_geometry_Plane_fromPoints_static)); + cls->defineStaticFunction("set", _SE(js_cc_geometry_Plane_set_static)); + cls->defineStaticFunction("fromNormalAndPoint", _SE(js_cc_geometry_Plane_fromNormalAndPoint_static)); + cls->defineStaticFunction("normalize", _SE(js_cc_geometry_Plane_normalize_static)); cls->defineFinalizeFunction(_SE(js_delete_cc_geometry_Plane)); @@ -2152,6 +2435,51 @@ static bool js_cc_geometry_Frustum_createOrtho(se::State& s) } SE_BIND_FUNC(js_cc_geometry_Frustum_createOrtho) +static bool js_cc_geometry_Frustum_split(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::geometry::Frustum *arg1 = (cc::geometry::Frustum *) NULL ; + float arg2 ; + float arg3 ; + float arg4 ; + float arg5 ; + cc::Mat4 *arg6 = 0 ; + cc::Mat4 temp6 ; + + if(argc != 5) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 5); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "Frustum_split,2,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "Frustum_split,3,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[2], &arg4, nullptr); + SE_PRECONDITION2(ok, false, "Frustum_split,4,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[3], &arg5, nullptr); + SE_PRECONDITION2(ok, false, "Frustum_split,5,SWIGTYPE_float"); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[4], &temp6, s.thisObject()); + SE_PRECONDITION2(ok, false, "Frustum_split,6,SWIGTYPE_p_cc__Mat4"); + arg6 = &temp6; + + (arg1)->split(arg2,arg3,arg4,arg5,(cc::Mat4 const &)*arg6); + + + return true; +} +SE_BIND_FUNC(js_cc_geometry_Frustum_split) + static bool js_cc_geometry_Frustum_updatePlanes(se::State& s) { // js_function @@ -2284,6 +2612,7 @@ bool js_register_cc_geometry_Frustum(se::Object* obj) { cls->defineFunction("transform", _SE(js_cc_geometry_Frustum_transform)); cls->defineFunction("createOrtho", _SE(js_cc_geometry_Frustum_createOrtho)); + cls->defineFunction("split", _SE(js_cc_geometry_Frustum_split)); cls->defineFunction("updatePlanes", _SE(js_cc_geometry_Frustum_updatePlanes)); cls->defineFunction("setAccurate", _SE(js_cc_geometry_Frustum_setAccurate)); diff --git a/native/cocos/bindings/auto/jsb_gfx_auto.cpp b/native/cocos/bindings/auto/jsb_gfx_auto.cpp index 7a04e03f684..619c2cd1c43 100644 --- a/native/cocos/bindings/auto/jsb_gfx_auto.cpp +++ b/native/cocos/bindings/auto/jsb_gfx_auto.cpp @@ -209,6 +209,10 @@ #define cc_gfx_InputAssembler_instanceCount_set(self_, val_) self_->setInstanceCount(val_) +#define cc_gfx_InputAssembler_firstInstance_get(self_) self_->getFirstInstance() +#define cc_gfx_InputAssembler_firstInstance_set(self_, val_) self_->setFirstInstance(val_) + + #define cc_gfx_CommandBuffer_type_get(self_) self_->getType() @@ -24595,62 +24599,6 @@ static bool js_cc_gfx_InputAssembler_destroy(se::State& s) } SE_BIND_FUNC(js_cc_gfx_InputAssembler_destroy) -static bool js_cc_gfx_InputAssembler_setFirstInstance(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::gfx::InputAssembler *arg1 = (cc::gfx::InputAssembler *) NULL ; - uint32_t arg2 ; - - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "InputAssembler_setFirstInstance,2,SWIGTYPE_uint32_t"); - - (arg1)->setFirstInstance(arg2); - - - return true; -} -SE_BIND_FUNC(js_cc_gfx_InputAssembler_setFirstInstance) - -static bool js_cc_gfx_InputAssembler_getFirstInstance(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::gfx::InputAssembler *arg1 = (cc::gfx::InputAssembler *) NULL ; - uint32_t result; - - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = ((cc::gfx::InputAssembler const *)arg1)->getFirstInstance(); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "InputAssembler_getFirstInstance, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - - - - return true; -} -SE_BIND_FUNC(js_cc_gfx_InputAssembler_getFirstInstance) - static bool js_cc_gfx_InputAssembler_vertexBuffers_get(se::State& s) { CC_UNUSED bool ok = true; @@ -25041,6 +24989,48 @@ static bool js_cc_gfx_InputAssembler_instanceCount_get(se::State& s) } SE_BIND_PROP_GET(js_cc_gfx_InputAssembler_instanceCount_get) +static bool js_cc_gfx_InputAssembler_firstInstance_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gfx::InputAssembler *arg1 = (cc::gfx::InputAssembler *) NULL ; + uint32_t arg2 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "InputAssembler_firstInstance_set,2,SWIGTYPE_uint32_t"); + + cc_gfx_InputAssembler_firstInstance_set(arg1,arg2); + + + return true; +} +SE_BIND_PROP_SET(js_cc_gfx_InputAssembler_firstInstance_set) + +static bool js_cc_gfx_InputAssembler_firstInstance_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gfx::InputAssembler *arg1 = (cc::gfx::InputAssembler *) NULL ; + uint32_t result; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = cc_gfx_InputAssembler_firstInstance_get(arg1); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "InputAssembler_firstInstance_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_PROP_GET(js_cc_gfx_InputAssembler_firstInstance_get) + bool js_register_cc_gfx_InputAssembler(se::Object* obj) { auto* cls = se::Class::create("InputAssembler", obj, __jsb_cc_gfx_GFXObject_proto, nullptr); @@ -25056,11 +25046,10 @@ bool js_register_cc_gfx_InputAssembler(se::Object* obj) { cls->defineProperty("firstIndex", _SE(js_cc_gfx_InputAssembler_firstIndex_get), _SE(js_cc_gfx_InputAssembler_firstIndex_set)); cls->defineProperty("vertexOffset", _SE(js_cc_gfx_InputAssembler_vertexOffset_get), _SE(js_cc_gfx_InputAssembler_vertexOffset_set)); cls->defineProperty("instanceCount", _SE(js_cc_gfx_InputAssembler_instanceCount_get), _SE(js_cc_gfx_InputAssembler_instanceCount_set)); + cls->defineProperty("firstInstance", _SE(js_cc_gfx_InputAssembler_firstInstance_get), _SE(js_cc_gfx_InputAssembler_firstInstance_set)); cls->defineFunction("initialize", _SE(js_cc_gfx_InputAssembler_initialize)); cls->defineFunction("destroy", _SE(js_cc_gfx_InputAssembler_destroy)); - cls->defineFunction("setFirstInstance", _SE(js_cc_gfx_InputAssembler_setFirstInstance)); - cls->defineFunction("getFirstInstance", _SE(js_cc_gfx_InputAssembler_getFirstInstance)); @@ -27896,30 +27885,6 @@ se::Class* __jsb_cc_gfx_Device_class = nullptr; se::Object* __jsb_cc_gfx_Device_proto = nullptr; SE_DECLARE_FINALIZE_FUNC(js_delete_cc_gfx_Device) -static bool js_cc_gfx_Device_getInstance_static(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::gfx::Device *result = 0 ; - - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } - result = (cc::gfx::Device *)cc::gfx::Device::getInstance(); - // %typemap(out) SWIGTYPE* - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Device_getInstance, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - - - return true; -} -SE_BIND_FUNC(js_cc_gfx_Device_getInstance_static) - static bool js_delete_cc_gfx_Device(se::State& s) { // js_dtoroverride @@ -28222,172 +28187,6 @@ static bool js_cc_gfx_Device_getSwapchains(se::State& s) } SE_BIND_FUNC(js_cc_gfx_Device_getSwapchains) -static bool js_cc_gfx_Device_createBuffer__SWIG_0(se::State& s) -{ - // js_overloaded_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - cc::gfx::Device *arg1 = (cc::gfx::Device *) NULL ; - cc::gfx::BufferInfo *arg2 = 0 ; - cc::gfx::BufferInfo temp2 ; - cc::gfx::Buffer *result = 0 ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Device_createBuffer,2,SWIGTYPE_p_cc__gfx__BufferInfo"); - arg2 = &temp2; - - result = (cc::gfx::Buffer *)(arg1)->createBuffer((cc::gfx::BufferInfo const &)*arg2); - // %typemap(out) SWIGTYPE* - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Device_createBuffer, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - s.rval().toObject()->getPrivateObject()->tryAllowDestroyInGC(); - - - return true; -} - -static bool js_cc_gfx_Device_createBuffer__SWIG_1(se::State& s) -{ - // js_overloaded_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - cc::gfx::Device *arg1 = (cc::gfx::Device *) NULL ; - cc::gfx::BufferViewInfo *arg2 = 0 ; - cc::gfx::BufferViewInfo temp2 ; - cc::gfx::Buffer *result = 0 ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Device_createBuffer,2,SWIGTYPE_p_cc__gfx__BufferViewInfo"); - arg2 = &temp2; - - result = (cc::gfx::Buffer *)(arg1)->createBuffer((cc::gfx::BufferViewInfo const &)*arg2); - // %typemap(out) SWIGTYPE* - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Device_createBuffer, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - s.rval().toObject()->getPrivateObject()->tryAllowDestroyInGC(); - - - return true; -} - -static bool js_cc_gfx_Device_createBuffer(se::State& s) -{ - // js_function_dispatcher - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - - // js_function_dispatch_case - if (argc == 1) { - ok = js_cc_gfx_Device_createBuffer__SWIG_0(s); - if (ok) { - return true; - } - } // js_function_dispatch_case - if (argc == 1) { - ok = js_cc_gfx_Device_createBuffer__SWIG_1(s); - if (ok) { - return true; - } - } - SE_REPORT_ERROR("wrong number of arguments: %d", (int)argc); - return false; -} -SE_BIND_FUNC(js_cc_gfx_Device_createBuffer) - -static bool js_cc_gfx_Device_createTexture__SWIG_0(se::State& s) -{ - // js_overloaded_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - cc::gfx::Device *arg1 = (cc::gfx::Device *) NULL ; - cc::gfx::TextureInfo *arg2 = 0 ; - cc::gfx::TextureInfo temp2 ; - cc::gfx::Texture *result = 0 ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Device_createTexture,2,SWIGTYPE_p_cc__gfx__TextureInfo"); - arg2 = &temp2; - - result = (cc::gfx::Texture *)(arg1)->createTexture((cc::gfx::TextureInfo const &)*arg2); - // %typemap(out) SWIGTYPE* - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Device_createTexture, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - s.rval().toObject()->getPrivateObject()->tryAllowDestroyInGC(); - - - return true; -} - -static bool js_cc_gfx_Device_createTexture__SWIG_1(se::State& s) -{ - // js_overloaded_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - cc::gfx::Device *arg1 = (cc::gfx::Device *) NULL ; - cc::gfx::TextureViewInfo *arg2 = 0 ; - cc::gfx::TextureViewInfo temp2 ; - cc::gfx::Texture *result = 0 ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Device_createTexture,2,SWIGTYPE_p_cc__gfx__TextureViewInfo"); - arg2 = &temp2; - - result = (cc::gfx::Texture *)(arg1)->createTexture((cc::gfx::TextureViewInfo const &)*arg2); - // %typemap(out) SWIGTYPE* - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Device_createTexture, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - s.rval().toObject()->getPrivateObject()->tryAllowDestroyInGC(); - - - return true; -} - -static bool js_cc_gfx_Device_createTexture(se::State& s) -{ - // js_function_dispatcher - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - - // js_function_dispatch_case - if (argc == 1) { - ok = js_cc_gfx_Device_createTexture__SWIG_0(s); - if (ok) { - return true; - } - } // js_function_dispatch_case - if (argc == 1) { - ok = js_cc_gfx_Device_createTexture__SWIG_1(s); - if (ok) { - return true; - } - } - SE_REPORT_ERROR("wrong number of arguments: %d", (int)argc); - return false; -} -SE_BIND_FUNC(js_cc_gfx_Device_createTexture) - static bool js_cc_gfx_Device_createShader(se::State& s) { // js_function @@ -29043,62 +28842,6 @@ static bool js_cc_gfx_Device_bindingMappingInfo(se::State& s) } SE_BIND_FUNC(js_cc_gfx_Device_bindingMappingInfo) -static bool js_cc_gfx_Device_setOptions(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::gfx::Device *arg1 = (cc::gfx::Device *) NULL ; - cc::gfx::DeviceOptions *arg2 = 0 ; - cc::gfx::DeviceOptions temp2 ; - - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Device_setOptions,2,SWIGTYPE_p_cc__gfx__DeviceOptions"); - arg2 = &temp2; - - (arg1)->setOptions((cc::gfx::DeviceOptions const &)*arg2); - - - return true; -} -SE_BIND_FUNC(js_cc_gfx_Device_setOptions) - -static bool js_cc_gfx_Device_getOptions(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::gfx::Device *arg1 = (cc::gfx::Device *) NULL ; - cc::gfx::DeviceOptions *result = 0 ; - - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (cc::gfx::DeviceOptions *) &((cc::gfx::Device const *)arg1)->getOptions(); - // %typemap(out) SWIGTYPE& - ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Device_getOptions, Error processing arguments"); - SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); - - - return true; -} -SE_BIND_FUNC(js_cc_gfx_Device_getOptions) - static bool js_cc_gfx_Device_gfxAPI_get(se::State& s) { CC_UNUSED bool ok = true; @@ -29333,8 +29076,6 @@ bool js_register_cc_gfx_Device(se::Object* obj) { cls->defineFunction("createQueryPool", _SE(js_cc_gfx_Device_createQueryPool)); cls->defineFunction("createSwapchain", _SE(js_cc_gfx_Device_createSwapchain)); cls->defineFunction("getSwapchains", _SE(js_cc_gfx_Device_getSwapchains)); - cls->defineFunction("createBuffer", _SE(js_cc_gfx_Device_createBuffer)); - cls->defineFunction("createTexture", _SE(js_cc_gfx_Device_createTexture)); cls->defineFunction("createShader", _SE(js_cc_gfx_Device_createShader)); cls->defineFunction("createInputAssembler", _SE(js_cc_gfx_Device_createInputAssembler)); cls->defineFunction("createRenderPass", _SE(js_cc_gfx_Device_createRenderPass)); @@ -29354,11 +29095,8 @@ bool js_register_cc_gfx_Device(se::Object* obj) { cls->defineFunction("hasFeature", _SE(js_cc_gfx_Device_hasFeature)); cls->defineFunction("getFormatFeatures", _SE(js_cc_gfx_Device_getFormatFeatures)); cls->defineFunction("bindingMappingInfo", _SE(js_cc_gfx_Device_bindingMappingInfo)); - cls->defineFunction("setOptions", _SE(js_cc_gfx_Device_setOptions)); - cls->defineFunction("getOptions", _SE(js_cc_gfx_Device_getOptions)); - cls->defineStaticFunction("getInstance", _SE(js_cc_gfx_Device_getInstance_static)); cls->defineFinalizeFunction(_SE(js_delete_cc_gfx_Device)); @@ -29446,53 +29184,6 @@ static bool js_cc_gfx_DeviceManager_create_static(se::State& s) } SE_BIND_FUNC(js_cc_gfx_DeviceManager_create_static) -static bool js_cc_gfx_DeviceManager_isDetachDeviceThread_static(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - bool result; - - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } - result = (bool)cc::gfx::DeviceManager::isDetachDeviceThread(); - // out 5 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - - - return true; -} -SE_BIND_FUNC(js_cc_gfx_DeviceManager_isDetachDeviceThread_static) - -static bool js_cc_gfx_DeviceManager_getGFXName_static(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - ccstd::string result; - - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } - result = cc::gfx::DeviceManager::getGFXName(); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "DeviceManager_getGFXName, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - - - - return true; -} -SE_BIND_FUNC(js_cc_gfx_DeviceManager_getGFXName_static) - // js_ctor static bool js_new_cc_gfx_DeviceManager(se::State& s) // NOLINT(readability-identifier-naming) { @@ -29524,8 +29215,6 @@ bool js_register_cc_gfx_DeviceManager(se::Object* obj) { cls->defineStaticFunction("create", _SE(js_cc_gfx_DeviceManager_create_static)); - cls->defineStaticFunction("isDetachDeviceThread", _SE(js_cc_gfx_DeviceManager_isDetachDeviceThread_static)); - cls->defineStaticFunction("getGFXName", _SE(js_cc_gfx_DeviceManager_getGFXName_static)); cls->defineFinalizeFunction(_SE(js_delete_cc_gfx_DeviceManager)); diff --git a/native/cocos/bindings/auto/jsb_xr_auto.cpp b/native/cocos/bindings/auto/jsb_xr_auto.cpp index dbb3ac01d9a..c573c96ca25 100644 --- a/native/cocos/bindings/auto/jsb_xr_auto.cpp +++ b/native/cocos/bindings/auto/jsb_xr_auto.cpp @@ -1,891 +1,1268 @@ - // clang-format off -#include "cocos/bindings/auto/jsb_xr_auto.h" -#if (CC_USE_XR > 0) + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 4.1.0 + * + * This file is not intended to be easily readable and contains a number of + * coding conventions designed to improve portability and efficiency. Do not make + * changes to this file unless you know what you are doing--modify the SWIG + * interface file instead. + * ----------------------------------------------------------------------------- */ + +/**************************************************************************** + Copyright (c) 2022 Xiamen Yaji Software Co., Ltd. + + http://www.cocos.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated engine source code (the "Software"), a limited, + worldwide, royalty-free, non-assignable, revocable and non-exclusive license + to use Cocos Creator solely to develop games on your target platforms. You shall + not use Cocos Creator software for developing other software or tools that's + used for developing games. You are not granted to publish, distribute, + sublicense, and/or sell copies of Cocos Creator. + + The software or tools in this License Agreement are licensed, not sold. + Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +****************************************************************************/ + +#if defined(__clang__) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunused-variable" +#elif defined(__GNUC__) || defined(__GNUG__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-variable" +#elif defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable : 4101) +#endif + +/* internal SWIG method */ +#ifndef SWIGINTERN +# define SWIGINTERN static +#endif + + + +#include + + +#include "bindings/jswrapper/SeApi.h" +#include "bindings/manual/jsb_conversions.h" +#include "bindings/manual/jsb_global.h" + + #include "cocos/bindings/manual/jsb_conversions.h" #include "cocos/bindings/manual/jsb_global.h" #include "xr/Xr.h" -#ifndef JSB_ALLOC -#define JSB_ALLOC(kls, ...) new (std::nothrow) kls(__VA_ARGS__) -#endif -#ifndef JSB_FREE -#define JSB_FREE(ptr) delete ptr -#endif -#if CC_DEBUG -static bool js_xr_getter_return_true(se::State& s) // NOLINT(readability-identifier-naming) + +se::Class* __jsb_cc_xr_XrEntry_class = nullptr; +se::Object* __jsb_cc_xr_XrEntry_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_xr_XrEntry) + +static bool js_cc_xr_XrEntry_getInstance_static(se::State& s) { - s.rval().setBoolean(true); + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::xr::XrEntry *result = 0 ; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + result = (cc::xr::XrEntry *)cc::xr::XrEntry::getInstance(); + // %typemap(out) SWIGTYPE* + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "XrEntry_getInstance, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + return true; } -SE_BIND_PROP_GET(js_xr_getter_return_true) -#endif -se::Object* __jsb_cc_xr_XrEntry_proto = nullptr; // NOLINT -se::Class* __jsb_cc_xr_XrEntry_class = nullptr; // NOLINT +SE_BIND_FUNC(js_cc_xr_XrEntry_getInstance_static) -static bool js_xr_XrEntry_acquireXrSwapchain(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_xr_XrEntry_destroyInstance_static(se::State& s) { - auto* cobj = SE_THIS_OBJECT(s); - // SE_PRECONDITION2(cobj, false, "Invalid Native Object"); - if (nullptr == cobj) return true; + // js_function + + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - CC_UNUSED bool ok = true; - if (argc == 1) { - HolderType arg0 = {}; - ok &= sevalue_to_native(args[0], &arg0, s.thisObject()); - SE_PRECONDITION2(ok, false, "Error processing arguments"); - const cc::xr::XRSwapchain& result = cobj->acquireXrSwapchain(arg0.value()); - ok &= nativevalue_to_se(result, s.rval(), nullptr /*ctx*/); - SE_PRECONDITION2(ok, false, "Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - return true; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; } - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; + cc::xr::XrEntry::destroyInstance(); + + + return true; } -SE_BIND_FUNC(js_xr_XrEntry_acquireXrSwapchain) +SE_BIND_FUNC(js_cc_xr_XrEntry_destroyInstance_static) -static bool js_xr_XrEntry_computeViewProjection(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_xr_XrEntry_initPlatformData(se::State& s) { - auto* cobj = SE_THIS_OBJECT(s); - // SE_PRECONDITION2(cobj, false, "Invalid Native Object"); - if (nullptr == cobj) return true; + // js_function + + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - CC_UNUSED bool ok = true; - if (argc == 4) { - HolderType arg0 = {}; - HolderType arg1 = {}; - HolderType arg2 = {}; - HolderType arg3 = {}; - ok &= sevalue_to_native(args[0], &arg0, s.thisObject()); - ok &= sevalue_to_native(args[1], &arg1, s.thisObject()); - ok &= sevalue_to_native(args[2], &arg2, s.thisObject()); - ok &= sevalue_to_native(args[3], &arg3, s.thisObject()); - SE_PRECONDITION2(ok, false, "Error processing arguments"); - std::vector result = cobj->computeViewProjection(arg0.value(), arg1.value(), arg2.value(), arg3.value()); - ok &= nativevalue_to_se(result, s.rval(), nullptr /*ctx*/); - SE_PRECONDITION2(ok, false, "Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - return true; + cc::xr::XrEntry *arg1 = (cc::xr::XrEntry *) NULL ; + void *arg2 = (void *) NULL ; + void *arg3 = (void *) NULL ; + + if(argc != 2) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); + return false; } - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 4); - return false; + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + ok &= sevalue_to_native(args[0], &arg2); + SE_PRECONDITION2(ok, false, "XrEntry_initPlatformData,2,SWIGTYPE_p_void"); + ok &= sevalue_to_native(args[1], &arg3); + SE_PRECONDITION2(ok, false, "XrEntry_initPlatformData,3,SWIGTYPE_p_void"); + (arg1)->initPlatformData(arg2,arg3); + + + return true; } -SE_BIND_FUNC(js_xr_XrEntry_computeViewProjection) +SE_BIND_FUNC(js_cc_xr_XrEntry_initPlatformData) -static bool js_xr_XrEntry_createXrInstance(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_xr_XrEntry_createXrInstance(se::State& s) { - auto* cobj = SE_THIS_OBJECT(s); - // SE_PRECONDITION2(cobj, false, "Invalid Native Object"); - if (nullptr == cobj) return true; + // js_function + + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - CC_UNUSED bool ok = true; - if (argc == 1) { - HolderType arg0 = {}; - ok &= sevalue_to_native(args[0], &arg0, s.thisObject()); - SE_PRECONDITION2(ok, false, "Error processing arguments"); - cobj->createXrInstance(arg0.value()); - return true; + cc::xr::XrEntry *arg1 = (cc::xr::XrEntry *) NULL ; + char *arg2 = (char *) NULL ; + ccstd::string temp2 ; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; } - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + ok &= sevalue_to_native(args[0], &temp2); + SE_PRECONDITION2(ok, false, "XrEntry_createXrInstance,2,SWIGTYPE_p_char"); + arg2 = (char *) temp2.c_str(); + (arg1)->createXrInstance((char const *)arg2); + + + return true; } -SE_BIND_FUNC(js_xr_XrEntry_createXrInstance) +SE_BIND_FUNC(js_cc_xr_XrEntry_createXrInstance) -static bool js_xr_XrEntry_destroyXrInstance(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_xr_XrEntry_pauseXrInstance(se::State& s) { - auto* cobj = SE_THIS_OBJECT(s); - // SE_PRECONDITION2(cobj, false, "Invalid Native Object"); - if (nullptr == cobj) return true; + // js_function + + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - if (argc == 0) { - cobj->destroyXrInstance(); - return true; + cc::xr::XrEntry *arg1 = (cc::xr::XrEntry *) NULL ; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; } - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + (arg1)->pauseXrInstance(); + + + return true; } -SE_BIND_FUNC(js_xr_XrEntry_destroyXrInstance) +SE_BIND_FUNC(js_cc_xr_XrEntry_pauseXrInstance) -static bool js_xr_XrEntry_frameEnd(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_xr_XrEntry_resumeXrInstance(se::State& s) { - auto* cobj = SE_THIS_OBJECT(s); - // SE_PRECONDITION2(cobj, false, "Invalid Native Object"); - if (nullptr == cobj) return true; + // js_function + + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - if (argc == 0) { - cobj->frameEnd(); - return true; + cc::xr::XrEntry *arg1 = (cc::xr::XrEntry *) NULL ; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; } - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + (arg1)->resumeXrInstance(); + + + return true; } -SE_BIND_FUNC(js_xr_XrEntry_frameEnd) +SE_BIND_FUNC(js_cc_xr_XrEntry_resumeXrInstance) -static bool js_xr_XrEntry_frameStart(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_xr_XrEntry_destroyXrInstance(se::State& s) { - auto* cobj = SE_THIS_OBJECT(s); - // SE_PRECONDITION2(cobj, false, "Invalid Native Object"); - if (nullptr == cobj) return true; + // js_function + + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - CC_UNUSED bool ok = true; - if (argc == 0) { - bool result = cobj->frameStart(); - ok &= nativevalue_to_se(result, s.rval(), nullptr /*ctx*/); - SE_PRECONDITION2(ok, false, "Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - return true; + cc::xr::XrEntry *arg1 = (cc::xr::XrEntry *) NULL ; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; } - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + (arg1)->destroyXrInstance(); + + + return true; } -SE_BIND_FUNC(js_xr_XrEntry_frameStart) +SE_BIND_FUNC(js_cc_xr_XrEntry_destroyXrInstance) -static bool js_xr_XrEntry_getCocosXrSwapchains(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_xr_XrEntry_getXrViewCount(se::State& s) { - auto* cobj = SE_THIS_OBJECT(s); - // SE_PRECONDITION2(cobj, false, "Invalid Native Object"); - if (nullptr == cobj) return true; + // js_function + + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - CC_UNUSED bool ok = true; - if (argc == 0) { - std::vector& result = cobj->getCocosXrSwapchains(); - ok &= nativevalue_to_se(result, s.rval(), nullptr /*ctx*/); - SE_PRECONDITION2(ok, false, "Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - return true; + cc::xr::XrEntry *arg1 = (cc::xr::XrEntry *) NULL ; + int result; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; } - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (int)(arg1)->getXrViewCount(); + + // out 1 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + + + return true; } -SE_BIND_FUNC(js_xr_XrEntry_getCocosXrSwapchains) +SE_BIND_FUNC(js_cc_xr_XrEntry_getXrViewCount) -static bool js_xr_XrEntry_getCurrentXrSwapchain(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_xr_XrEntry_initXrSwapchains(se::State& s) { - auto* cobj = SE_THIS_OBJECT(s); - // SE_PRECONDITION2(cobj, false, "Invalid Native Object"); - if (nullptr == cobj) return true; + // js_function + + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - CC_UNUSED bool ok = true; - if (argc == 0) { - const cc::xr::XRSwapchain result = cobj->getCurrentXrSwapchain(); - ok &= nativevalue_to_se(result, s.rval(), nullptr /*ctx*/); - SE_PRECONDITION2(ok, false, "Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - return true; + cc::xr::XrEntry *arg1 = (cc::xr::XrEntry *) NULL ; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; } - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + (arg1)->initXrSwapchains(); + + + return true; } -SE_BIND_FUNC(js_xr_XrEntry_getCurrentXrSwapchain) +SE_BIND_FUNC(js_cc_xr_XrEntry_initXrSwapchains) -static bool js_xr_XrEntry_getHMDViewPosition(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_xr_XrEntry_isCreatedXrInstance(se::State& s) { - auto* cobj = SE_THIS_OBJECT(s); - // SE_PRECONDITION2(cobj, false, "Invalid Native Object"); - if (nullptr == cobj) return true; + // js_function + + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - CC_UNUSED bool ok = true; - if (argc == 2) { - HolderType arg0 = {}; - HolderType arg1 = {}; - ok &= sevalue_to_native(args[0], &arg0, s.thisObject()); - ok &= sevalue_to_native(args[1], &arg1, s.thisObject()); - SE_PRECONDITION2(ok, false, "Error processing arguments"); - std::vector result = cobj->getHMDViewPosition(arg0.value(), arg1.value()); - ok &= nativevalue_to_se(result, s.rval(), nullptr /*ctx*/); - SE_PRECONDITION2(ok, false, "Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - return true; + cc::xr::XrEntry *arg1 = (cc::xr::XrEntry *) NULL ; + bool result; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; } - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); - return false; + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (bool)(arg1)->isCreatedXrInstance(); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + + + return true; } -SE_BIND_FUNC(js_xr_XrEntry_getHMDViewPosition) +SE_BIND_FUNC(js_cc_xr_XrEntry_isCreatedXrInstance) -static bool js_xr_XrEntry_getSwapchainImageIndex(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_xr_XrEntry_getCocosXrSwapchains(se::State& s) { - auto* cobj = SE_THIS_OBJECT(s); - // SE_PRECONDITION2(cobj, false, "Invalid Native Object"); - if (nullptr == cobj) return true; + // js_function + + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - CC_UNUSED bool ok = true; - if (argc == 0) { - unsigned int result = cobj->getSwapchainImageIndex(); - ok &= nativevalue_to_se(result, s.rval(), nullptr /*ctx*/); - SE_PRECONDITION2(ok, false, "Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - return true; + cc::xr::XrEntry *arg1 = (cc::xr::XrEntry *) NULL ; + std::vector< cc::xr::XRSwapchain > *result = 0 ; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; } - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (std::vector< cc::xr::XRSwapchain > *) &(arg1)->getCocosXrSwapchains(); + // %typemap(out) SWIGTYPE& + ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "XrEntry_getCocosXrSwapchains, Error processing arguments"); + SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); + + + return true; } -SE_BIND_FUNC(js_xr_XrEntry_getSwapchainImageIndex) +SE_BIND_FUNC(js_cc_xr_XrEntry_getCocosXrSwapchains) -static bool js_xr_XrEntry_getXRBoolConfig(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_xr_XrEntry_getCurrentXrSwapchain(se::State& s) { - auto* cobj = SE_THIS_OBJECT(s); - // SE_PRECONDITION2(cobj, false, "Invalid Native Object"); - if (nullptr == cobj) return true; + // js_function + + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - CC_UNUSED bool ok = true; - if (argc == 1) { - HolderType arg0 = {}; - ok &= sevalue_to_native(args[0], &arg0, s.thisObject()); - SE_PRECONDITION2(ok, false, "Error processing arguments"); - bool result = cobj->getXRBoolConfig(arg0.value()); - ok &= nativevalue_to_se(result, s.rval(), nullptr /*ctx*/); - SE_PRECONDITION2(ok, false, "Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - return true; + cc::xr::XrEntry *arg1 = (cc::xr::XrEntry *) NULL ; + cc::xr::XRSwapchain result; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; } - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (arg1)->getCurrentXrSwapchain(); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "XrEntry_getCurrentXrSwapchain, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + + return true; } -SE_BIND_FUNC(js_xr_XrEntry_getXRBoolConfig) +SE_BIND_FUNC(js_cc_xr_XrEntry_getCurrentXrSwapchain) -static bool js_xr_XrEntry_getXRFloatConfig(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_xr_XrEntry_acquireXrSwapchain(se::State& s) { - auto* cobj = SE_THIS_OBJECT(s); - // SE_PRECONDITION2(cobj, false, "Invalid Native Object"); - if (nullptr == cobj) return true; + // js_function + + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - CC_UNUSED bool ok = true; - if (argc == 1) { - HolderType arg0 = {}; - ok &= sevalue_to_native(args[0], &arg0, s.thisObject()); - SE_PRECONDITION2(ok, false, "Error processing arguments"); - float result = cobj->getXRFloatConfig(arg0.value()); - ok &= nativevalue_to_se(result, s.rval(), nullptr /*ctx*/); - SE_PRECONDITION2(ok, false, "Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - return true; + cc::xr::XrEntry *arg1 = (cc::xr::XrEntry *) NULL ; + uint32_t arg2 ; + cc::xr::XRSwapchain *result = 0 ; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; } - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "XrEntry_acquireXrSwapchain,2,SWIGTYPE_uint32_t"); + + result = (cc::xr::XRSwapchain *) &(arg1)->acquireXrSwapchain(arg2); + // %typemap(out) SWIGTYPE& + ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "XrEntry_acquireXrSwapchain, Error processing arguments"); + SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); + + + return true; } -SE_BIND_FUNC(js_xr_XrEntry_getXRFloatConfig) +SE_BIND_FUNC(js_cc_xr_XrEntry_acquireXrSwapchain) -static bool js_xr_XrEntry_getXRIntConfig(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_xr_XrEntry_isSessionRunning(se::State& s) { - auto* cobj = SE_THIS_OBJECT(s); - // SE_PRECONDITION2(cobj, false, "Invalid Native Object"); - if (nullptr == cobj) return true; + // js_function + + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - CC_UNUSED bool ok = true; - if (argc == 1) { - HolderType arg0 = {}; - ok &= sevalue_to_native(args[0], &arg0, s.thisObject()); - SE_PRECONDITION2(ok, false, "Error processing arguments"); - int result = cobj->getXRIntConfig(arg0.value()); - ok &= nativevalue_to_se(result, s.rval(), nullptr /*ctx*/); - SE_PRECONDITION2(ok, false, "Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - return true; + cc::xr::XrEntry *arg1 = (cc::xr::XrEntry *) NULL ; + bool result; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; } - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (bool)(arg1)->isSessionRunning(); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + + + return true; } -SE_BIND_FUNC(js_xr_XrEntry_getXRIntConfig) +SE_BIND_FUNC(js_cc_xr_XrEntry_isSessionRunning) -static bool js_xr_XrEntry_getXRPointerConfig(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_xr_XrEntry_frameStart(se::State& s) { - auto* cobj = SE_THIS_OBJECT(s); - // SE_PRECONDITION2(cobj, false, "Invalid Native Object"); - if (nullptr == cobj) return true; + // js_function + + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - CC_UNUSED bool ok = true; - if (argc == 1) { - HolderType arg0 = {}; - ok &= sevalue_to_native(args[0], &arg0, s.thisObject()); - SE_PRECONDITION2(ok, false, "Error processing arguments"); - void* result = cobj->getXRPointerConfig(arg0.value()); - ok &= nativevalue_to_se(result, s.rval(), nullptr /*ctx*/); - SE_PRECONDITION2(ok, false, "Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - return true; + cc::xr::XrEntry *arg1 = (cc::xr::XrEntry *) NULL ; + bool result; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; } - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (bool)(arg1)->frameStart(); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + + + return true; } -SE_BIND_FUNC(js_xr_XrEntry_getXRPointerConfig) +SE_BIND_FUNC(js_cc_xr_XrEntry_frameStart) -static bool js_xr_XrEntry_getXRStringConfig(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_xr_XrEntry_renderLoopStart(se::State& s) { - auto* cobj = SE_THIS_OBJECT(s); - // SE_PRECONDITION2(cobj, false, "Invalid Native Object"); - if (nullptr == cobj) return true; + // js_function + + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - CC_UNUSED bool ok = true; - if (argc == 1) { - HolderType arg0 = {}; - ok &= sevalue_to_native(args[0], &arg0, s.thisObject()); - SE_PRECONDITION2(ok, false, "Error processing arguments"); - std::string result = cobj->getXRStringConfig(arg0.value()); - ok &= nativevalue_to_se(result, s.rval(), nullptr /*ctx*/); - SE_PRECONDITION2(ok, false, "Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - return true; + cc::xr::XrEntry *arg1 = (cc::xr::XrEntry *) NULL ; + int arg2 ; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; } - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "XrEntry_renderLoopStart,2,SWIGTYPE_int"); + (arg1)->renderLoopStart(arg2); + + + return true; } -SE_BIND_FUNC(js_xr_XrEntry_getXRStringConfig) +SE_BIND_FUNC(js_cc_xr_XrEntry_renderLoopStart) -static bool js_xr_XrEntry_getXrViewCount(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_xr_XrEntry_renderLoopEnd(se::State& s) { - auto* cobj = SE_THIS_OBJECT(s); - // SE_PRECONDITION2(cobj, false, "Invalid Native Object"); - if (nullptr == cobj) return true; + // js_function + + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - CC_UNUSED bool ok = true; - if (argc == 0) { - int result = cobj->getXrViewCount(); - ok &= nativevalue_to_se(result, s.rval(), nullptr /*ctx*/); - SE_PRECONDITION2(ok, false, "Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - return true; + cc::xr::XrEntry *arg1 = (cc::xr::XrEntry *) NULL ; + int arg2 ; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; } - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "XrEntry_renderLoopEnd,2,SWIGTYPE_int"); + (arg1)->renderLoopEnd(arg2); + + + return true; } -SE_BIND_FUNC(js_xr_XrEntry_getXrViewCount) +SE_BIND_FUNC(js_cc_xr_XrEntry_renderLoopEnd) -static bool js_xr_XrEntry_initPlatformData(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_xr_XrEntry_frameEnd(se::State& s) { - auto* cobj = SE_THIS_OBJECT(s); - // SE_PRECONDITION2(cobj, false, "Invalid Native Object"); - if (nullptr == cobj) return true; + // js_function + + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - CC_UNUSED bool ok = true; - if (argc == 2) { - HolderType arg0 = {}; - HolderType arg1 = {}; - ok &= sevalue_to_native(args[0], &arg0, s.thisObject()); - ok &= sevalue_to_native(args[1], &arg1, s.thisObject()); - SE_PRECONDITION2(ok, false, "Error processing arguments"); - cobj->initPlatformData(arg0.value(), arg1.value()); - return true; + cc::xr::XrEntry *arg1 = (cc::xr::XrEntry *) NULL ; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; } - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); - return false; + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + (arg1)->frameEnd(); + + + return true; } -SE_BIND_FUNC(js_xr_XrEntry_initPlatformData) +SE_BIND_FUNC(js_cc_xr_XrEntry_frameEnd) -static bool js_xr_XrEntry_initXrSwapchains(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_xr_XrEntry_isRenderAllowable(se::State& s) { - auto* cobj = SE_THIS_OBJECT(s); - // SE_PRECONDITION2(cobj, false, "Invalid Native Object"); - if (nullptr == cobj) return true; + // js_function + + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - if (argc == 0) { - cobj->initXrSwapchains(); - return true; + cc::xr::XrEntry *arg1 = (cc::xr::XrEntry *) NULL ; + bool result; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; } - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (bool)(arg1)->isRenderAllowable(); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + + + return true; } -SE_BIND_FUNC(js_xr_XrEntry_initXrSwapchains) +SE_BIND_FUNC(js_cc_xr_XrEntry_isRenderAllowable) -static bool js_xr_XrEntry_isCreatedXrInstance(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_xr_XrEntry_setXRConfigCallback(se::State& s) { - auto* cobj = SE_THIS_OBJECT(s); - // SE_PRECONDITION2(cobj, false, "Invalid Native Object"); - if (nullptr == cobj) return true; + // js_function + + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - CC_UNUSED bool ok = true; - if (argc == 0) { - bool result = cobj->isCreatedXrInstance(); - ok &= nativevalue_to_se(result, s.rval(), nullptr /*ctx*/); - SE_PRECONDITION2(ok, false, "Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - return true; + cc::xr::XrEntry *arg1 = (cc::xr::XrEntry *) NULL ; + cc::xr::XRConfigChangeCallback *arg2 = 0 ; + cc::xr::XRConfigChangeCallback temp2 ; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; } - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "XrEntry_setXRConfigCallback,2,SWIGTYPE_p_std__functionT_void_fcc__xr__XRConfigKey_cc__xr__XRConfigValueF_t"); + arg2 = &temp2; + + (arg1)->setXRConfigCallback((cc::xr::XRConfigChangeCallback const &)*arg2); + + + return true; } -SE_BIND_FUNC(js_xr_XrEntry_isCreatedXrInstance) +SE_BIND_FUNC(js_cc_xr_XrEntry_setXRConfigCallback) -static bool js_xr_XrEntry_isRenderAllowable(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_xr_XrEntry_computeViewProjection(se::State& s) { - auto* cobj = SE_THIS_OBJECT(s); - // SE_PRECONDITION2(cobj, false, "Invalid Native Object"); - if (nullptr == cobj) return true; + // js_function + + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - CC_UNUSED bool ok = true; - if (argc == 0) { - bool result = cobj->isRenderAllowable(); - ok &= nativevalue_to_se(result, s.rval(), nullptr /*ctx*/); - SE_PRECONDITION2(ok, false, "Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - return true; + cc::xr::XrEntry *arg1 = (cc::xr::XrEntry *) NULL ; + uint32_t arg2 ; + float arg3 ; + float arg4 ; + float arg5 ; + std::vector< float > result; + + if(argc != 4) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 4); + return false; } - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "XrEntry_computeViewProjection,2,SWIGTYPE_uint32_t"); + + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "XrEntry_computeViewProjection,3,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[2], &arg4, nullptr); + SE_PRECONDITION2(ok, false, "XrEntry_computeViewProjection,4,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[3], &arg5, nullptr); + SE_PRECONDITION2(ok, false, "XrEntry_computeViewProjection,5,SWIGTYPE_float"); + result = (arg1)->computeViewProjection(arg2,arg3,arg4,arg5); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "XrEntry_computeViewProjection, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + + return true; } -SE_BIND_FUNC(js_xr_XrEntry_isRenderAllowable) +SE_BIND_FUNC(js_cc_xr_XrEntry_computeViewProjection) -static bool js_xr_XrEntry_isSessionRunning(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_xr_XrEntry_getSwapchainImageIndex(se::State& s) { - auto* cobj = SE_THIS_OBJECT(s); - // SE_PRECONDITION2(cobj, false, "Invalid Native Object"); - if (nullptr == cobj) return true; + // js_function + + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - CC_UNUSED bool ok = true; - if (argc == 0) { - bool result = cobj->isSessionRunning(); - ok &= nativevalue_to_se(result, s.rval(), nullptr /*ctx*/); - SE_PRECONDITION2(ok, false, "Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - return true; + cc::xr::XrEntry *arg1 = (cc::xr::XrEntry *) NULL ; + uint32_t result; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; } - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (arg1)->getSwapchainImageIndex(); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "XrEntry_getSwapchainImageIndex, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + + return true; } -SE_BIND_FUNC(js_xr_XrEntry_isSessionRunning) +SE_BIND_FUNC(js_cc_xr_XrEntry_getSwapchainImageIndex) -static bool js_xr_XrEntry_pauseXrInstance(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_xr_XrEntry_setMultisamplesRTT(se::State& s) { - auto* cobj = SE_THIS_OBJECT(s); - // SE_PRECONDITION2(cobj, false, "Invalid Native Object"); - if (nullptr == cobj) return true; + // js_function + + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - if (argc == 0) { - cobj->pauseXrInstance(); - return true; + cc::xr::XrEntry *arg1 = (cc::xr::XrEntry *) NULL ; + int arg2 ; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; } - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "XrEntry_setMultisamplesRTT,2,SWIGTYPE_int"); + (arg1)->setMultisamplesRTT(arg2); + + + return true; } -SE_BIND_FUNC(js_xr_XrEntry_pauseXrInstance) +SE_BIND_FUNC(js_cc_xr_XrEntry_setMultisamplesRTT) -static bool js_xr_XrEntry_platformLoopEnd(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_xr_XrEntry_setRenderingScale(se::State& s) { - auto* cobj = SE_THIS_OBJECT(s); - // SE_PRECONDITION2(cobj, false, "Invalid Native Object"); - if (nullptr == cobj) return true; + // js_function + + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - CC_UNUSED bool ok = true; - if (argc == 0) { - bool result = cobj->platformLoopEnd(); - ok &= nativevalue_to_se(result, s.rval(), nullptr /*ctx*/); - SE_PRECONDITION2(ok, false, "Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - return true; + cc::xr::XrEntry *arg1 = (cc::xr::XrEntry *) NULL ; + float arg2 ; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; } - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "XrEntry_setRenderingScale,2,SWIGTYPE_float"); + (arg1)->setRenderingScale(arg2); + + + return true; } -SE_BIND_FUNC(js_xr_XrEntry_platformLoopEnd) +SE_BIND_FUNC(js_cc_xr_XrEntry_setRenderingScale) -static bool js_xr_XrEntry_platformLoopStart(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_xr_XrEntry_setIPDOffset(se::State& s) { - auto* cobj = SE_THIS_OBJECT(s); - // SE_PRECONDITION2(cobj, false, "Invalid Native Object"); - if (nullptr == cobj) return true; + // js_function + + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - CC_UNUSED bool ok = true; - if (argc == 0) { - bool result = cobj->platformLoopStart(); - ok &= nativevalue_to_se(result, s.rval(), nullptr /*ctx*/); - SE_PRECONDITION2(ok, false, "Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - return true; + cc::xr::XrEntry *arg1 = (cc::xr::XrEntry *) NULL ; + float arg2 ; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; } - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "XrEntry_setIPDOffset,2,SWIGTYPE_float"); + (arg1)->setIPDOffset(arg2); + + + return true; } -SE_BIND_FUNC(js_xr_XrEntry_platformLoopStart) +SE_BIND_FUNC(js_cc_xr_XrEntry_setIPDOffset) -static bool js_xr_XrEntry_renderLoopEnd(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_xr_XrEntry_setBaseSpaceType(se::State& s) { - auto* cobj = SE_THIS_OBJECT(s); - // SE_PRECONDITION2(cobj, false, "Invalid Native Object"); - if (nullptr == cobj) return true; + // js_function + + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - CC_UNUSED bool ok = true; - if (argc == 1) { - HolderType arg0 = {}; - ok &= sevalue_to_native(args[0], &arg0, s.thisObject()); - SE_PRECONDITION2(ok, false, "Error processing arguments"); - cobj->renderLoopEnd(arg0.value()); - return true; + cc::xr::XrEntry *arg1 = (cc::xr::XrEntry *) NULL ; + int arg2 ; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; } - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "XrEntry_setBaseSpaceType,2,SWIGTYPE_int"); + (arg1)->setBaseSpaceType(arg2); + + + return true; } -SE_BIND_FUNC(js_xr_XrEntry_renderLoopEnd) +SE_BIND_FUNC(js_cc_xr_XrEntry_setBaseSpaceType) -static bool js_xr_XrEntry_renderLoopStart(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_xr_XrEntry_getHMDViewPosition(se::State& s) { - auto* cobj = SE_THIS_OBJECT(s); - // SE_PRECONDITION2(cobj, false, "Invalid Native Object"); - if (nullptr == cobj) return true; + // js_function + + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - CC_UNUSED bool ok = true; - if (argc == 1) { - HolderType arg0 = {}; - ok &= sevalue_to_native(args[0], &arg0, s.thisObject()); - SE_PRECONDITION2(ok, false, "Error processing arguments"); - cobj->renderLoopStart(arg0.value()); - return true; + cc::xr::XrEntry *arg1 = (cc::xr::XrEntry *) NULL ; + uint32_t arg2 ; + int arg3 ; + std::vector< float > result; + + if(argc != 2) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); + return false; } - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "XrEntry_getHMDViewPosition,2,SWIGTYPE_uint32_t"); + + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "XrEntry_getHMDViewPosition,3,SWIGTYPE_int"); + result = (arg1)->getHMDViewPosition(arg2,arg3); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "XrEntry_getHMDViewPosition, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + + return true; } -SE_BIND_FUNC(js_xr_XrEntry_renderLoopStart) +SE_BIND_FUNC(js_cc_xr_XrEntry_getHMDViewPosition) -static bool js_xr_XrEntry_resumeXrInstance(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_xr_XrEntry_platformLoopStart(se::State& s) { - auto* cobj = SE_THIS_OBJECT(s); - // SE_PRECONDITION2(cobj, false, "Invalid Native Object"); - if (nullptr == cobj) return true; + // js_function + + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - if (argc == 0) { - cobj->resumeXrInstance(); - return true; + cc::xr::XrEntry *arg1 = (cc::xr::XrEntry *) NULL ; + bool result; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; } - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (bool)(arg1)->platformLoopStart(); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + + + return true; } -SE_BIND_FUNC(js_xr_XrEntry_resumeXrInstance) +SE_BIND_FUNC(js_cc_xr_XrEntry_platformLoopStart) -static bool js_xr_XrEntry_setBaseSpaceType(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_xr_XrEntry_platformLoopEnd(se::State& s) { - auto* cobj = SE_THIS_OBJECT(s); - // SE_PRECONDITION2(cobj, false, "Invalid Native Object"); - if (nullptr == cobj) return true; + // js_function + + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - CC_UNUSED bool ok = true; - if (argc == 1) { - HolderType arg0 = {}; - ok &= sevalue_to_native(args[0], &arg0, s.thisObject()); - SE_PRECONDITION2(ok, false, "Error processing arguments"); - cobj->setBaseSpaceType(arg0.value()); - return true; + cc::xr::XrEntry *arg1 = (cc::xr::XrEntry *) NULL ; + bool result; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; } - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (bool)(arg1)->platformLoopEnd(); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + + + return true; } -SE_BIND_FUNC(js_xr_XrEntry_setBaseSpaceType) +SE_BIND_FUNC(js_cc_xr_XrEntry_platformLoopEnd) -static bool js_xr_XrEntry_setIPDOffset(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_xr_XrEntry_waitFrame(se::State& s) { - auto* cobj = SE_THIS_OBJECT(s); - // SE_PRECONDITION2(cobj, false, "Invalid Native Object"); - if (nullptr == cobj) return true; + // js_function + + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - CC_UNUSED bool ok = true; - if (argc == 1) { - HolderType arg0 = {}; - ok &= sevalue_to_native(args[0], &arg0, s.thisObject()); - SE_PRECONDITION2(ok, false, "Error processing arguments"); - cobj->setIPDOffset(arg0.value()); - return true; + cc::xr::XrEntry *arg1 = (cc::xr::XrEntry *) NULL ; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; } - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + (arg1)->waitFrame(); + + + return true; } -SE_BIND_FUNC(js_xr_XrEntry_setIPDOffset) +SE_BIND_FUNC(js_cc_xr_XrEntry_waitFrame) -static bool js_xr_XrEntry_setMultisamplesRTT(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_xr_XrEntry_setXRIntConfig(se::State& s) { - auto* cobj = SE_THIS_OBJECT(s); - // SE_PRECONDITION2(cobj, false, "Invalid Native Object"); - if (nullptr == cobj) return true; + // js_function + + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - CC_UNUSED bool ok = true; - if (argc == 1) { - HolderType arg0 = {}; - ok &= sevalue_to_native(args[0], &arg0, s.thisObject()); - SE_PRECONDITION2(ok, false, "Error processing arguments"); - cobj->setMultisamplesRTT(arg0.value()); - return true; + cc::xr::XrEntry *arg1 = (cc::xr::XrEntry *) NULL ; + int arg2 ; + int arg3 ; + + if(argc != 2) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); + return false; } - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "XrEntry_setXRIntConfig,2,SWIGTYPE_int"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "XrEntry_setXRIntConfig,3,SWIGTYPE_int"); + (arg1)->setXRIntConfig(arg2,arg3); + + + return true; } -SE_BIND_FUNC(js_xr_XrEntry_setMultisamplesRTT) +SE_BIND_FUNC(js_cc_xr_XrEntry_setXRIntConfig) -static bool js_xr_XrEntry_setRenderingScale(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_xr_XrEntry_setXRBoolConfig(se::State& s) { - auto* cobj = SE_THIS_OBJECT(s); - // SE_PRECONDITION2(cobj, false, "Invalid Native Object"); - if (nullptr == cobj) return true; + // js_function + + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - CC_UNUSED bool ok = true; - if (argc == 1) { - HolderType arg0 = {}; - ok &= sevalue_to_native(args[0], &arg0, s.thisObject()); - SE_PRECONDITION2(ok, false, "Error processing arguments"); - cobj->setRenderingScale(arg0.value()); - return true; + cc::xr::XrEntry *arg1 = (cc::xr::XrEntry *) NULL ; + int arg2 ; + bool arg3 ; + + if(argc != 2) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); + return false; } - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "XrEntry_setXRBoolConfig,2,SWIGTYPE_int"); + // %typemap(in) bool + ok &= sevalue_to_native(args[1], &arg3); + SE_PRECONDITION2(ok, false, "XrEntry_setXRBoolConfig,3,SWIGTYPE_bool"); + (arg1)->setXRBoolConfig(arg2,arg3); + + + return true; } -SE_BIND_FUNC(js_xr_XrEntry_setRenderingScale) +SE_BIND_FUNC(js_cc_xr_XrEntry_setXRBoolConfig) -static bool js_xr_XrEntry_setXRBoolConfig(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_xr_XrEntry_setXRFloatConfig(se::State& s) { - auto* cobj = SE_THIS_OBJECT(s); - // SE_PRECONDITION2(cobj, false, "Invalid Native Object"); - if (nullptr == cobj) return true; + // js_function + + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - CC_UNUSED bool ok = true; - if (argc == 2) { - HolderType arg0 = {}; - HolderType arg1 = {}; - ok &= sevalue_to_native(args[0], &arg0, s.thisObject()); - ok &= sevalue_to_native(args[1], &arg1, s.thisObject()); - SE_PRECONDITION2(ok, false, "Error processing arguments"); - cobj->setXRBoolConfig(arg0.value(), arg1.value()); - return true; + cc::xr::XrEntry *arg1 = (cc::xr::XrEntry *) NULL ; + int arg2 ; + float arg3 ; + + if(argc != 2) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); + return false; } - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); - return false; + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "XrEntry_setXRFloatConfig,2,SWIGTYPE_int"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "XrEntry_setXRFloatConfig,3,SWIGTYPE_float"); + (arg1)->setXRFloatConfig(arg2,arg3); + + + return true; } -SE_BIND_FUNC(js_xr_XrEntry_setXRBoolConfig) +SE_BIND_FUNC(js_cc_xr_XrEntry_setXRFloatConfig) -static bool js_xr_XrEntry_setXRFloatConfig(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_xr_XrEntry_setXRStringConfig(se::State& s) { - auto* cobj = SE_THIS_OBJECT(s); - // SE_PRECONDITION2(cobj, false, "Invalid Native Object"); - if (nullptr == cobj) return true; + // js_function + + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - CC_UNUSED bool ok = true; - if (argc == 2) { - HolderType arg0 = {}; - HolderType arg1 = {}; - ok &= sevalue_to_native(args[0], &arg0, s.thisObject()); - ok &= sevalue_to_native(args[1], &arg1, s.thisObject()); - SE_PRECONDITION2(ok, false, "Error processing arguments"); - cobj->setXRFloatConfig(arg0.value(), arg1.value()); - return true; + cc::xr::XrEntry *arg1 = (cc::xr::XrEntry *) NULL ; + int arg2 ; + std::string arg3 ; + + if(argc != 2) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); + return false; } - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); - return false; + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "XrEntry_setXRStringConfig,2,SWIGTYPE_int"); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[1], &arg3, s.thisObject()); + SE_PRECONDITION2(ok, false, "XrEntry_setXRStringConfig,3,SWIGTYPE_std__string"); + + (arg1)->setXRStringConfig(arg2,arg3); + + + return true; } -SE_BIND_FUNC(js_xr_XrEntry_setXRFloatConfig) +SE_BIND_FUNC(js_cc_xr_XrEntry_setXRStringConfig) -static bool js_xr_XrEntry_setXRIntConfig(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_xr_XrEntry_setXRPointerConfig(se::State& s) { - auto* cobj = SE_THIS_OBJECT(s); - // SE_PRECONDITION2(cobj, false, "Invalid Native Object"); - if (nullptr == cobj) return true; + // js_function + + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - CC_UNUSED bool ok = true; - if (argc == 2) { - HolderType arg0 = {}; - HolderType arg1 = {}; - ok &= sevalue_to_native(args[0], &arg0, s.thisObject()); - ok &= sevalue_to_native(args[1], &arg1, s.thisObject()); - SE_PRECONDITION2(ok, false, "Error processing arguments"); - cobj->setXRIntConfig(arg0.value(), arg1.value()); - return true; + cc::xr::XrEntry *arg1 = (cc::xr::XrEntry *) NULL ; + int arg2 ; + void *arg3 = (void *) NULL ; + + if(argc != 2) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); + return false; } - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); - return false; + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "XrEntry_setXRPointerConfig,2,SWIGTYPE_int"); + ok &= sevalue_to_native(args[1], &arg3); + SE_PRECONDITION2(ok, false, "XrEntry_setXRPointerConfig,3,SWIGTYPE_p_void"); + (arg1)->setXRPointerConfig(arg2,arg3); + + + return true; } -SE_BIND_FUNC(js_xr_XrEntry_setXRIntConfig) +SE_BIND_FUNC(js_cc_xr_XrEntry_setXRPointerConfig) -static bool js_xr_XrEntry_setXRPointerConfig(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_xr_XrEntry_getXRIntConfig(se::State& s) { - auto* cobj = SE_THIS_OBJECT(s); - // SE_PRECONDITION2(cobj, false, "Invalid Native Object"); - if (nullptr == cobj) return true; + // js_function + + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - CC_UNUSED bool ok = true; - if (argc == 2) { - HolderType arg0 = {}; - HolderType arg1 = {}; - ok &= sevalue_to_native(args[0], &arg0, s.thisObject()); - ok &= sevalue_to_native(args[1], &arg1, s.thisObject()); - SE_PRECONDITION2(ok, false, "Error processing arguments"); - cobj->setXRPointerConfig(arg0.value(), arg1.value()); - return true; + cc::xr::XrEntry *arg1 = (cc::xr::XrEntry *) NULL ; + int arg2 ; + int result; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; } - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); - return false; + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "XrEntry_getXRIntConfig,2,SWIGTYPE_int"); + result = (int)(arg1)->getXRIntConfig(arg2); + + // out 1 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + + + return true; } -SE_BIND_FUNC(js_xr_XrEntry_setXRPointerConfig) +SE_BIND_FUNC(js_cc_xr_XrEntry_getXRIntConfig) -static bool js_xr_XrEntry_setXRStringConfig(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_xr_XrEntry_getXRBoolConfig(se::State& s) { - auto* cobj = SE_THIS_OBJECT(s); - // SE_PRECONDITION2(cobj, false, "Invalid Native Object"); - if (nullptr == cobj) return true; + // js_function + + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - CC_UNUSED bool ok = true; - if (argc == 2) { - HolderType arg0 = {}; - HolderType arg1 = {}; - ok &= sevalue_to_native(args[0], &arg0, s.thisObject()); - ok &= sevalue_to_native(args[1], &arg1, s.thisObject()); - SE_PRECONDITION2(ok, false, "Error processing arguments"); - cobj->setXRStringConfig(arg0.value(), arg1.value()); - return true; + cc::xr::XrEntry *arg1 = (cc::xr::XrEntry *) NULL ; + int arg2 ; + bool result; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; } - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); - return false; + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "XrEntry_getXRBoolConfig,2,SWIGTYPE_int"); + result = (bool)(arg1)->getXRBoolConfig(arg2); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + + + return true; } -SE_BIND_FUNC(js_xr_XrEntry_setXRStringConfig) +SE_BIND_FUNC(js_cc_xr_XrEntry_getXRBoolConfig) -static bool js_xr_XrEntry_waitFrame(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_xr_XrEntry_getXRFloatConfig(se::State& s) { - auto* cobj = SE_THIS_OBJECT(s); - // SE_PRECONDITION2(cobj, false, "Invalid Native Object"); - if (nullptr == cobj) return true; + // js_function + + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - if (argc == 0) { - cobj->waitFrame(); - return true; + cc::xr::XrEntry *arg1 = (cc::xr::XrEntry *) NULL ; + int arg2 ; + float result; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; } - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "XrEntry_getXRFloatConfig,2,SWIGTYPE_int"); + result = (float)(arg1)->getXRFloatConfig(arg2); + + // out 1 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + + + return true; } -SE_BIND_FUNC(js_xr_XrEntry_waitFrame) +SE_BIND_FUNC(js_cc_xr_XrEntry_getXRFloatConfig) -static bool js_xr_XrEntry_destroyInstance_static(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_xr_XrEntry_getXRStringConfig(se::State& s) { + // js_function + + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - if (argc == 0) { - cc::xr::XrEntry::destroyInstance(); - return true; + cc::xr::XrEntry *arg1 = (cc::xr::XrEntry *) NULL ; + int arg2 ; + std::string result; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; } - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "XrEntry_getXRStringConfig,2,SWIGTYPE_int"); + result = (arg1)->getXRStringConfig(arg2); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "XrEntry_getXRStringConfig, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + + return true; } -SE_BIND_FUNC(js_xr_XrEntry_destroyInstance_static) +SE_BIND_FUNC(js_cc_xr_XrEntry_getXRStringConfig) -static bool js_xr_XrEntry_getInstance_static(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_xr_XrEntry_getXRPointerConfig(se::State& s) { + // js_function + + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - CC_UNUSED bool ok = true; - if (argc == 0) { - cc::xr::XrEntry* result = cc::xr::XrEntry::getInstance(); - ok &= nativevalue_to_se(result, s.rval(), nullptr /*ctx*/); - SE_PRECONDITION2(ok, false, "Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - return true; + cc::xr::XrEntry *arg1 = (cc::xr::XrEntry *) NULL ; + int arg2 ; + void *result = 0 ; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; } - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "XrEntry_getXRPointerConfig,2,SWIGTYPE_int"); + result = (void *)(arg1)->getXRPointerConfig(arg2); + // %typemap(out) SWIGTYPE* + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "XrEntry_getXRPointerConfig, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + return true; } -SE_BIND_FUNC(js_xr_XrEntry_getInstance_static) +SE_BIND_FUNC(js_cc_xr_XrEntry_getXRPointerConfig) -bool js_register_xr_XrEntry(se::Object* obj) // NOLINT(readability-identifier-naming) +static bool js_delete_cc_xr_XrEntry(se::State& s) { - auto* cls = se::Class::create("XrEntry", obj, nullptr, nullptr); + // js_dtoroverride + return true; +} +SE_BIND_FINALIZE_FUNC(js_delete_cc_xr_XrEntry) -#if CC_DEBUG - cls->defineStaticProperty("isJSBClass", _SE(js_xr_getter_return_true), nullptr); -#endif - cls->defineFunction("acquireXrSwapchain", _SE(js_xr_XrEntry_acquireXrSwapchain)); - cls->defineFunction("computeViewProjection", _SE(js_xr_XrEntry_computeViewProjection)); - cls->defineFunction("createXrInstance", _SE(js_xr_XrEntry_createXrInstance)); - cls->defineFunction("destroyXrInstance", _SE(js_xr_XrEntry_destroyXrInstance)); - cls->defineFunction("frameEnd", _SE(js_xr_XrEntry_frameEnd)); - cls->defineFunction("frameStart", _SE(js_xr_XrEntry_frameStart)); - cls->defineFunction("getCocosXrSwapchains", _SE(js_xr_XrEntry_getCocosXrSwapchains)); - cls->defineFunction("getCurrentXrSwapchain", _SE(js_xr_XrEntry_getCurrentXrSwapchain)); - cls->defineFunction("getHMDViewPosition", _SE(js_xr_XrEntry_getHMDViewPosition)); - cls->defineFunction("getSwapchainImageIndex", _SE(js_xr_XrEntry_getSwapchainImageIndex)); - cls->defineFunction("getXRBoolConfig", _SE(js_xr_XrEntry_getXRBoolConfig)); - cls->defineFunction("getXRFloatConfig", _SE(js_xr_XrEntry_getXRFloatConfig)); - cls->defineFunction("getXRIntConfig", _SE(js_xr_XrEntry_getXRIntConfig)); - cls->defineFunction("getXRPointerConfig", _SE(js_xr_XrEntry_getXRPointerConfig)); - cls->defineFunction("getXRStringConfig", _SE(js_xr_XrEntry_getXRStringConfig)); - cls->defineFunction("getXrViewCount", _SE(js_xr_XrEntry_getXrViewCount)); - cls->defineFunction("initPlatformData", _SE(js_xr_XrEntry_initPlatformData)); - cls->defineFunction("initXrSwapchains", _SE(js_xr_XrEntry_initXrSwapchains)); - cls->defineFunction("isCreatedXrInstance", _SE(js_xr_XrEntry_isCreatedXrInstance)); - cls->defineFunction("isRenderAllowable", _SE(js_xr_XrEntry_isRenderAllowable)); - cls->defineFunction("isSessionRunning", _SE(js_xr_XrEntry_isSessionRunning)); - cls->defineFunction("pauseXrInstance", _SE(js_xr_XrEntry_pauseXrInstance)); - cls->defineFunction("platformLoopEnd", _SE(js_xr_XrEntry_platformLoopEnd)); - cls->defineFunction("platformLoopStart", _SE(js_xr_XrEntry_platformLoopStart)); - cls->defineFunction("renderLoopEnd", _SE(js_xr_XrEntry_renderLoopEnd)); - cls->defineFunction("renderLoopStart", _SE(js_xr_XrEntry_renderLoopStart)); - cls->defineFunction("resumeXrInstance", _SE(js_xr_XrEntry_resumeXrInstance)); - cls->defineFunction("setBaseSpaceType", _SE(js_xr_XrEntry_setBaseSpaceType)); - cls->defineFunction("setIPDOffset", _SE(js_xr_XrEntry_setIPDOffset)); - cls->defineFunction("setMultisamplesRTT", _SE(js_xr_XrEntry_setMultisamplesRTT)); - cls->defineFunction("setRenderingScale", _SE(js_xr_XrEntry_setRenderingScale)); - cls->defineFunction("setXRBoolConfig", _SE(js_xr_XrEntry_setXRBoolConfig)); - cls->defineFunction("setXRFloatConfig", _SE(js_xr_XrEntry_setXRFloatConfig)); - cls->defineFunction("setXRIntConfig", _SE(js_xr_XrEntry_setXRIntConfig)); - cls->defineFunction("setXRPointerConfig", _SE(js_xr_XrEntry_setXRPointerConfig)); - cls->defineFunction("setXRStringConfig", _SE(js_xr_XrEntry_setXRStringConfig)); - cls->defineFunction("waitFrame", _SE(js_xr_XrEntry_waitFrame)); - cls->defineStaticFunction("destroyInstance", _SE(js_xr_XrEntry_destroyInstance_static)); - cls->defineStaticFunction("getInstance", _SE(js_xr_XrEntry_getInstance_static)); +bool js_register_cc_xr_XrEntry(se::Object* obj) { + auto* cls = se::Class::create("XrEntry", obj, nullptr, nullptr); + + + cls->defineFunction("initPlatformData", _SE(js_cc_xr_XrEntry_initPlatformData)); + cls->defineFunction("createXrInstance", _SE(js_cc_xr_XrEntry_createXrInstance)); + cls->defineFunction("pauseXrInstance", _SE(js_cc_xr_XrEntry_pauseXrInstance)); + cls->defineFunction("resumeXrInstance", _SE(js_cc_xr_XrEntry_resumeXrInstance)); + cls->defineFunction("destroyXrInstance", _SE(js_cc_xr_XrEntry_destroyXrInstance)); + cls->defineFunction("getXrViewCount", _SE(js_cc_xr_XrEntry_getXrViewCount)); + cls->defineFunction("initXrSwapchains", _SE(js_cc_xr_XrEntry_initXrSwapchains)); + cls->defineFunction("isCreatedXrInstance", _SE(js_cc_xr_XrEntry_isCreatedXrInstance)); + cls->defineFunction("getCocosXrSwapchains", _SE(js_cc_xr_XrEntry_getCocosXrSwapchains)); + cls->defineFunction("getCurrentXrSwapchain", _SE(js_cc_xr_XrEntry_getCurrentXrSwapchain)); + cls->defineFunction("acquireXrSwapchain", _SE(js_cc_xr_XrEntry_acquireXrSwapchain)); + cls->defineFunction("isSessionRunning", _SE(js_cc_xr_XrEntry_isSessionRunning)); + cls->defineFunction("frameStart", _SE(js_cc_xr_XrEntry_frameStart)); + cls->defineFunction("renderLoopStart", _SE(js_cc_xr_XrEntry_renderLoopStart)); + cls->defineFunction("renderLoopEnd", _SE(js_cc_xr_XrEntry_renderLoopEnd)); + cls->defineFunction("frameEnd", _SE(js_cc_xr_XrEntry_frameEnd)); + cls->defineFunction("isRenderAllowable", _SE(js_cc_xr_XrEntry_isRenderAllowable)); + cls->defineFunction("setXRConfigCallback", _SE(js_cc_xr_XrEntry_setXRConfigCallback)); + cls->defineFunction("computeViewProjection", _SE(js_cc_xr_XrEntry_computeViewProjection)); + cls->defineFunction("getSwapchainImageIndex", _SE(js_cc_xr_XrEntry_getSwapchainImageIndex)); + cls->defineFunction("setMultisamplesRTT", _SE(js_cc_xr_XrEntry_setMultisamplesRTT)); + cls->defineFunction("setRenderingScale", _SE(js_cc_xr_XrEntry_setRenderingScale)); + cls->defineFunction("setIPDOffset", _SE(js_cc_xr_XrEntry_setIPDOffset)); + cls->defineFunction("setBaseSpaceType", _SE(js_cc_xr_XrEntry_setBaseSpaceType)); + cls->defineFunction("getHMDViewPosition", _SE(js_cc_xr_XrEntry_getHMDViewPosition)); + cls->defineFunction("platformLoopStart", _SE(js_cc_xr_XrEntry_platformLoopStart)); + cls->defineFunction("platformLoopEnd", _SE(js_cc_xr_XrEntry_platformLoopEnd)); + cls->defineFunction("waitFrame", _SE(js_cc_xr_XrEntry_waitFrame)); + cls->defineFunction("setXRIntConfig", _SE(js_cc_xr_XrEntry_setXRIntConfig)); + cls->defineFunction("setXRBoolConfig", _SE(js_cc_xr_XrEntry_setXRBoolConfig)); + cls->defineFunction("setXRFloatConfig", _SE(js_cc_xr_XrEntry_setXRFloatConfig)); + cls->defineFunction("setXRStringConfig", _SE(js_cc_xr_XrEntry_setXRStringConfig)); + cls->defineFunction("setXRPointerConfig", _SE(js_cc_xr_XrEntry_setXRPointerConfig)); + cls->defineFunction("getXRIntConfig", _SE(js_cc_xr_XrEntry_getXRIntConfig)); + cls->defineFunction("getXRBoolConfig", _SE(js_cc_xr_XrEntry_getXRBoolConfig)); + cls->defineFunction("getXRFloatConfig", _SE(js_cc_xr_XrEntry_getXRFloatConfig)); + cls->defineFunction("getXRStringConfig", _SE(js_cc_xr_XrEntry_getXRStringConfig)); + cls->defineFunction("getXRPointerConfig", _SE(js_cc_xr_XrEntry_getXRPointerConfig)); + + + cls->defineStaticFunction("getInstance", _SE(js_cc_xr_XrEntry_getInstance_static)); + cls->defineStaticFunction("destroyInstance", _SE(js_cc_xr_XrEntry_destroyInstance_static)); + + + cls->defineFinalizeFunction(_SE(js_delete_cc_xr_XrEntry)); + + cls->install(); JSBClassType::registerClass(cls); - + __jsb_cc_xr_XrEntry_proto = cls->getProto(); __jsb_cc_xr_XrEntry_class = cls; - - se::ScriptEngine::getInstance()->clearException(); return true; } -bool register_all_xr(se::Object* obj) // NOLINT -{ + + + + +bool register_all_xr(se::Object* obj) { // Get the ns se::Value nsVal; - if (!obj->getProperty("xr", &nsVal, true)) + if (!obj->getProperty("jsb", &nsVal, true)) { se::HandleObject jsobj(se::Object::createPlainObject()); nsVal.setObject(jsobj); - obj->setProperty("xr", nsVal); + obj->setProperty("jsb", nsVal); } se::Object* ns = nsVal.toObject(); - - js_register_xr_XrEntry(ns); + /* Register classes */ + js_register_cc_xr_XrEntry(ns); + + /* Register global variables & global functions */ + + + return true; } -#endif //#if (CC_USE_XR > 0) -// clang-format on \ No newline at end of file + +#if defined(__clang__) +#pragma clang diagnostic pop +#elif defined(__GNUC__) || defined(__GNUG__) +#pragma GCC diagnostic pop +#elif defined(_MSC_VER) +#pragma warning(pop) +#endif +// clang-format on diff --git a/native/cocos/bindings/auto/jsb_xr_auto.h b/native/cocos/bindings/auto/jsb_xr_auto.h index 025d33ac7b5..05855294330 100644 --- a/native/cocos/bindings/auto/jsb_xr_auto.h +++ b/native/cocos/bindings/auto/jsb_xr_auto.h @@ -1,60 +1,54 @@ // clang-format off -#pragma once -#if (CC_USE_XR > 0) +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 4.1.0 + * + * This file is not intended to be easily readable and contains a number of + * coding conventions designed to improve portability and efficiency. Do not make + * changes to this file unless you know what you are doing--modify the SWIG + * interface file instead. + * ----------------------------------------------------------------------------- */ + +/**************************************************************************** + Copyright (c) 2022 Xiamen Yaji Software Co., Ltd. + + http://www.cocos.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated engine source code (the "Software"), a limited, + worldwide, royalty-free, non-assignable, revocable and non-exclusive license + to use Cocos Creator solely to develop games on your target platforms. You shall + not use Cocos Creator software for developing other software or tools that's + used for developing games. You are not granted to publish, distribute, + sublicense, and/or sell copies of Cocos Creator. + + The software or tools in this License Agreement are licensed, not sold. + Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +****************************************************************************/ + +#pragma once #include #include "cocos/bindings/jswrapper/SeApi.h" #include "cocos/bindings/manual/jsb_conversions.h" #include "cocos/xr/Xr.h" -bool register_all_xr(se::Object *obj); // NOLINT -JSB_REGISTER_OBJECT_TYPE(cc::xr::XrEntry); -extern se::Object *__jsb_cc_xr_XrEntry_proto; // NOLINT -extern se::Class *__jsb_cc_xr_XrEntry_class; // NOLINT - -bool js_register_cc_xr_XrEntry(se::Object *obj); // NOLINT - -SE_DECLARE_FUNC(js_xr_XrEntry_acquireXrSwapchain); -SE_DECLARE_FUNC(js_xr_XrEntry_computeViewProjection); -SE_DECLARE_FUNC(js_xr_XrEntry_createXrInstance); -SE_DECLARE_FUNC(js_xr_XrEntry_destroyXrInstance); -SE_DECLARE_FUNC(js_xr_XrEntry_frameEnd); -SE_DECLARE_FUNC(js_xr_XrEntry_frameStart); -SE_DECLARE_FUNC(js_xr_XrEntry_getCocosXrSwapchains); -SE_DECLARE_FUNC(js_xr_XrEntry_getCurrentXrSwapchain); -SE_DECLARE_FUNC(js_xr_XrEntry_getHMDViewPosition); -SE_DECLARE_FUNC(js_xr_XrEntry_getSwapchainImageIndex); -SE_DECLARE_FUNC(js_xr_XrEntry_getXRBoolConfig); -SE_DECLARE_FUNC(js_xr_XrEntry_getXRFloatConfig); -SE_DECLARE_FUNC(js_xr_XrEntry_getXRIntConfig); -SE_DECLARE_FUNC(js_xr_XrEntry_getXRPointerConfig); -SE_DECLARE_FUNC(js_xr_XrEntry_getXRStringConfig); -SE_DECLARE_FUNC(js_xr_XrEntry_getXrViewCount); -SE_DECLARE_FUNC(js_xr_XrEntry_initPlatformData); -SE_DECLARE_FUNC(js_xr_XrEntry_initXrSwapchains); -SE_DECLARE_FUNC(js_xr_XrEntry_isCreatedXrInstance); -SE_DECLARE_FUNC(js_xr_XrEntry_isRenderAllowable); -SE_DECLARE_FUNC(js_xr_XrEntry_isSessionRunning); -SE_DECLARE_FUNC(js_xr_XrEntry_pauseXrInstance); -SE_DECLARE_FUNC(js_xr_XrEntry_platformLoopEnd); -SE_DECLARE_FUNC(js_xr_XrEntry_platformLoopStart); -SE_DECLARE_FUNC(js_xr_XrEntry_renderLoopEnd); -SE_DECLARE_FUNC(js_xr_XrEntry_renderLoopStart); -SE_DECLARE_FUNC(js_xr_XrEntry_resumeXrInstance); -SE_DECLARE_FUNC(js_xr_XrEntry_setBaseSpaceType); -SE_DECLARE_FUNC(js_xr_XrEntry_setIPDOffset); -SE_DECLARE_FUNC(js_xr_XrEntry_setMultisamplesRTT); -SE_DECLARE_FUNC(js_xr_XrEntry_setRenderingScale); -SE_DECLARE_FUNC(js_xr_XrEntry_setXRBoolConfig); -SE_DECLARE_FUNC(js_xr_XrEntry_setXRFloatConfig); -SE_DECLARE_FUNC(js_xr_XrEntry_setXRIntConfig); -SE_DECLARE_FUNC(js_xr_XrEntry_setXRPointerConfig); -SE_DECLARE_FUNC(js_xr_XrEntry_setXRStringConfig); -SE_DECLARE_FUNC(js_xr_XrEntry_waitFrame); -SE_DECLARE_FUNC(js_xr_XrEntry_destroyInstance); -SE_DECLARE_FUNC(js_xr_XrEntry_getInstance); -#endif //#if (CC_USE_XR > 0) +bool register_all_xr(se::Object* obj); + + +JSB_REGISTER_OBJECT_TYPE(cc::xr::XrEntry); +extern se::Object *__jsb_cc_xr_XrEntry_proto; // NOLINT +extern se::Class * __jsb_cc_xr_XrEntry_class; // NOLINT + // clang-format on From eb18f168238a8243b22beee450cfb166e74be2e1 Mon Sep 17 00:00:00 2001 From: hyde zhou Date: Wed, 26 Oct 2022 13:51:28 +0800 Subject: [PATCH 084/829] [develop] web-pipeline updated (#13145) --- cocos/rendering/custom/executor.ts | 35 +++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/cocos/rendering/custom/executor.ts b/cocos/rendering/custom/executor.ts index a16c3b3d12e..c52be981ad9 100644 --- a/cocos/rendering/custom/executor.ts +++ b/cocos/rendering/custom/executor.ts @@ -1230,14 +1230,36 @@ class DeviceSceneTask extends WebSceneTask { fromDesc.update(); const fromGpuDesc = fromDesc.gpuDescriptorSet; const toGpuDesc = toDesc.gpuDescriptorSet; + const extResId: number[] = []; for (let i = 0; i < toGpuDesc.gpuDescriptors.length; i++) { const currRes = toGpuDesc.gpuDescriptors[i]; - if (!currRes.gpuBuffer) { + if (!currRes.gpuBuffer && fromGpuDesc.gpuDescriptors[i].gpuBuffer) { currRes.gpuBuffer = fromGpuDesc.gpuDescriptors[i].gpuBuffer; - } else if (!currRes.gpuTextureView) { + extResId.push(i); + } else if ('gpuTextureView' in currRes && !currRes.gpuTextureView) { currRes.gpuTextureView = fromGpuDesc.gpuDescriptors[i].gpuTextureView; - } else if (!currRes.gpuSampler) { currRes.gpuSampler = fromGpuDesc.gpuDescriptors[i].gpuSampler; + extResId.push(i); + } else if ('gpuTexture' in currRes && !currRes.gpuTexture) { + currRes.gpuTexture = fromGpuDesc.gpuDescriptors[i].gpuTexture; + currRes.gpuSampler = fromGpuDesc.gpuDescriptors[i].gpuSampler; + extResId.push(i); + } + } + return extResId; + } + + private _clearExtBlitDesc (desc, extResId: number[]) { + const toGpuDesc = desc.gpuDescriptorSet; + for (let i = 0; i < extResId.length; i++) { + const currDesc = toGpuDesc.gpuDescriptors[extResId[i]]; + if (currDesc.gpuBuffer) currDesc.gpuBuffer = null; + else if (currDesc.gpuTextureView) { + currDesc.gpuTextureView = null; + currDesc.gpuSampler = null; + } else if (currDesc.gpuTexture) { + currDesc.gpuTexture = null; + currDesc.gpuSampler = null; } } } @@ -1272,12 +1294,15 @@ class DeviceSceneTask extends WebSceneTask { if (pso) { this.visitor.bindPipelineState(pso); const layoutStage = devicePass.renderLayout; - this._mergeMatToBlitDesc(pass.descriptorSet, layoutStage!.descriptorSet!); + const layoutDesc = layoutStage!.descriptorSet!; + const extResId: number[] = this._mergeMatToBlitDesc(pass.descriptorSet, layoutDesc); // TODO: It will be changed to global later - this.visitor.bindDescriptorSet(SetIndex.MATERIAL, layoutStage!.descriptorSet!); + this.visitor.bindDescriptorSet(SetIndex.MATERIAL, layoutDesc); this.visitor.bindDescriptorSet(SetIndex.LOCAL, this._currentQueue.blitDesc!.stageDesc!); this.visitor.bindInputAssembler(screenIa); this.visitor.draw(screenIa); + // The desc data obtained from the outside should be cleaned up so that the data can be modified + this._clearExtBlitDesc(layoutDesc, extResId); } this._endBindBlitUbo(devicePass); } From a354281d7e282d2f4e49b2aae218ca12f3d71363 Mon Sep 17 00:00:00 2001 From: minggo Date: Wed, 26 Oct 2022 15:19:26 +0800 Subject: [PATCH 085/829] Fix core import issue (#13148) * import binarySearchEpsilon from core module * remove unused files * import easing from core module * use array instead * do not export MutableForwardIterator * do not export binarySearchBy * print deprecated information in runtime --- cocos/animation/animation-clip.ts | 3 +- cocos/animation/animation-component.ts | 3 +- cocos/animation/animation-curve.ts | 5 +- cocos/animation/animation-manager.ts | 7 +- cocos/animation/cross-fade.ts | 5 +- .../exotic-animation/exotic-animation.ts | 3 +- cocos/animation/legacy-clip-data.ts | 5 +- cocos/animation/marionette/animation-graph.ts | 25 +- cocos/animation/marionette/animation-mask.ts | 4 +- cocos/animation/marionette/state.ts | 4 +- cocos/animation/motion-path-helper.ts | 433 ------------------ cocos/asset/assets/simple-texture.jsb.ts | 5 +- cocos/asset/assets/simple-texture.ts | 4 +- cocos/audio/audio-manager.ts | 12 +- cocos/core/algorithm/binary-search.ts | 3 + cocos/core/curves/curve.ts | 3 +- cocos/core/curves/keyframe-curve.ts | 1 - cocos/core/curves/keys-shared-curves.ts | 2 +- cocos/core/deprecated-3.7.0.ts | 33 ++ cocos/core/index.ts | 2 + cocos/core/utils/array.ts | 47 +- cocos/core/utils/index.ts | 4 +- cocos/core/utils/js.ts | 10 +- cocos/core/utils/mutable-forward-iterator.ts | 1 + cocos/game/splash-screen.ts | 3 +- .../platform/physics-contact-listener.ts | 4 +- cocos/physics/bullet/bullet-shared-body.ts | 10 +- cocos/physics/bullet/bullet-world.ts | 7 +- cocos/physics/cannon/cannon-shared-body.ts | 8 +- cocos/physics/cannon/cannon-world.ts | 7 +- cocos/physics/cocos/builtin-shared-body.ts | 5 +- cocos/physics/cocos/builtin-world.ts | 5 +- cocos/physics/physx/physx-shared-body.ts | 9 +- cocos/physics/physx/physx-world.ts | 5 +- cocos/scene-graph/component-scheduler.ts | 13 +- pal/input/native/gamepad-input.ts | 4 +- pal/input/web/gamepad-input.ts | 4 +- tests/animation/cross-fade.test.ts | 4 +- 38 files changed, 150 insertions(+), 562 deletions(-) delete mode 100644 cocos/animation/motion-path-helper.ts create mode 100644 cocos/core/deprecated-3.7.0.ts diff --git a/cocos/animation/animation-clip.ts b/cocos/animation/animation-clip.ts index bca57917e06..5e18219b3b2 100644 --- a/cocos/animation/animation-clip.ts +++ b/cocos/animation/animation-clip.ts @@ -27,8 +27,7 @@ import { ccclass, serializable } from 'cc.decorator'; import { DEBUG } from 'internal:constants'; import { Asset } from '../asset/assets/asset'; import { SpriteFrame } from '../2d/assets/sprite-frame'; -import { errorID, warnID, cclegacy, js, geometry, approx, clamp, Mat4, Quat, Vec3, murmurhash2_32_gc } from '../core'; -import { binarySearchEpsilon } from '../core/algorithm/binary-search'; +import { errorID, warnID, cclegacy, js, geometry, approx, clamp, Mat4, Quat, Vec3, murmurhash2_32_gc, binarySearchEpsilon } from '../core'; import { SkelAnimDataHub } from '../3d/skeletal-animation/skeletal-animation-data-hub'; import { WrapMode as AnimationWrapMode, WrapMode } from './types'; import { Node } from '../scene-graph/node'; diff --git a/cocos/animation/animation-component.ts b/cocos/animation/animation-component.ts index 8f920dec2c8..77397a3c56d 100644 --- a/cocos/animation/animation-component.ts +++ b/cocos/animation/animation-component.ts @@ -27,7 +27,6 @@ import { ccclass, executeInEditMode, executionOrder, help, menu, tooltip, type, import { EDITOR, TEST } from 'internal:constants'; import { Component } from '../scene-graph/component'; import { Eventify, warnID, js, cclegacy } from '../core'; -import * as ArrayUtils from '../core/utils/array'; import { createMap } from '../core/utils/js-typed'; import { AnimationClip } from './animation-clip'; import { AnimationState, EventType } from './animation-state'; @@ -319,7 +318,7 @@ export class Animation extends Eventify(Component) { * @returns The created animation state */ public addClip (clip: AnimationClip, name?: string): AnimationState { - if (!ArrayUtils.contains(this._clips, clip)) { + if (js.array.contains(this._clips, clip)) { this._clips.push(clip); } return this.createState(clip, name); diff --git a/cocos/animation/animation-curve.ts b/cocos/animation/animation-curve.ts index 963a6185726..dcfe66d1f43 100644 --- a/cocos/animation/animation-curve.ts +++ b/cocos/animation/animation-curve.ts @@ -23,8 +23,7 @@ THE SOFTWARE. */ -import { binarySearchEpsilon as binarySearch } from '../core/algorithm/binary-search'; -import { lerp, Quat, errorID, cclegacy } from '../core'; +import { lerp, Quat, errorID, cclegacy, binarySearchEpsilon } from '../core'; import { ValueType } from '../core/value-types'; import { bezierByTime, BezierControlPoints } from '../core/curves/bezier'; import * as easing from '../core/algorithm/easing'; @@ -55,7 +54,7 @@ export class RatioSampler { break; } } - this._findRatio = canOptimize ? quickFindIndex : binarySearch; + this._findRatio = canOptimize ? quickFindIndex : binarySearchEpsilon; } public sample (ratio: number) { diff --git a/cocos/animation/animation-manager.ts b/cocos/animation/animation-manager.ts index bb70a597a19..f546fc0c526 100644 --- a/cocos/animation/animation-manager.ts +++ b/cocos/animation/animation-manager.ts @@ -24,10 +24,9 @@ */ import { ccclass } from 'cc.decorator'; -import { System, errorID, cclegacy } from '../core'; +import { System, errorID, cclegacy, js } from '../core'; import { director, Director } from '../game/director'; import { Node } from '../scene-graph'; -import { MutableForwardIterator } from '../core/utils/array'; import { LegacyBlendStateBuffer } from '../3d/skeletal-animation/skeletal-animation-blending'; import { AnimationState } from './animation-state'; import type { CrossFade } from './cross-fade'; @@ -46,8 +45,8 @@ export class AnimationManager extends System { } public static ID = 'animation'; - private _anims = new MutableForwardIterator([]); - private _crossFades = new MutableForwardIterator([]); + private _anims = new js.array.MutableForwardIterator([]); + private _crossFades = new js.array.MutableForwardIterator([]); private _delayEvents: { fn: (...args: any[]) => void; thisArg: any; diff --git a/cocos/animation/cross-fade.ts b/cocos/animation/cross-fade.ts index bcf8f0e3443..f3f33b3b0df 100644 --- a/cocos/animation/cross-fade.ts +++ b/cocos/animation/cross-fade.ts @@ -23,8 +23,7 @@ THE SOFTWARE. */ -import { clamp01 } from '../core'; -import { remove } from '../core/utils/array'; +import { clamp01, js } from '../core'; import { AnimationState } from './animation-state'; import { Playable } from './playable'; import { getGlobalAnimationManager } from './global-animation-manager'; @@ -212,7 +211,7 @@ export class CrossFade extends Playable { if (deadFading.target.state) { deadFading.target.state.stop(); } - remove(this._managedStates, deadFading.target); + js.array.remove(this._managedStates, deadFading.target); } } fadings.splice(deadFadingBegin); diff --git a/cocos/animation/exotic-animation/exotic-animation.ts b/cocos/animation/exotic-animation/exotic-animation.ts index 71bc1289edb..28c81fcbaa6 100644 --- a/cocos/animation/exotic-animation/exotic-animation.ts +++ b/cocos/animation/exotic-animation/exotic-animation.ts @@ -1,8 +1,7 @@ import { EDITOR, TEST } from 'internal:constants'; -import { binarySearchEpsilon } from '../../core/algorithm/binary-search'; +import { binarySearchEpsilon, clamp, lerp, Quat, Vec3 } from '../../core'; import { ccclass, serializable } from '../../core/data/decorators'; import { assertIsTrue } from '../../core/data/utils/asserts'; -import { clamp, lerp, Quat, Vec3 } from '../../core'; import { CLASS_NAME_PREFIX_ANIM } from '../define'; import { Binder, RuntimeBinding, TrackBinding, TrackPath } from '../tracks/track'; diff --git a/cocos/animation/legacy-clip-data.ts b/cocos/animation/legacy-clip-data.ts index 33a61deac2d..33c19e0e95d 100644 --- a/cocos/animation/legacy-clip-data.ts +++ b/cocos/animation/legacy-clip-data.ts @@ -1,11 +1,10 @@ import { ComponentPath, HierarchyPath, TargetPath } from './target-path'; import { IValueProxyFactory } from './value-proxy'; -import * as easing from '../core/algorithm/easing'; +import { easing, QuatCurve, QuatInterpolationMode, RealCurve, RealInterpolationMode, RealKeyframeValue, TangentWeightMode, + warnID, Color, Quat, Size, Vec2, Vec3, Vec4 } from '../core'; import { BezierControlPoints } from '../core/curves/bezier'; import { CompactValueTypeArray } from '../core/data/utils/compact-value-type-array'; import { AnimCurve, RatioSampler } from './animation-curve'; -import { QuatCurve, QuatInterpolationMode, RealCurve, RealInterpolationMode, RealKeyframeValue, TangentWeightMode, - warnID, Color, Quat, Size, Vec2, Vec3, Vec4 } from '../core'; import { assertIsTrue } from '../core/data/utils/asserts'; import { Track, TrackPath } from './tracks/track'; import { UntypedTrack } from './tracks/untyped-track'; diff --git a/cocos/animation/marionette/animation-graph.ts b/cocos/animation/marionette/animation-graph.ts index 8481572d819..4ebb070c19a 100644 --- a/cocos/animation/marionette/animation-graph.ts +++ b/cocos/animation/marionette/animation-graph.ts @@ -1,6 +1,6 @@ import { ccclass, serializable } from 'cc.decorator'; import { DEBUG } from 'internal:constants'; -import { remove, removeIf } from '../../core/utils/array'; +import { js, clamp } from '../../core'; import { assertIsNonNullable, assertIsTrue } from '../../core/data/utils/asserts'; import { MotionEval, MotionEvalContext } from './motion'; import type { Condition } from './condition'; @@ -16,7 +16,6 @@ import { EditorExtendable } from '../../core/data/editor-extendable'; import { move } from '../../core/algorithm/move'; import { onAfterDeserializedTag } from '../../core/data/deserialize-symbols'; import { CLASS_NAME_PREFIX_ANIM } from '../define'; -import { clamp, js } from '../../core'; export { State }; @@ -374,7 +373,7 @@ export class StateMachine extends EditorExtendable { } this.eraseTransitionsIncludes(state); - remove(this._states, state); + js.array.remove(this._states, state); markAsDangling(state); } @@ -450,12 +449,12 @@ export class StateMachine extends EditorExtendable { ++iOTransitionToRemove ) { const oTransition = oTransitionsToRemove[iOTransitionToRemove]; - remove(oTransitions, oTransition); + js.array.remove(oTransitions, oTransition); assertIsTrue( - remove(transitions, oTransition), + js.array.remove(transitions, oTransition), ); assertIsNonNullable( - removeIf(iTransitions, (transition) => transition === oTransition), + js.array.removeIf(iTransitions, (transition) => transition === oTransition), ); markAsDangling(oTransition); } @@ -463,13 +462,13 @@ export class StateMachine extends EditorExtendable { public removeTransition (removal: Transition) { assertIsTrue( - remove(this._transitions, removal), + js.array.remove(this._transitions, removal), ); assertIsNonNullable( - removeIf(removal.from[outgoingsSymbol], (transition) => transition === removal), + js.array.removeIf(removal.from[outgoingsSymbol], (transition) => transition === removal), ); assertIsNonNullable( - removeIf(removal.to[incomingsSymbol], (transition) => transition === removal), + js.array.removeIf(removal.to[incomingsSymbol], (transition) => transition === removal), ); markAsDangling(removal); } @@ -482,10 +481,10 @@ export class StateMachine extends EditorExtendable { const oTransition = oTransitions[iOTransition]; const to = oTransition.to; assertIsTrue( - remove(this._transitions, oTransition), + js.array.remove(this._transitions, oTransition), ); assertIsNonNullable( - removeIf(to[incomingsSymbol], (transition) => transition === oTransition), + js.array.removeIf(to[incomingsSymbol], (transition) => transition === oTransition), ); markAsDangling(oTransition); } @@ -500,10 +499,10 @@ export class StateMachine extends EditorExtendable { const iTransition = iTransitions[iITransition]; const from = iTransition.from; assertIsTrue( - remove(this._transitions, iTransition), + js.array.remove(this._transitions, iTransition), ); assertIsNonNullable( - removeIf(from[outgoingsSymbol], (transition) => transition === iTransition), + js.array.removeIf(from[outgoingsSymbol], (transition) => transition === iTransition), ); markAsDangling(iTransition); } diff --git a/cocos/animation/marionette/animation-mask.ts b/cocos/animation/marionette/animation-mask.ts index 7b3327e79a5..1b88eec1e9e 100644 --- a/cocos/animation/marionette/animation-mask.ts +++ b/cocos/animation/marionette/animation-mask.ts @@ -1,7 +1,7 @@ import { ccclass, serializable, editable } from 'cc.decorator'; import type { Node } from '../../scene-graph/node'; import { Asset } from '../../asset/assets/asset'; -import { removeIf } from '../../core/utils/array'; +import { js } from '../../core'; import { CLASS_NAME_PREFIX_ANIM } from '../define'; @ccclass(`${CLASS_NAME_PREFIX_ANIM}AnimationMask`) @@ -38,7 +38,7 @@ export class AnimationMask extends Asset { } public removeJoint (removal: string) { - removeIf(this._jointMasks, ({ path }) => path === removal); + js.array.removeIf(this._jointMasks, ({ path }) => path === removal); } public clear () { diff --git a/cocos/animation/marionette/state.ts b/cocos/animation/marionette/state.ts index c3d3601f8a7..271d8b24e4b 100644 --- a/cocos/animation/marionette/state.ts +++ b/cocos/animation/marionette/state.ts @@ -4,7 +4,7 @@ import type { Layer, StateMachine, TransitionInternal } from './animation-graph' import { EditorExtendable } from '../../core/data/editor-extendable'; import { CLASS_NAME_PREFIX_ANIM } from '../define'; import { StateMachineComponent } from './state-machine-component'; -import { remove } from '../../core/utils/array'; +import { js } from '../../core'; import { instantiate } from '../../core/data/instantiate'; import { editorExtrasTag } from '../../core/data'; import { cloneAnimationGraphEditorExtrasFrom } from './animation-graph-editor-extras-clone-helper'; @@ -49,7 +49,7 @@ export class InteractiveState extends State { } public removeComponent (component: StateMachineComponent) { - remove(this._components, component); + js.array.remove(this._components, component); } public instantiateComponents (): StateMachineComponent[] { diff --git a/cocos/animation/motion-path-helper.ts b/cocos/animation/motion-path-helper.ts deleted file mode 100644 index 961d7f9dca5..00000000000 --- a/cocos/animation/motion-path-helper.ts +++ /dev/null @@ -1,433 +0,0 @@ -/* - Copyright (c) 2020 Xiamen Yaji Software Co., Ltd. - - https://www.cocos.com/ - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated engine source code (the "Software"), a limited, - worldwide, royalty-free, non-assignable, revocable and non-exclusive license - to use Cocos Creator solely to develop games on your target platforms. You shall - not use Cocos Creator software for developing other software or tools that's - used for developing games. You are not granted to publish, distribute, - sublicense, and/or sell copies of Cocos Creator. - - The software or tools in this License Agreement are licensed, not sold. - Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. - */ - -import { binarySearchEpsilon as binarySearch } from '../algorithm/binary-search'; -import { errorID } from '../platform/debug'; -import { Vec2, Vec3 } from '../math'; -import { AnimCurve, computeRatioByType, CurveValue, EasingMethod } from './animation-curve'; -import { bezier } from './bezier'; - -export class Curve { - public beziers: Bezier[] = []; - - public ratios: number[] = []; - - public progresses: number[] = []; - - public length = 0; - - constructor (public points: IControlPoint[] = []) { - this.computeBeziers(); - } - - public computeBeziers () { - this.beziers.length = 0; - this.ratios.length = 0; - this.progresses.length = 0; - this.length = 0; - - for (let i = 1; i < this.points.length; i++) { - const startPoint = this.points[i - 1]; - const endPoint = this.points[i]; - const bezier = new Bezier(); - bezier.start = startPoint.pos; - bezier.startCtrlPoint = startPoint.out; - bezier.end = endPoint.pos; - bezier.endCtrlPoint = endPoint.in; - this.beziers.push(bezier); - - this.length += bezier.getLength(); - } - - let current = 0; - for (let i = 0; i < this.beziers.length; i++) { - const bezier = this.beziers[i]; - this.ratios[i] = bezier.getLength() / this.length; - this.progresses[i] = current = current + this.ratios[i]; - } - - return this.beziers; - } -} - -export class Bezier { - public start = new Vec2(); - - public end = new Vec2(); - - /** - * cp0, cp1 - */ - public startCtrlPoint = new Vec2(); - - /** - * cp2, cp3 - */ - public endCtrlPoint = new Vec2(); - - /** - * @deprecated since v3.5.0, this is an engine private interface that will be removed in the future. - */ - public __arcLengthDivisions?: number; - - private cacheArcLengths?: number[]; - - /** - * Get point at relative position in curve according to arc length - * @param u [0 .. 1] - */ - public getPointAt (u: number) { - const t = this.getUtoTmapping(u); - return this.getPoint(t); - } - - /** - * Get point at time t. - * @param t [0 .. 1] - */ - public getPoint (t: number) { - const x = bezier(this.start.x, this.startCtrlPoint.x, this.endCtrlPoint.x, this.end.x, t); - const y = bezier(this.start.y, this.startCtrlPoint.y, this.endCtrlPoint.y, this.end.y, t); - return new Vec2(x, y); - } - - /** - * Get total curve arc length. - */ - public getLength () { - const lengths = this.getLengths(); - return lengths[lengths.length - 1]; - } - - /** - * Get list of cumulative segment lengths. - */ - public getLengths (divisions?: number) { - if (!divisions) { - divisions = (this.__arcLengthDivisions) ? (this.__arcLengthDivisions) : 200; - } - - if (this.cacheArcLengths - && (this.cacheArcLengths.length === divisions + 1)) { - - // console.log( "cached", this.cacheArcLengths ); - return this.cacheArcLengths; - - } - - const cache: number[] = []; - let current; - let last = this.getPoint(0); - const vector = new Vec2(); - let p; - let sum = 0; - - cache.push(0); - - for (p = 1; p <= divisions; p++) { - - current = this.getPoint(p / divisions); - vector.x = last.x - current.x; - vector.y = last.y - current.y; - sum += vector.length(); - cache.push(sum); - last = current; - - } - - this.cacheArcLengths = cache; - - return cache; // { sums: cache, sum:sum }; Sum is in the last element. - } - - public getUtoTmapping (u: number, distance?: number) { - const arcLengths = this.getLengths(); - - let i = 0; - const il = arcLengths.length; - - let targetArcLength; // The targeted u distance value to get - - if (distance) { - targetArcLength = distance; - } else { - targetArcLength = u * arcLengths[il - 1]; - } - - // var time = Date.now(); - - // binary search for the index with largest value smaller than target u distance - - let low = 0; - let high = il - 1; - let comparison; - - while (low <= high) { - // less likely to overflow, though probably not issue here, JS doesn't really have integers, all numbers are floats - i = Math.floor(low + (high - low) / 2); - comparison = arcLengths[i] - targetArcLength; - if (comparison < 0) { - low = i + 1; - continue; - } else if (comparison > 0) { - high = i - 1; - continue; - } else { - high = i; - break; // DONE - } - } - - i = high; - - // console.log('b' , i, low, high, Date.now()- time); - - if (arcLengths[i] === targetArcLength) { - return i / (il - 1); - } - - // we could get finer grain at lengths, or use simple interpolatation between two points - - const lengthBefore = arcLengths[i]; - const lengthAfter = arcLengths[i + 1]; - - const segmentLength = lengthAfter - lengthBefore; - - // determine where we are between the 'before' and 'after' points - - const segmentFraction = (targetArcLength - lengthBefore) / segmentLength; - - // add that fractional amount to t - - const t = (i + segmentFraction) / (il - 1); - - return t; - } -} - -function checkMotionPath (motionPath) { - if (!Array.isArray(motionPath)) { return false; } - - for (let i = 0, l = motionPath.length; i < l; i++) { - const controls = motionPath[i]; - - if (!Array.isArray(controls) || controls.length !== 6) { return false; } - } - - return true; -} - -interface IControlPoint { - in: Vec2; - pos: Vec2; - out: Vec2; -} - -export type MotionPath = Vec2[]; - -export function sampleMotionPaths (motionPaths: Array<(MotionPath | undefined)>, data: AnimCurve, duration: number, fps: number) { - const createControlPoints = (array: number[] | Vec2): IControlPoint => { - if (array instanceof Vec2) { - return { - in: array, - pos: array, - out: array, - }; - } else if (Array.isArray(array) && array.length === 6) { - return { - in: new Vec2(array[2], array[3]), - pos: new Vec2(array[0], array[1]), - out: new Vec2(array[4], array[5]), - }; - } - return { - in: Vec2.ZERO, - pos: Vec2.ZERO, - out: Vec2.ZERO, - }; - }; - - // @ts-expect-error - const values = data.values = data.values.map((value) => { - if (Array.isArray(value)) { - value = value.length === 2 ? new Vec2(value[0], value[1]) : new Vec3(value[0], value[1], value[2]); - } - return value; - }); - - if (motionPaths.length === 0 || values.length === 0) { - return; - } - - let motionPathValid = false; - for (let i = 0; i < motionPaths.length; i++) { - let motionPath = motionPaths[i]; - if (motionPath && !checkMotionPath(motionPath)) { - errorID(3904, '', 'position', i); - motionPath = undefined; - } - if (motionPath && motionPath.length > 0) { - motionPathValid = true; - break; - } - } - - if (!motionPathValid) { - return; - } - - if (values.length === 1) { - return; - } - - const types = data.types; - // @ts-expect-error - const ratios = (data.ratioSampler ? data.ratioSampler.ratios : []); - - // @ts-expect-error - const newValues: CurveValue[] = data.values = []; - const newTypes: any[] = data.types = []; - // @ts-expect-error - const newRatios: number[] = data.ratios = []; - - function addNewDatas (value: CurveValue, type: any, ratio: number) { - newValues.push(value); - newTypes.push(type); - newRatios.push(ratio); - } - - // ensure every ratio section's length is the same - let startRatioOffset = 0; - - const EPSILON = 1e-6; - let newType: any = AnimCurve.Linear; - - // do not need to compute last path - for (let i = 0, l = motionPaths.length; i < l - 1; i++) { - const motionPath = motionPaths[i]; - - const ratio = ratios[i]; - const nextRatio = ratios[i + 1]; - const betweenRatio = nextRatio - ratio; - - const value = values[i]; - const nextValue = values[i + 1]; - - const type = types && types[i]; - - const results: Vec2[] = []; - let progress = startRatioOffset / betweenRatio; - const speed = 1 / (betweenRatio * duration * fps); - let finalProgress; - - if (motionPath && motionPath.length > 0) { - const points: IControlPoint[] = []; - points.push(createControlPoints(value)); - - for (let j = 0, l2 = motionPath.length; j < l2; j++) { - const controlPoints = createControlPoints(motionPath[j]); - points.push(controlPoints); - } - - points.push(createControlPoints(nextValue)); - - // create Curve to compute beziers - const curve = new Curve(points); - curve.computeBeziers(); - - // sample beziers - const progresses = curve.progresses; - - while (1 - progress > EPSILON) { - finalProgress = progress; - - finalProgress = computeRatioByType(finalProgress, type as EasingMethod); - - let pos = new Vec2(); - - if (finalProgress < 0) { - const bezier = curve.beziers[0]; - const length = (0 - finalProgress) * bezier.getLength(); - const normal = new Vec2(bezier.start); - normal.subtract(bezier.endCtrlPoint); - normal.normalize(); - normal.multiplyScalar(length); - pos.set(bezier.start); - pos.add(normal); - } else if (finalProgress > 1) { - const bezier = curve.beziers[curve.beziers.length - 1]; - const length = (finalProgress - 1) * bezier.getLength(); - const normal = new Vec2(bezier.end); - normal.subtract(bezier.startCtrlPoint); - normal.normalize(); - normal.multiplyScalar(length); - pos.set(bezier.end); - pos.add(normal); - } else { - let bezierIndex = binarySearch(progresses, finalProgress); - if (bezierIndex < 0) { bezierIndex = ~bezierIndex; } - - finalProgress -= bezierIndex > 0 ? progresses[bezierIndex - 1] : 0; - finalProgress = finalProgress / curve.ratios[bezierIndex]; - - pos = curve.beziers[bezierIndex].getPointAt(finalProgress); - } - - results.push(pos); - progress += speed; - } - - } - else { - while (1 - progress > EPSILON) { - finalProgress = progress; - - finalProgress = computeRatioByType(finalProgress, type as EasingMethod); - - results.push(value.lerp(nextValue, finalProgress)); - - progress += speed; - } - } - - newType = type === 'constant' ? type : AnimCurve.Linear; - - for (let j = 0, l2 = results.length; j < l2; j++) { - const newRatio = ratio + startRatioOffset + speed * j * betweenRatio; - addNewDatas(results[j], newType, newRatio); - } - - if (Math.abs(progress - 1) > EPSILON) { // progress > 1 - startRatioOffset = (progress - 1) * betweenRatio; - } - else { - startRatioOffset = 0; - } - } - - if (ratios[ratios.length - 1] !== newRatios[newRatios.length - 1]) { - addNewDatas(values[values.length - 1], newType, ratios[ratios.length - 1]); - } -} diff --git a/cocos/asset/assets/simple-texture.jsb.ts b/cocos/asset/assets/simple-texture.jsb.ts index c71eca30d3e..a71eea97a22 100644 --- a/cocos/asset/assets/simple-texture.jsb.ts +++ b/cocos/asset/assets/simple-texture.jsb.ts @@ -25,9 +25,8 @@ import { ccclass } from 'cc.decorator'; import { legacyCC } from '../../core/global-exports'; import { Filter, PixelFormat, WrapMode } from './asset-enum'; -import { macro } from '../../core/platform/macro'; import dependUtil from '../asset-manager/depend-util'; -import { fastRemoveAt } from '../../core/utils/array'; +import { js, macro } from '../../core'; import './texture-base'; declare const jsb: any; @@ -81,7 +80,7 @@ simpleTextureProto._onAfterAssignImage = function (image) { const deps = dependUtil.getDeps(this._uuid); const index = deps.indexOf(image._uuid); if (index !== -1) { - fastRemoveAt(deps, index); + js.array.fastRemoveAt(deps, index); image.decRef(); } } diff --git a/cocos/asset/assets/simple-texture.ts b/cocos/asset/assets/simple-texture.ts index 31f97cac070..66dac0aa9b1 100644 --- a/cocos/asset/assets/simple-texture.ts +++ b/cocos/asset/assets/simple-texture.ts @@ -33,7 +33,7 @@ import { TextureBase } from './texture-base'; import { legacyCC } from '../../core/global-exports'; import { macro } from '../../core/platform/macro'; import dependUtil from '../asset-manager/depend-util'; -import { fastRemoveAt } from '../../core/utils/array'; +import { js } from '../../core'; const _regions: BufferTextureCopy[] = [new BufferTextureCopy()]; @@ -175,7 +175,7 @@ export class SimpleTexture extends TextureBase { const deps = dependUtil.getDeps(this._uuid); const index = deps.indexOf(image._uuid); if (index !== -1) { - fastRemoveAt(deps, index); + js.array.fastRemoveAt(deps, index); image.decRef(); } } diff --git a/cocos/audio/audio-manager.ts b/cocos/audio/audio-manager.ts index 91f83c4fa42..a0b6ec78bd9 100644 --- a/cocos/audio/audio-manager.ts +++ b/cocos/audio/audio-manager.ts @@ -24,7 +24,7 @@ */ import { AudioPlayer, OneShotAudio } from 'pal/audio'; -import { fastRemoveAt } from '../core/utils/array'; +import { js } from '../core'; type ManagedAudio = AudioPlayer | OneShotAudio; interface AudioInfo { @@ -55,9 +55,7 @@ export class AudioManager { } public addPlaying (audio: ManagedAudio) { if (audio instanceof AudioPlayer) { - if (this._tryAddPlaying(this._audioPlayerInfoList, audio)) { - return; - } + this._tryAddPlaying(this._audioPlayerInfoList, audio); } else { this._tryAddPlaying(this._oneShotAudioInfoList, audio); } @@ -68,14 +66,12 @@ export class AudioManager { if (idx === -1) { return false; } - fastRemoveAt(audioInfoList, idx); + js.array.fastRemoveAt(audioInfoList, idx); return true; } public removePlaying (audio: ManagedAudio) { if (audio instanceof AudioPlayer) { - if (this._tryRemovePlaying(this._audioPlayerInfoList, audio)) { - return; - } + this._tryRemovePlaying(this._audioPlayerInfoList, audio); } else { this._tryRemovePlaying(this._oneShotAudioInfoList, audio); } diff --git a/cocos/core/algorithm/binary-search.ts b/cocos/core/algorithm/binary-search.ts index 26a52540742..a570cd9b0cd 100644 --- a/cocos/core/algorithm/binary-search.ts +++ b/cocos/core/algorithm/binary-search.ts @@ -31,6 +31,7 @@ * @return The index of the searched element in the sorted array, if one is found; * otherwise, a negative number that is the bitwise complement of the index of the next element that is large than the searched value or, * if there is no larger element(include the case that the array is empty), the bitwise complement of array's length. + * @engineInternal */ export function binarySearch (array: number[], value: number) { return binarySearchEpsilon(array, value, 0); @@ -44,6 +45,7 @@ export function binarySearch (array: number[], value: number) { * @return The index of the searched element in the sorted array, if one is found; * otherwise, a negative number that is the bitwise complement of the index of the next element that is large than the searched value or, * if there is no larger element(include the case that the array is empty), the bitwise complement of array's length. + * @engineInternal */ export function binarySearchEpsilon (array: Readonly>, value: number, EPSILON = 1e-6) { let low = 0; @@ -70,6 +72,7 @@ export function binarySearchEpsilon (array: Readonly>, value: * @return The index of the searched element in the sorted array, if one is found; * otherwise, a negative number that is the bitwise complement of the index of the next element that is large than the searched value or, * if there is no larger element(include the case that the array is empty), the bitwise complement of array's length. + * @engineInternal */ export function binarySearchBy (array: T[], value: U, lessThan: (lhs: T, rhs: U) => number) { let low = 0; diff --git a/cocos/core/curves/curve.ts b/cocos/core/curves/curve.ts index 0791a8b3fc6..f0f405e76e4 100644 --- a/cocos/core/curves/curve.ts +++ b/cocos/core/curves/curve.ts @@ -1,11 +1,10 @@ import { assertIsTrue } from '../data/utils/asserts'; import { approx, lerp, pingPong, repeat } from '../math'; import { KeyframeCurve } from './keyframe-curve'; -import { ccclass, serializable, uniquelyReferenced } from '../data/decorators'; import { RealInterpolationMode, ExtrapolationMode, TangentWeightMode } from './real-curve-param'; import { binarySearchEpsilon } from '../algorithm/binary-search'; import { solveCubic } from './solve-cubic'; -import { EditorExtendable, EditorExtendableMixin } from '../data/editor-extendable'; +import { EditorExtendable } from '../data/editor-extendable'; import { CCClass, deserializeTag, editorExtrasTag, SerializationContext, SerializationInput, SerializationOutput, serializeTag } from '../data'; import { DeserializationContext } from '../data/custom-serializable'; import { EasingMethod, getEasingFn } from './easing-method'; diff --git a/cocos/core/curves/keyframe-curve.ts b/cocos/core/curves/keyframe-curve.ts index 9ce1abf87af..c06b467a622 100644 --- a/cocos/core/curves/keyframe-curve.ts +++ b/cocos/core/curves/keyframe-curve.ts @@ -1,6 +1,5 @@ import { binarySearchEpsilon } from '../algorithm/binary-search'; import { CCClass } from '../data/class'; -import { ccclass, serializable } from '../data/decorators'; import { assertIsTrue } from '../data/utils/asserts'; import { approx } from '../math'; import type { CurveBase } from './curve-base'; diff --git a/cocos/core/curves/keys-shared-curves.ts b/cocos/core/curves/keys-shared-curves.ts index 7678b3162bc..c79095c881b 100644 --- a/cocos/core/curves/keys-shared-curves.ts +++ b/cocos/core/curves/keys-shared-curves.ts @@ -2,7 +2,7 @@ import { binarySearchEpsilon } from '../algorithm/binary-search'; import { ccclass, serializable } from '../data/decorators'; import { assertIsTrue } from '../data/utils/asserts'; import { approx, IQuatLike, lerp, Quat } from '../math'; -import { RealKeyframeValue, ExtrapolationMode, RealCurve } from './curve'; +import { ExtrapolationMode, RealCurve } from './curve'; import { QuatCurve, QuatInterpolationMode } from './quat-curve'; import { RealInterpolationMode } from './real-curve-param'; diff --git a/cocos/core/deprecated-3.7.0.ts b/cocos/core/deprecated-3.7.0.ts new file mode 100644 index 00000000000..a7954f7217d --- /dev/null +++ b/cocos/core/deprecated-3.7.0.ts @@ -0,0 +1,33 @@ +/* + Copyright (c) 2022 Xiamen Yaji Software Co., Ltd. + + https://www.cocos.com/ + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated engine source code (the "Software"), a limited, + worldwide, royalty-free, non-assignable, revocable and non-exclusive license + to use Cocos Creator solely to develop games on your target platforms. You shall + not use Cocos Creator software for developing other software or tools that's + used for developing games. You are not granted to publish, distribute, + sublicense, and/or sell copies of Cocos Creator. + + The software or tools in this License Agreement are licensed, not sold. + Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + */ + +import { js, markAsWarning } from './utils'; + +markAsWarning(js, 'js', [ + { + name: 'js', + suggest: `'js.js' is deprecated since v3.7.0, please access 'js' directly instead.`, + }, +]); diff --git a/cocos/core/index.ts b/cocos/core/index.ts index 05c15374ec1..61256d74fd6 100644 --- a/cocos/core/index.ts +++ b/cocos/core/index.ts @@ -30,6 +30,7 @@ import * as geometry from './geometry'; import * as math from './math'; import * as memop from './memop'; import './deprecated'; +import './deprecated-3.7.0'; legacyCC.math = math; legacyCC.geometry = geometry; @@ -46,6 +47,7 @@ export * from './event'; export * from './platform'; export * from './scheduler'; export * from './algorithm/murmurhash2_gc'; +export * from './algorithm/binary-search'; export * from './curves'; export * from './settings'; export * from './system'; diff --git a/cocos/core/utils/array.ts b/cocos/core/utils/array.ts index 2c597e8bed2..38c38b82f85 100644 --- a/cocos/core/utils/array.ts +++ b/cocos/core/utils/array.ts @@ -32,8 +32,8 @@ export { default as MutableForwardIterator } from './mutable-forward-iterator'; * 移除指定索引的数组元素。 * @en * Removes the array item at the specified index. - * @param array 数组。 - * @param index 待移除元素的索引。 + * @param array @zh 被操作的数组。@en The array to be operated. + * @param index @zh 待移除元素的索引。@en The index of the element to be removed. */ export function removeAt (array: T[], index: number) { array.splice(index, 1); @@ -46,8 +46,8 @@ export function removeAt (array: T[], index: number) { * @en * Removes the array item at the specified index. * It's faster but the order of the array will be changed. - * @param array 数组。 - * @param index 待移除元素的索引。 + * @param array @zh 被操作的数组。@en The array to be operated. + * @param index @zh 待移除元素的索引。@en The index of the element to be removed. */ export function fastRemoveAt (array: T[], index: number) { const length = array.length; @@ -64,8 +64,8 @@ export function fastRemoveAt (array: T[], index: number) { * @en * Removes the first occurrence of a specific object from the array. * Decision of the equality of elements is similar to `Array.prototype.indexOf`. - * @param array 数组。 - * @param value 待移除元素。 + * @param array @zh 被操作的数组。@en The array to be operated. + * @param value @zh 待移除元素。@en The value to be removed. */ export function remove (array: T[], value: T) { const index = array.indexOf(value); @@ -85,8 +85,8 @@ export function remove (array: T[], value: T) { * Removes the first occurrence of a specific object from the array. * Decision of the equality of elements is similar to `Array.prototype.indexOf`. * It's faster but the order of the array will be changed. - * @param array 数组。 - * @param value 待移除元素。 + * @param array @zh 被操作的数组。@en The array to be operated. + * @param value @zh 待移除元素。@en The value to be removed. */ export function fastRemove (array: T[], value: T) { const index = array.indexOf(value); @@ -101,8 +101,8 @@ export function fastRemove (array: T[], value: T) { * 移除首个使谓词满足的数组元素。 * @en * Removes the first occurrence of a specific object from the array where `predicate` is `true`. - * @param array 数组。 - * @param predicate 谓词。 + * @param array @zh 被操作的数组。@en The array to be operated. + * @param predicate @zh 一元谓词,如果要元素的话,需要返回 true。@en unary predicate which returns true if the element should be removed. */ export function removeIf (array: T[], predicate: (value: T) => boolean) { const index = array.findIndex(predicate); @@ -120,9 +120,9 @@ export function removeIf (array: T[], predicate: (value: T) => boolean) { * @en * Verify array's Type. * This function tests each element using `instanceof` operator. - * @param array 数组。 - * @param type 类型。 - * @returns 当每一个元素都是指定类型时返回 `true`,否则返回 `false`。 + * @param array @zh 待验证的数组。@en The array to be verified. + * @param type @zh 用来判断数组元素的数据类型。@en The type used to verify the element type. + * @returns @zh 当每一个元素都是指定类型时返回 `true`,否则返回 `false`。@en Return true if all elements of the array is the same type, false others. */ export function verifyType (array: any[], type: T): array is T[] { if (array && array.length > 0) { @@ -141,8 +141,9 @@ export function verifyType (array: any[], type: T): array is * 移除多个数组元素。 * @en * Removes multiple array elements. - * @param array 源数组。 - * @param removals 所有待移除的元素。此数组的每个元素所对应的首个源数组的元素都会被移除。 + * @param array @zh 被操作的数组。@en The array to be operated. + * @param removals @zh 所有待移除的元素。此数组的每个元素所对应的首个源数组的元素都会被移除。 + * @en The values to be removed. If a value appears multiple times in the array, only the first math element will be removed. */ export function removeArray (array: T[], removals: T[]) { for (let i = 0, l = removals.length; i < l; i++) { @@ -155,10 +156,10 @@ export function removeArray (array: T[], removals: T[]) { * 在数组的指定索引上插入对象。 * @en * Inserts some objects at specified index. - * @param array 数组。 - * @param objects 插入的所有对象。 - * @param index 插入的索引。 - * @returns `array`。 + * @param array @zh 被操作的数组。@en The array to be operated. + * @param objects @zh 插入的所有对象。@en The objects to be inserted. + * @param index @zh 插入的索引。@en The index to insert at. + * @returns @zh 传入的 `array`。@en The passed in `array`. */ export function appendObjectsAt (array: T[], objects: T[], index: number) { array.splice.apply(array, [index, 0, ...objects]); @@ -170,7 +171,9 @@ export function appendObjectsAt (array: T[], objects: T[], index: number) { * 返回数组是否包含指定的元素。 * @en * Determines whether the array contains a specific element. - * @returns 返回数组是否包含指定的元素。 + * @param array @zh 被查询的数组 @en The array to be checked. + * @param value @zh 用来查询的值 @en The value used to check for. + * @returns @zh true 如果包含该元素,否则返回 false。@en true if contains the value, false else. */ export function contains (array: T[], value: T) { return array.indexOf(value) >= 0; @@ -181,8 +184,8 @@ export function contains (array: T[], value: T) { * 拷贝数组。 * @en * Copy an array. - * @param 源数组。 - * @returns 数组的副本。 + * @param array @zh 用来拷贝的数组。@en The array to be copied from. + * @returns @zh 数组的副本。@en A new array has the same values as `array`. */ export function copy (array: T[]) { const len = array.length; diff --git a/cocos/core/utils/index.ts b/cocos/core/utils/index.ts index 93e813152d1..27c19e7ab07 100644 --- a/cocos/core/utils/index.ts +++ b/cocos/core/utils/index.ts @@ -28,12 +28,12 @@ import './deprecated-3.6.0'; import * as js from './js'; /** - * 杂项工具函数 + * Some useful functions. */ import * as misc from './misc'; /** - * 用于处理文件与目录的路径的模块 + * A module to handle files and directories. */ import * as path from './path'; diff --git a/cocos/core/utils/js.ts b/cocos/core/utils/js.ts index 36097e7e6c4..6119d71e92b 100644 --- a/cocos/core/utils/js.ts +++ b/cocos/core/utils/js.ts @@ -25,7 +25,6 @@ THE SOFTWARE. */ -import * as jsarray from './array'; import IDGenerator from './id-generator'; import { _idToClass, @@ -61,18 +60,21 @@ import { value, } from './js-typed'; import Pool from './pool'; - +import * as array from './array'; import { legacyCC } from '../global-exports'; export * from './js-typed'; export { default as IDGenerator } from './id-generator'; export { default as Pool } from './pool'; -export const array = jsarray; +export { array }; +/** + * @deprecated since 3.7.0, all functions expect deprecated function are exported by core.js + */ export const js = { IDGenerator, Pool, - array: jsarray, + array, isNumber, isString, isEmptyObject, diff --git a/cocos/core/utils/mutable-forward-iterator.ts b/cocos/core/utils/mutable-forward-iterator.ts index f324c709e26..c47c1898557 100644 --- a/cocos/core/utils/mutable-forward-iterator.ts +++ b/cocos/core/utils/mutable-forward-iterator.ts @@ -35,6 +35,7 @@ * ... * } * ``` + * @engineInternal */ export default class MutableForwardIterator { public i = 0; diff --git a/cocos/game/splash-screen.ts b/cocos/game/splash-screen.ts index 0b047a9e5ea..a4acf32451e 100644 --- a/cocos/game/splash-screen.ts +++ b/cocos/game/splash-screen.ts @@ -24,9 +24,8 @@ */ import { EDITOR, PREVIEW } from 'internal:constants'; -import * as easing from '../core/algorithm/easing'; import { Material } from '../asset/assets/material'; -import { clamp01, Mat4, Vec2, Settings, settings, sys, cclegacy } from '../core'; +import { clamp01, Mat4, Vec2, Settings, settings, sys, cclegacy, easing } from '../core'; import { Sampler, SamplerInfo, Shader, Texture, TextureInfo, Device, InputAssembler, InputAssemblerInfo, Attribute, Buffer, BufferInfo, Rect, Color, BufferTextureCopy, CommandBuffer, BufferUsageBit, Format, diff --git a/cocos/physics-2d/box2d/platform/physics-contact-listener.ts b/cocos/physics-2d/box2d/platform/physics-contact-listener.ts index efec64b4a7f..e4bbbbbf5b0 100644 --- a/cocos/physics-2d/box2d/platform/physics-contact-listener.ts +++ b/cocos/physics-2d/box2d/platform/physics-contact-listener.ts @@ -24,7 +24,7 @@ */ import b2 from '@cocos/box2d'; -import { remove } from '../../../core/utils/array'; +import { js } from '../../../core'; export class PhysicsContactListener extends b2.ContactListener { _contactFixtures: b2.Fixture[] = []; @@ -89,6 +89,6 @@ export class PhysicsContactListener extends b2.ContactListener { } unregisterContactFixture (fixture) { - remove(this._contactFixtures, fixture); + js.array.remove(this._contactFixtures, fixture); } } diff --git a/cocos/physics/bullet/bullet-shared-body.ts b/cocos/physics/bullet/bullet-shared-body.ts index 67bac2f7630..99b483c634a 100644 --- a/cocos/physics/bullet/bullet-shared-body.ts +++ b/cocos/physics/bullet/bullet-shared-body.ts @@ -34,7 +34,7 @@ import { IBulletBodyStruct, IBulletGhostStruct } from './bullet-interface'; import { CC_V3_0, CC_QUAT_0, BulletCache } from './bullet-cache'; import { PhysicsSystem } from '../framework'; import { ERigidBodyType, PhysicsGroup } from '../framework/physics-enum'; -import { fastRemoveAt } from '../../core/utils/array'; +import { js } from '../../core'; import { bt } from './instantiated'; import { BulletConstraint } from './constraints/bullet-constraint'; @@ -346,7 +346,7 @@ export class BulletSharedBody { if (isTrigger) { const index = this.ghostStruct.wrappedShapes.indexOf(v); if (index >= 0) { - fastRemoveAt(this.ghostStruct.wrappedShapes, index); + js.array.fastRemoveAt(this.ghostStruct.wrappedShapes, index); v.setCompound(0); this.ghostEnabled = false; } @@ -360,7 +360,7 @@ export class BulletSharedBody { } bt.CollisionObject_activate(this.body, true); this.dirty |= EBtSharedBodyDirty.BODY_RE_ADD; - fastRemoveAt(this.bodyStruct.wrappedShapes, index); + js.array.fastRemoveAt(this.bodyStruct.wrappedShapes, index); this.bodyEnabled = false; } } @@ -379,10 +379,10 @@ export class BulletSharedBody { removeJoint (v: BulletConstraint, type: 0 | 1) { if (type) { const i = this.wrappedJoints1.indexOf(v); - if (i >= 0) fastRemoveAt(this.wrappedJoints1, i); + if (i >= 0) js.array.fastRemoveAt(this.wrappedJoints1, i); } else { const i = this.wrappedJoints0.indexOf(v); - if (i >= 0) fastRemoveAt(this.wrappedJoints0, i); + if (i >= 0) js.array.fastRemoveAt(this.wrappedJoints0, i); } } diff --git a/cocos/physics/bullet/bullet-world.ts b/cocos/physics/bullet/bullet-world.ts index 503c1d1da12..12c7beeea2e 100644 --- a/cocos/physics/bullet/bullet-world.ts +++ b/cocos/physics/bullet/bullet-world.ts @@ -34,11 +34,10 @@ import { bullet2CocosVec3, cocos2BulletVec3 } from './bullet-utils'; import { Ray } from '../../core/geometry'; import { IRaycastOptions, IPhysicsWorld } from '../spec/i-physics-world'; import { PhysicsRayResult, PhysicsMaterial } from '../framework'; -import { error, RecyclePool, Vec3 } from '../../core'; +import { error, RecyclePool, Vec3, js } from '../../core'; import { IVec3Like } from '../../core/math/type-define'; import { BulletContactData } from './bullet-contact-data'; import { BulletConstraint } from './constraints/bullet-constraint'; -import { fastRemoveAt } from '../../core/utils/array'; import { bt } from './instantiated'; import { Node } from '../../scene-graph'; @@ -213,7 +212,7 @@ export class BulletWorld implements IPhysicsWorld { removeSharedBody (sharedBody: BulletSharedBody) { const i = this.bodies.indexOf(sharedBody); if (i >= 0) { - fastRemoveAt(this.bodies, i); + js.array.fastRemoveAt(this.bodies, i); bt.DynamicsWorld_removeRigidBody(this._world, sharedBody.body); } } @@ -229,7 +228,7 @@ export class BulletWorld implements IPhysicsWorld { removeGhostObject (sharedBody: BulletSharedBody) { const i = this.ghosts.indexOf(sharedBody); if (i >= 0) { - fastRemoveAt(this.ghosts, i); + js.array.fastRemoveAt(this.ghosts, i); bt.CollisionWorld_removeCollisionObject(this._world, sharedBody.ghost); } } diff --git a/cocos/physics/cannon/cannon-shared-body.ts b/cocos/physics/cannon/cannon-shared-body.ts index 2ed84d704a6..032cc5cb57f 100644 --- a/cocos/physics/cannon/cannon-shared-body.ts +++ b/cocos/physics/cannon/cannon-shared-body.ts @@ -37,7 +37,7 @@ import { CannonRigidBody } from './cannon-rigid-body'; import { commitShapeUpdates } from './cannon-util'; import { CannonContactEquation } from './cannon-contact-equation'; import { CannonConstraint } from './constraints/cannon-constraint'; -import { fastRemoveAt } from '../../core/utils/array'; +import { js } from '../../core'; const v3_0 = new Vec3(); const quat_0 = new Quat(); @@ -151,7 +151,7 @@ export class CannonSharedBody { removeShape (v: CannonShape) { const index = this.wrappedShapes.indexOf(v); if (index >= 0) { - fastRemoveAt(this.wrappedShapes, index); + js.array.fastRemoveAt(this.wrappedShapes, index); this.body.removeShape(v.impl); v.setIndex(-1); if (this.body.isSleeping()) this.body.wakeUp(); @@ -171,10 +171,10 @@ export class CannonSharedBody { removeJoint (v: CannonConstraint, type: 0 | 1) { if (type) { const i = this.wrappedJoints1.indexOf(v); - if (i >= 0) fastRemoveAt(this.wrappedJoints1, i); + if (i >= 0) js.array.fastRemoveAt(this.wrappedJoints1, i); } else { const i = this.wrappedJoints0.indexOf(v); - if (i >= 0) fastRemoveAt(this.wrappedJoints0, i); + if (i >= 0) js.array.fastRemoveAt(this.wrappedJoints0, i); } } diff --git a/cocos/physics/cannon/cannon-world.ts b/cocos/physics/cannon/cannon-world.ts index 193156a4712..92688b1c2c9 100644 --- a/cocos/physics/cannon/cannon-world.ts +++ b/cocos/physics/cannon/cannon-world.ts @@ -29,13 +29,12 @@ import { fillRaycastResult, toCannonRaycastOptions } from './cannon-util'; import { CannonConstraint } from './constraints/cannon-constraint'; import { CannonShape } from './shapes/cannon-shape'; import { Ray } from '../../core/geometry'; -import { RecyclePool, error } from '../../core'; +import { RecyclePool, error, js } from '../../core'; import { CannonSharedBody } from './cannon-shared-body'; import { IPhysicsWorld, IRaycastOptions } from '../spec/i-physics-world'; import { PhysicsMaterial, PhysicsRayResult } from '../framework'; import { IVec3Like } from '../../core/math/type-define'; import { CannonRigidBody } from './cannon-rigid-body'; -import { fastRemoveAt } from '../../core/utils/array'; import { Node } from '../../scene-graph'; export class CannonWorld implements IPhysicsWorld { @@ -148,7 +147,7 @@ export class CannonWorld implements IPhysicsWorld { removeSharedBody (sharedBody: CannonSharedBody) { const i = this.bodies.indexOf(sharedBody); if (i >= 0) { - fastRemoveAt(this.bodies, i); + js.array.fastRemoveAt(this.bodies, i); this._world.remove(sharedBody.body); } } @@ -168,7 +167,7 @@ export class CannonWorld implements IPhysicsWorld { removeConstraint (constraint: CannonConstraint) { const i = this.constraints.indexOf(constraint); if (i >= 0) { - fastRemoveAt(this.constraints, i); + js.array.fastRemoveAt(this.constraints, i); this._world.removeConstraint(constraint.impl); } } diff --git a/cocos/physics/cocos/builtin-shared-body.ts b/cocos/physics/cocos/builtin-shared-body.ts index 662838b6d5b..506919e9032 100644 --- a/cocos/physics/cocos/builtin-shared-body.ts +++ b/cocos/physics/cocos/builtin-shared-body.ts @@ -23,7 +23,7 @@ THE SOFTWARE. */ -import { Mat4, Quat, Vec3 } from '../../core/math'; +import { Mat4, Quat, Vec3, js } from '../../core'; import { intersect } from '../../core/geometry'; import { BuiltInWorld } from './builtin-world'; import { BuiltinObject } from './object/builtin-object'; @@ -32,7 +32,6 @@ import { Node } from '../../scene-graph'; import { BuiltinRigidBody } from './builtin-rigid-body'; import { PhysicsSystem } from '../framework'; import { PhysicsGroup } from '../framework/physics-enum'; -import { fastRemoveAt } from '../../core/utils/array'; const m4_0 = new Mat4(); const v3_0 = new Vec3(); @@ -143,7 +142,7 @@ export class BuiltinSharedBody extends BuiltinObject { removeShape (shape: BuiltinShape): void { const i = this.shapes.indexOf(shape); if (i >= 0) { - fastRemoveAt(this.shapes, i); + js.array.fastRemoveAt(this.shapes, i); } } diff --git a/cocos/physics/cocos/builtin-world.ts b/cocos/physics/cocos/builtin-world.ts index c072104d86f..db823dcfb97 100644 --- a/cocos/physics/cocos/builtin-world.ts +++ b/cocos/physics/cocos/builtin-world.ts @@ -29,14 +29,13 @@ import { BuiltinSharedBody } from './builtin-shared-body'; import { BuiltinShape } from './shapes/builtin-shape'; import { ArrayCollisionMatrix } from '../utils/array-collision-matrix'; import { Ray, intersect } from '../../core/geometry'; -import { RecyclePool, error } from '../../core'; +import { RecyclePool, error, js } from '../../core'; import { IPhysicsWorld, IRaycastOptions } from '../spec/i-physics-world'; import { IVec3Like } from '../../core/math/type-define'; import { PhysicsMaterial } from '../framework/assets/physics-material'; import { TriggerEventType } from '../framework/physics-interface'; import { Collider } from '../../../exports/physics-framework'; import { BuiltinRigidBody } from './builtin-rigid-body'; -import { fastRemoveAt } from '../../core/utils/array'; import { Node } from '../../scene-graph'; const hitPoint = new Vec3(); @@ -166,7 +165,7 @@ export class BuiltInWorld implements IPhysicsWorld { removeSharedBody (body: BuiltinSharedBody) { const index = this.bodies.indexOf(body); if (index >= 0) { - fastRemoveAt(this.bodies, index); + js.array.fastRemoveAt(this.bodies, index); } } diff --git a/cocos/physics/physx/physx-shared-body.ts b/cocos/physics/physx/physx-shared-body.ts index bbd869cbae3..4b2b3a7b602 100644 --- a/cocos/physics/physx/physx-shared-body.ts +++ b/cocos/physics/physx/physx-shared-body.ts @@ -24,7 +24,7 @@ */ /* eslint-disable @typescript-eslint/no-unsafe-return */ -import { Quat, Vec3 } from '../../core'; +import { Quat, Vec3, js } from '../../core'; import { PhysXRigidBody } from './physx-rigid-body'; import { PhysXWorld } from './physx-world'; import { PhysXInstance } from './physx-instance'; @@ -38,7 +38,6 @@ import { VEC3_0 } from '../utils/util'; import { ERigidBodyType, PhysicsSystem } from '../framework'; import { PhysXJoint } from './joints/physx-joint'; import { PhysicsGroup } from '../framework/physics-enum'; -import { fastRemoveAt } from '../../core/utils/array'; import { Node } from '../../scene-graph'; export class PhysXSharedBody { @@ -223,7 +222,7 @@ export class PhysXSharedBody { if (index >= 0) { ws.setIndex(-1); this.impl.detachShape(ws.impl, true); - fastRemoveAt(this.wrappedShapes, index); + js.array.fastRemoveAt(this.wrappedShapes, index); if (!ws.collider.isTrigger) { if (!Vec3.strictEquals(ws.collider.center, Vec3.ZERO)) this.updateCenterOfMass(); if (this.isDynamic) setMassAndUpdateInertia(this.impl, this._wrappedBody!.rigidBody.mass); @@ -244,10 +243,10 @@ export class PhysXSharedBody { removeJoint (v: PhysXJoint, type: 0 | 1) { if (type) { const i = this.wrappedJoints1.indexOf(v); - if (i >= 0) fastRemoveAt(this.wrappedJoints1, i); + if (i >= 0) js.array.fastRemoveAt(this.wrappedJoints1, i); } else { const i = this.wrappedJoints0.indexOf(v); - if (i >= 0) fastRemoveAt(this.wrappedJoints0, i); + if (i >= 0) js.array.fastRemoveAt(this.wrappedJoints0, i); } } diff --git a/cocos/physics/physx/physx-world.ts b/cocos/physics/physx/physx-world.ts index 504c4b2f476..c386858027e 100644 --- a/cocos/physics/physx/physx-world.ts +++ b/cocos/physics/physx/physx-world.ts @@ -27,7 +27,7 @@ import { Ray } from '../../core/geometry'; import { IPhysicsWorld, IRaycastOptions } from '../spec/i-physics-world'; import { PhysicsMaterial, PhysicsRayResult, CollisionEventType, TriggerEventType } from '../framework'; -import { error, RecyclePool } from '../../core'; +import { error, RecyclePool, js } from '../../core'; import { IVec3Like } from '../../core/math/type-define'; import { IBaseConstraint } from '../spec/i-physics-constraint'; import { PhysXRigidBody } from './physx-rigid-body'; @@ -36,7 +36,6 @@ import { gatherEvents, getWrapShape, PX, getContactDataOrByteOffset, } from './physx-adapter'; import { PhysXSharedBody } from './physx-shared-body'; -import { fastRemoveAt } from '../../core/utils/array'; import { TupleDictionary } from '../utils/tuple-dictionary'; import { PhysXContactEquation } from './physx-contact-equation'; import { CollisionEventObject, TriggerEventObject } from '../utils/util'; @@ -134,7 +133,7 @@ export class PhysXWorld extends PhysXInstance implements IPhysicsWorld { const index = this.wrappedBodies.indexOf(body); if (index >= 0) { this.scene.removeActor(body.impl, true); - fastRemoveAt(this.wrappedBodies, index); + js.array.fastRemoveAt(this.wrappedBodies, index); } } diff --git a/cocos/scene-graph/component-scheduler.ts b/cocos/scene-graph/component-scheduler.ts index be455d65174..20a199dd678 100644 --- a/cocos/scene-graph/component-scheduler.ts +++ b/cocos/scene-graph/component-scheduler.ts @@ -25,13 +25,12 @@ import { EDITOR, SUPPORT_JIT, DEV, TEST } from 'internal:constants'; import { CCObject } from '../core/data/object'; -import { MutableForwardIterator } from '../core/utils/array'; -import { array } from '../core/utils/js'; +import { js } from '../core'; import { tryCatchFunctor_EDITOR } from '../core/utils/misc'; import { legacyCC } from '../core/global-exports'; import { error, assert } from '../core/platform/debug'; -const fastRemoveAt = array.fastRemoveAt; +const fastRemoveAt = js.array.fastRemoveAt; const IsStartCalled = CCObject.Flags.IsStartCalled; const IsOnEnableCalled = CCObject.Flags.IsOnEnableCalled; @@ -90,12 +89,12 @@ function stableRemoveInactive (iterator, flagToClear) { export class LifeCycleInvoker { public static stableRemoveInactive = stableRemoveInactive; - protected _zero: MutableForwardIterator; - protected _neg: MutableForwardIterator; - protected _pos: MutableForwardIterator; + protected _zero: js.array.MutableForwardIterator; + protected _neg: js.array.MutableForwardIterator; + protected _pos: js.array.MutableForwardIterator; protected _invoke: any; constructor (invokeFunc) { - const Iterator = MutableForwardIterator; + const Iterator = js.array.MutableForwardIterator; // components which priority === 0 (default) this._zero = new Iterator([]); // components which priority < 0 diff --git a/pal/input/native/gamepad-input.ts b/pal/input/native/gamepad-input.ts index 34340d51406..f26c467eb7b 100644 --- a/pal/input/native/gamepad-input.ts +++ b/pal/input/native/gamepad-input.ts @@ -6,7 +6,7 @@ import { Feature } from '../../system-info/enum-type'; import { EventTarget } from '../../../cocos/core/event/event-target'; import { EventGamepad } from '../../../cocos/input/types'; import { InputSourceButton, InputSourceDpad, InputSourceStick } from '../input-source'; -import { fastRemoveAt } from '../../../cocos/core/utils/array'; +import { js } from '../../../cocos/core'; enum Button { BUTTON_SOUTH, @@ -167,7 +167,7 @@ export class GamepadInputDevice { if (removeIndex === -1) { return; } - fastRemoveAt(GamepadInputDevice.all, removeIndex); + js.array.fastRemoveAt(GamepadInputDevice.all, removeIndex); } private static _getInputDevice (id: number) { return GamepadInputDevice.all.find((device) => device.deviceId === id); diff --git a/pal/input/web/gamepad-input.ts b/pal/input/web/gamepad-input.ts index 1895c67aab8..d686131d1f3 100644 --- a/pal/input/web/gamepad-input.ts +++ b/pal/input/web/gamepad-input.ts @@ -5,7 +5,7 @@ import { EventTarget } from '../../../cocos/core/event/event-target'; import legacyCC from '../../../predefine'; import { Feature } from '../../system-info/enum-type'; import { InputSourceButton, InputSourceDpad, InputSourceStick } from '../input-source'; -import { fastRemoveAt } from '../../../cocos/core/utils/array'; +import { js } from '../../../cocos/core'; import { EventGamepad } from '../../../cocos/input/types'; //#region button index alias @@ -122,7 +122,7 @@ export class GamepadInputDevice { if (removeIndex === -1) { return; } - fastRemoveAt(GamepadInputDevice.all, removeIndex); + js.array.fastRemoveAt(GamepadInputDevice.all, removeIndex); } private static _getOrCreateInputDevice (id: number, connected: boolean): GamepadInputDevice { let device = GamepadInputDevice.all.find((device) => device.deviceId === id); diff --git a/tests/animation/cross-fade.test.ts b/tests/animation/cross-fade.test.ts index 7236af4bfcd..b0c8edf669c 100644 --- a/tests/animation/cross-fade.test.ts +++ b/tests/animation/cross-fade.test.ts @@ -1,7 +1,7 @@ import { AnimationState } from '../../cocos/animation'; import { CrossFade } from '../../cocos/animation/cross-fade'; import { Playable } from '../../cocos/animation/playable'; -import { remove } from '../../cocos/core/utils/array'; +import { js } from '../../cocos/core'; type CrossFadeScheduler = NonNullable[0]>; @@ -11,7 +11,7 @@ class Scheduler implements NonNullable { } public removeCrossFade(crossFade: CrossFade): void { - remove(this._crossFades, crossFade); + js.array.remove(this._crossFades, crossFade); } public update (deltaTime = 1.0 / 30.0) { From 4bb8dfd70211727ffb031a5eefea9d1f12a56175 Mon Sep 17 00:00:00 2001 From: troublemaker52025 Date: Wed, 26 Oct 2022 15:26:56 +0800 Subject: [PATCH 086/829] [Feature] add visibility for light component (#13131) --- .../3d/lights/directional-light-component.ts | 13 +++ cocos/3d/lights/light-component.ts | 21 +++++ cocos/render-scene/scene/light.ts | 15 ++++ .../rendering/render-additive-light-queue.ts | 73 ++++++++--------- .../render-shadow-map-batched-queue.ts | 4 +- editor/i18n/en/localization.js | 1 + editor/i18n/zh/localization.js | 1 + .../pipeline/RenderAdditiveLightQueue.cpp | 79 ++++++++----------- .../pipeline/RenderAdditiveLightQueue.h | 36 +++++---- .../pipeline/ShadowMapBatchedQueue.cpp | 16 ++-- native/cocos/scene/Light.h | 17 +++- native/tools/swig-config/scene.i | 1 + 12 files changed, 163 insertions(+), 114 deletions(-) diff --git a/cocos/3d/lights/directional-light-component.ts b/cocos/3d/lights/directional-light-component.ts index 530e44e0696..1a036d5a26a 100644 --- a/cocos/3d/lights/directional-light-component.ts +++ b/cocos/3d/lights/directional-light-component.ts @@ -109,6 +109,19 @@ export class DirectionalLight extends Light { } } + /** + * @en Turn off the function for directional light. + * @zh 方向光关闭该功能。 + * @engineInternal + */ + @visible(false) + set visibility (vis: number) { + this._visibility = vis; + } + get visibility (): number { + return this._visibility; + } + /** * @en Whether activate real time shadow. * @zh 是否启用实时阴影? diff --git a/cocos/3d/lights/light-component.ts b/cocos/3d/lights/light-component.ts index aaae2045df3..4aa5c631172 100644 --- a/cocos/3d/lights/light-component.ts +++ b/cocos/3d/lights/light-component.ts @@ -28,6 +28,9 @@ import { Component } from '../../scene-graph/component'; import { Color, Vec3, Enum, cclegacy } from '../../core'; import { scene } from '../../render-scene'; import { Root } from '../../root'; +import { legacyCC } from '../../core/global-exports'; +import { CAMERA_DEFAULT_MASK } from '../../rendering/define'; +import { Layers } from '../../scene-graph/layers'; const _color_tmp = new Vec3(); @@ -136,6 +139,8 @@ export class Light extends Component { protected _colorTemperature = 6550; @serializable protected _staticSettings: StaticLightSettings = new StaticLightSettings(); + @serializable + protected _visibility = CAMERA_DEFAULT_MASK; protected _type = scene.LightType.UNKNOWN; protected _lightType: typeof scene.Light; @@ -231,6 +236,21 @@ export class Light extends Component { } } + /** + * @en Visibility mask of the light, declaring a set of node layers that will be visible to this light(Does not work with directional light). + * @zh 光照的可见性掩码,声明在当前光照中可见的节点层级集合(对方向光不生效)。 + */ + @tooltip('i18n:lights.visibility') + @displayOrder(255) + @type(Layers.BitMask) + set visibility (vis: number) { + this._visibility = vis; + if (this._light) { this._light.visibility = vis; } + } + get visibility (): number { + return this._visibility; + } + constructor () { super(); this._lightType = scene.Light; @@ -261,6 +281,7 @@ export class Light extends Component { this.colorTemperature = this._colorTemperature; this._light.node = this.node; this._light.baked = this.baked; + this._light.visibility = this.visibility; } protected _destroyLight () { diff --git a/cocos/render-scene/scene/light.ts b/cocos/render-scene/scene/light.ts index 30b47b96f6f..7f8f33dd9b9 100644 --- a/cocos/render-scene/scene/light.ts +++ b/cocos/render-scene/scene/light.ts @@ -27,6 +27,7 @@ import { Vec3 } from '../../core/math'; import { TransformBit } from '../../scene-graph/node-enum'; import { RenderScene } from '../core/render-scene'; import { Node } from '../../scene-graph'; +import { CAMERA_DEFAULT_MASK } from '../../rendering/define'; // Color temperature (in Kelvin) to RGB export function ColorTemperatureToRGB (rgb: Vec3, kelvin: number) { @@ -130,6 +131,18 @@ export class Light { return this._colorTempRGB; } + /** + * @en Visibility mask of the light, declaring a set of node layers that will be visible to this light. + * @zh 光照的可见性掩码,声明在当前光照中可见的节点层级集合。 + * @engineInternal + */ + set visibility (vis: number) { + this._visibility = vis; + } + get visibility (): number { + return this._visibility; + } + set node (n) { this._node = n; if (this._node) { @@ -191,6 +204,8 @@ export class Light { protected _type: LightType = LightType.UNKNOWN; + protected _visibility = CAMERA_DEFAULT_MASK; + public initialize () { this.color = new Vec3(1, 1, 1); this.colorTemperature = 6550.0; diff --git a/cocos/rendering/render-additive-light-queue.ts b/cocos/rendering/render-additive-light-queue.ts index b68b817eda5..5f2207b829f 100644 --- a/cocos/rendering/render-additive-light-queue.ts +++ b/cocos/rendering/render-additive-light-queue.ts @@ -89,24 +89,6 @@ function getLightPassIndices (subModels: SubModel[], lightPassIndices: number[]) return hasValidLightPass; } -function isInstancedOrBatched (model: Model) { - const subModels = model.subModels; - for (let m = 0; m < subModels.length; ++m) { - const passes = subModels[m].passes; - for (let p = 0; p < passes.length; ++p) { - const pass = passes[p]; - const batchingScheme = pass.batchingScheme; - if (batchingScheme === BatchingSchemes.INSTANCING) { - return true; - } - if (batchingScheme === BatchingSchemes.VB_MERGING) { - return true; - } - } - } - return false; -} - /** * @zh 叠加光照队列。 */ @@ -277,15 +259,14 @@ export class RenderAdditiveLightQueue { // light culling protected _lightCulling (model:Model, validPunctualLights: Light[]) { let isCulled = false; - const isNeedCulling = !isInstancedOrBatched(model); for (let l = 0; l < validPunctualLights.length; l++) { const light = validPunctualLights[l]; switch (light.type) { case LightType.SPHERE: - if (isNeedCulling) { isCulled = cullSphereLight(light as SphereLight, model); } + isCulled = cullSphereLight(light as SphereLight, model); break; case LightType.SPOT: - if (isNeedCulling) { isCulled = cullSpotLight(light as SpotLight, model); } + isCulled = cullSpotLight(light as SpotLight, model); break; default: } @@ -299,27 +280,41 @@ export class RenderAdditiveLightQueue { protected _addRenderQueue (pass: Pass, subModel: SubModel, model: Model, lightPassIdx: number) { const validPunctualLights = this._pipeline.pipelineSceneData.validPunctualLights; const { batchingScheme } = pass; - if (batchingScheme === BatchingSchemes.INSTANCING) { // instancing - const buffer = pass.getInstancedBuffer(); - buffer.merge(subModel, lightPassIdx); - buffer.dynamicOffsets[0] = this._lightBufferStride; - this._instancedQueue.queue.add(buffer); - } else if (batchingScheme === BatchingSchemes.VB_MERGING) { // vb-merging - const buffer = pass.getBatchedBuffer(); - buffer.merge(subModel, lightPassIdx, model); - buffer.dynamicOffsets[0] = this._lightBufferStride; - this._batchedQueue.queue.add(buffer); - } else { // standard draw - const lp = _lightPassPool.alloc(); + + let lp: IAdditiveLightPass | null = null; + if (batchingScheme === BatchingSchemes.NONE) { + lp = _lightPassPool.alloc(); lp.subModel = subModel; lp.passIdx = lightPassIdx; - for (let l = 0; l < _lightIndices.length; l++) { - const lightIdx = _lightIndices[l]; - const light = validPunctualLights[lightIdx]; - lp.lights.push(light); - lp.dynamicOffsets.push(this._lightBufferStride * lightIdx); + } + + for (let l = 0; l < _lightIndices.length; l++) { + const lightIdx = _lightIndices[l]; + const light = validPunctualLights[lightIdx]; + const visibility = light.visibility; + if (((visibility & model.node.layer) === model.node.layer)) { + switch (batchingScheme) { + case BatchingSchemes.INSTANCING: { + const buffer = pass.getInstancedBuffer(l); + buffer.merge(subModel, lightPassIdx); + buffer.dynamicOffsets[0] = this._lightBufferStride; + this._instancedQueue.queue.add(buffer); + } break; + case BatchingSchemes.VB_MERGING: { + const buffer = pass.getBatchedBuffer(l); + buffer.merge(subModel, lightPassIdx, model); + buffer.dynamicOffsets[0] = this._lightBufferStride; + this._batchedQueue.queue.add(buffer); + } break; + default: + lp!.lights.push(light); + lp!.dynamicOffsets.push(this._lightBufferStride * lightIdx); + } } - this._lightPasses.push(lp); + } + + if (batchingScheme === BatchingSchemes.NONE) { + this._lightPasses.push(lp!); } } diff --git a/cocos/rendering/render-shadow-map-batched-queue.ts b/cocos/rendering/render-shadow-map-batched-queue.ts index 9974df385d7..f844b5c502f 100644 --- a/cocos/rendering/render-shadow-map-batched-queue.ts +++ b/cocos/rendering/render-shadow-map-batched-queue.ts @@ -100,12 +100,14 @@ export class RenderShadowMapBatchedQueue { // eslint-disable-next-line no-case-declarations const spotLight = light as SpotLight; if (spotLight.shadowEnabled) { + const visibility = spotLight.visibility; const castShadowObjects = sceneData.csmLayers.castShadowObjects; for (let i = 0; i < castShadowObjects.length; i++) { const ro = castShadowObjects[i]; const model = ro.model; if (model.worldBounds) { - if (!intersect.aabbFrustum(model.worldBounds, spotLight.frustum)) { continue; } + if (((visibility & model.node.layer) !== model.node.layer) + || !intersect.aabbFrustum(model.worldBounds, spotLight.frustum)) { continue; } } this.add(model); diff --git a/editor/i18n/en/localization.js b/editor/i18n/en/localization.js index c6f6deaefc9..5883153bbda 100755 --- a/editor/i18n/en/localization.js +++ b/editor/i18n/en/localization.js @@ -153,6 +153,7 @@ module.exports = { illuminance: 'Illuminance of the light', luminous_power: 'Luminous power of the light', luminance: 'Luminance of the light', + visibility: 'Visibility mask, declaring a set of node layers that will be visible to this valid punctual Light(Does not work with directional light)', term: 'The photometric term currently being used', size: 'Size of the light', range: 'Range of the light', diff --git a/editor/i18n/zh/localization.js b/editor/i18n/zh/localization.js index 34e687aeb59..ab6c12b8f87 100755 --- a/editor/i18n/zh/localization.js +++ b/editor/i18n/zh/localization.js @@ -150,6 +150,7 @@ module.exports = { illuminance: '光源强度', luminous_flux: '光通量', luminance: '光亮度', + visibility: '可见性掩码,声明在当前精确光源中可见的节点层级集合(对方向光不生效)', term: '当前使用的光度学计量单位', size: '光源大小', range: '光源范围', diff --git a/native/cocos/renderer/pipeline/RenderAdditiveLightQueue.cpp b/native/cocos/renderer/pipeline/RenderAdditiveLightQueue.cpp index 38a7b319d38..d7b97ea411e 100644 --- a/native/cocos/renderer/pipeline/RenderAdditiveLightQueue.cpp +++ b/native/cocos/renderer/pipeline/RenderAdditiveLightQueue.cpp @@ -196,51 +196,45 @@ bool RenderAdditiveLightQueue::cullSpotLight(const scene::SpotLight *light, cons return model->getWorldBounds() && (!model->getWorldBounds()->aabbAabb(light->getAABB()) || !model->getWorldBounds()->aabbFrustum(light->getFrustum())); } -bool RenderAdditiveLightQueue::isInstancedOrBatched(const scene::Model *model) { - const auto &subModels = model->getSubModels(); - const auto subModelCount = subModels.size(); - for (uint32_t subModelIdx = 0; subModelIdx < subModelCount; ++subModelIdx) { - const auto &subModel = subModels[subModelIdx]; - const auto &passes = subModel->getPasses(); - const auto passCount = passes.size(); - for (uint32_t passIdx = 0; passIdx < passCount; ++passIdx) { - const auto &pass = passes[passIdx]; - if (pass->getBatchingScheme() == scene::BatchingSchemes::INSTANCING) { - return true; - } - if (pass->getBatchingScheme() == scene::BatchingSchemes::VB_MERGING) { - return true; - } - } - } - return false; -} - void RenderAdditiveLightQueue::addRenderQueue(scene::SubModel *subModel, const scene::Model *model, scene::Pass *pass, uint32_t lightPassIdx) { - const auto batchingScheme = pass->getBatchingScheme(); const auto lightCount = _lightIndices.size(); - if (batchingScheme == scene::BatchingSchemes::INSTANCING) { // instancing - auto *buffer = pass->getInstancedBuffer(); - buffer->merge(subModel, lightPassIdx); - buffer->setDynamicOffset(0, _lightBufferStride); - _instancedQueue->add(buffer); - } else if (batchingScheme == scene::BatchingSchemes::VB_MERGING) { // vb-merging - auto *buffer = pass->getBatchedBuffer(); - buffer->merge(subModel, lightPassIdx, model); - buffer->setDynamicOffset(0, _lightBufferStride); - _batchedQueue->add(buffer); - } else { // standard draw - AdditiveLightPass lightPass; + const auto batchingScheme = pass->getBatchingScheme(); + + AdditiveLightPass lightPass; + if (batchingScheme == scene::BatchingSchemes::NONE) { lightPass.subModel = subModel; lightPass.pass = pass; lightPass.shader = subModel->getShader(lightPassIdx); lightPass.dynamicOffsets.resize(lightCount); - for (uint32_t i = 0; i < lightCount; ++i) { - const auto lightIdx = _lightIndices[i]; - const auto *light = _validPunctualLights[lightIdx]; - lightPass.lights.emplace_back(light); - lightPass.dynamicOffsets[i] = _lightBufferStride * lightIdx; + } + + for (uint32_t i = 0; i < lightCount; ++i) { + const auto lightIdx = _lightIndices[i]; + const auto *light = _validPunctualLights[lightIdx]; + const auto visibility = light->getVisibility(); + if ((visibility & model->getNode()->getLayer()) == model->getNode()->getLayer()) { + switch (batchingScheme) { + case scene::BatchingSchemes::INSTANCING: { + auto *buffer = pass->getInstancedBuffer(i); + buffer->merge(subModel, lightPassIdx); + buffer->setDynamicOffset(0, _lightBufferStride); + _instancedQueue->add(buffer); + } break; + case scene::BatchingSchemes::VB_MERGING: { + auto *buffer = pass->getBatchedBuffer(i); + buffer->merge(subModel, lightPassIdx, model); + buffer->setDynamicOffset(0, _lightBufferStride); + _batchedQueue->add(buffer); + } break; + case scene::BatchingSchemes::NONE: { + lightPass.lights.emplace_back(light); + lightPass.dynamicOffsets[i] = _lightBufferStride * lightIdx; + } break; + } } + } + + if (batchingScheme == scene::BatchingSchemes::NONE) { _lightPasses.emplace_back(std::move(lightPass)); } } @@ -443,19 +437,14 @@ bool RenderAdditiveLightQueue::getLightPassIndex(const scene::Model *model, ccst void RenderAdditiveLightQueue::lightCulling(const scene::Model *model) { bool isCulled = false; - const auto isNeedCulling = !isInstancedOrBatched(model); for (size_t i = 0; i < _validPunctualLights.size(); i++) { const auto *const light = _validPunctualLights[i]; switch (light->getType()) { case scene::LightType::SPHERE: - if (isNeedCulling) { - isCulled = cullSphereLight(static_cast(light), model); - } + isCulled = cullSphereLight(static_cast(light), model); break; case scene::LightType::SPOT: - if (isNeedCulling) { - isCulled = cullSpotLight(static_cast(light), model); - } + isCulled = cullSpotLight(static_cast(light), model); break; default: isCulled = false; diff --git a/native/cocos/renderer/pipeline/RenderAdditiveLightQueue.h b/native/cocos/renderer/pipeline/RenderAdditiveLightQueue.h index d63863dc9e9..173f09d9bac 100644 --- a/native/cocos/renderer/pipeline/RenderAdditiveLightQueue.h +++ b/native/cocos/renderer/pipeline/RenderAdditiveLightQueue.h @@ -63,7 +63,6 @@ class RenderAdditiveLightQueue final { private: static bool cullSphereLight(const scene::SphereLight *light, const scene::Model *model); static bool cullSpotLight(const scene::SpotLight *light, const scene::Model *model); - static bool isInstancedOrBatched(const scene::Model *model); void clear(); void addRenderQueue(scene::SubModel *subModel, const scene::Model *model, scene::Pass *pass, uint32_t lightPassIdx); @@ -72,31 +71,38 @@ class RenderAdditiveLightQueue final { bool getLightPassIndex(const scene::Model *model, ccstd::vector *lightPassIndices) const; void lightCulling(const scene::Model *model); + uint32_t _lightBufferStride{0}; + uint32_t _lightBufferElementCount{0}; + uint32_t _lightBufferCount{16}; + uint32_t _phaseID{0}; + // weak reference RenderPipeline *_pipeline{nullptr}; - ccstd::vector> _sortedPSOCIArray; - // weak reference - ccstd::vector _validPunctualLights; - ccstd::vector _lightIndices; - ccstd::vector _lightPasses; - AdditiveLightPass _instancedLightPass; - AdditiveLightPass _batchedLightPass; - ccstd::vector _dynamicOffsets; - ccstd::vector _lightBufferData; // manage memory manually RenderInstancedQueue *_instancedQueue{nullptr}; // manage memory manually RenderBatchedQueue *_batchedQueue{nullptr}; + IntrusivePtr _lightBuffer; IntrusivePtr _firstLightBufferView; + float _lightMeterScale{10000.0F}; + + AdditiveLightPass _instancedLightPass; + AdditiveLightPass _batchedLightPass; + + ccstd::vector _dynamicOffsets; + ccstd::vector _lightIndices; + + ccstd::vector _lightBufferData; ccstd::array _shadowUBO{}; - uint32_t _lightBufferStride = 0; - uint32_t _lightBufferElementCount = 0; - uint32_t _lightBufferCount = 16; - float _lightMeterScale = 10000.0F; - uint32_t _phaseID = 0; + // weak reference + ccstd::vector _validPunctualLights; + + ccstd::vector _lightPasses; + + ccstd::vector> _sortedPSOCIArray; }; } // namespace pipeline diff --git a/native/cocos/renderer/pipeline/ShadowMapBatchedQueue.cpp b/native/cocos/renderer/pipeline/ShadowMapBatchedQueue.cpp index 7af8e4f3078..55512612dbc 100644 --- a/native/cocos/renderer/pipeline/ShadowMapBatchedQueue.cpp +++ b/native/cocos/renderer/pipeline/ShadowMapBatchedQueue.cpp @@ -34,7 +34,6 @@ #include "SceneCulling.h" #include "forward/ForwardPipeline.h" #include "gfx-base/GFXCommandBuffer.h" -#include "gfx-base/GFXDescriptorSet.h" #include "gfx-base/GFXDevice.h" #include "scene/Camera.h" #include "scene/DirectionalLight.h" @@ -84,10 +83,12 @@ void ShadowMapBatchedQueue::gatherLightPasses(const scene::Camera *camera, const const auto *spotLight = static_cast(light); const RenderObjectList &castShadowObjects = csmLayers->getCastShadowObjects(); if (spotLight->isShadowEnabled()) { + const auto visibility = spotLight->getVisibility(); geometry::AABB ab; for (const auto &ro : castShadowObjects) { const auto *model = ro.model; - if (!model->isEnabled() || !model->isCastShadow() || !model->getNode()) { + if ((visibility & model->getNode()->getLayer()) != model->getNode()->getLayer() + || !model->isEnabled() || !model->isCastShadow() || !model->getNode()) { continue; } if (model->getWorldBounds()) { @@ -98,15 +99,8 @@ void ShadowMapBatchedQueue::gatherLightPasses(const scene::Camera *camera, const } } } break; - - case scene::LightType::SPHERE: { - } break; - - case scene::LightType::UNKNOWN: { - } break; - - default: { - } break; + default: + break; } _instancedQueue->uploadBuffers(cmdBuffer); diff --git a/native/cocos/scene/Light.h b/native/cocos/scene/Light.h index e8347a9f745..67d251b39b2 100644 --- a/native/cocos/scene/Light.h +++ b/native/cocos/scene/Light.h @@ -29,6 +29,7 @@ #include "base/RefCounted.h" #include "base/std/container/string.h" #include "math/Vec3.h" +#include "pipeline/Define.h" namespace cc { class Node; @@ -75,6 +76,9 @@ class Light : public RefCounted { setColorTemperatureRGB(colorTemperatureToRGB(val)); } + inline uint32_t getVisibility() const { return _visibility; } + inline void setVisibility(uint32_t visibility) { _visibility = visibility; } + inline Node *getNode() const { return _node.get(); } void setNode(Node *node); @@ -95,15 +99,22 @@ class Light : public RefCounted { protected: bool _useColorTemperature{false}; bool _baked{false}; - IntrusivePtr _node; - float _colorTemp{6550.F}; + LightType _type{LightType::UNKNOWN}; - ccstd::string _name; + + uint32_t _visibility = pipeline::CAMERA_DEFAULT_MASK; + + IntrusivePtr _node; RenderScene *_scene{nullptr}; + + float _colorTemp{6550.F}; + Vec3 _color{1, 1, 1}; Vec3 _colorTemperatureRGB; Vec3 _forward{0, 0, -1}; + ccstd::string _name; + private: CC_DISALLOW_COPY_MOVE_ASSIGN(Light); }; diff --git a/native/tools/swig-config/scene.i b/native/tools/swig-config/scene.i index 9894d3ac917..ac316a5f37e 100644 --- a/native/tools/swig-config/scene.i +++ b/native/tools/swig-config/scene.i @@ -286,6 +286,7 @@ using namespace cc; %attribute(cc::scene::Light, cc::scene::LightType, type, getType, setType); %attribute(cc::scene::Light, ccstd::string&, name, getName, setName); %attribute(cc::scene::Light, cc::scene::RenderScene*, scene, getScene); +%attribute(cc::scene::Light, uint32_t, visibility, getVisibility, setVisibility); %attribute(cc::scene::DirectionalLight, cc::Vec3&, direction, getDirection, setDirection); %attribute(cc::scene::DirectionalLight, float, illuminance, getIlluminance, setIlluminance); From cca8bf20c0b88e9f843f40f4d28bd1794df790ef Mon Sep 17 00:00:00 2001 From: Cocos Robot <48829427+cocos-robot@users.noreply.github.com> Date: Wed, 26 Oct 2022 16:55:37 +0800 Subject: [PATCH 087/829] [ci skip][AUTO]: Automated code generating update: e65ab79bbd2a758c652650ee5d7295644956f8fa (#13131) (#13154) Co-authored-by: cocos-robot --- native/cocos/bindings/auto/jsb_scene_auto.cpp | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/native/cocos/bindings/auto/jsb_scene_auto.cpp b/native/cocos/bindings/auto/jsb_scene_auto.cpp index fb2c3df9946..ccd56e8a13b 100644 --- a/native/cocos/bindings/auto/jsb_scene_auto.cpp +++ b/native/cocos/bindings/auto/jsb_scene_auto.cpp @@ -293,6 +293,10 @@ using namespace cc; #define cc_scene_Light_scene_get(self_) self_->getScene() +#define cc_scene_Light_visibility_get(self_) self_->getVisibility() +#define cc_scene_Light_visibility_set(self_, val_) self_->setVisibility(val_) + + #define cc_scene_DirectionalLight_direction_get(self_) self_->getDirection() #define cc_scene_DirectionalLight_direction_set(self_, val_) self_->setDirection(val_) @@ -7118,6 +7122,48 @@ static bool js_cc_scene_Light_scene_get(se::State& s) } SE_BIND_PROP_GET(js_cc_scene_Light_scene_get) +static bool js_cc_scene_Light_visibility_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::scene::Light *arg1 = (cc::scene::Light *) NULL ; + uint32_t arg2 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "Light_visibility_set,2,SWIGTYPE_uint32_t"); + + cc_scene_Light_visibility_set(arg1,arg2); + + + return true; +} +SE_BIND_PROP_SET(js_cc_scene_Light_visibility_set) + +static bool js_cc_scene_Light_visibility_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::scene::Light *arg1 = (cc::scene::Light *) NULL ; + uint32_t result; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = cc_scene_Light_visibility_get(arg1); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "Light_visibility_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_PROP_GET(js_cc_scene_Light_visibility_get) + bool js_register_cc_scene_Light(se::Object* obj) { auto* cls = se::Class::create("Light", obj, nullptr, _SE(js_new_cc_scene_Light)); @@ -7129,6 +7175,7 @@ bool js_register_cc_scene_Light(se::Object* obj) { cls->defineProperty("type", _SE(js_cc_scene_Light_type_get), _SE(js_cc_scene_Light_type_set)); cls->defineProperty("name", _SE(js_cc_scene_Light_name_get), _SE(js_cc_scene_Light_name_set)); cls->defineProperty("scene", _SE(js_cc_scene_Light_scene_get), nullptr); + cls->defineProperty("visibility", _SE(js_cc_scene_Light_visibility_get), _SE(js_cc_scene_Light_visibility_set)); cls->defineFunction("attachToScene", _SE(js_cc_scene_Light_attachToScene)); cls->defineFunction("detachFromScene", _SE(js_cc_scene_Light_detachFromScene)); From 65d381535f0db4a3bdd480dabb110535fbfb473d Mon Sep 17 00:00:00 2001 From: hyde zhou Date: Wed, 26 Oct 2022 17:16:02 +0800 Subject: [PATCH 088/829] pipeline interface simplified (#13150) --- cocos/rendering/custom/define.ts | 31 +- cocos/rendering/custom/pipeline.ts | 18 +- cocos/rendering/custom/web-pipeline.ts | 11 +- .../cocos/bindings/auto/jsb_render_auto.cpp | 924 ++---------------- .../pipeline/custom/NativePipelineImpl.cpp | 31 +- .../pipeline/custom/NativePipelineTypes.h | 19 +- .../pipeline/custom/NativeRenderGraph.cpp | 136 +-- .../pipeline/custom/RenderInterfaceTypes.h | 19 +- 8 files changed, 124 insertions(+), 1065 deletions(-) diff --git a/cocos/rendering/custom/define.ts b/cocos/rendering/custom/define.ts index 377a02d8090..dc53ce65e3f 100644 --- a/cocos/rendering/custom/define.ts +++ b/cocos/rendering/custom/define.ts @@ -199,7 +199,8 @@ export function buildBloomPass (camera: Camera, ppl.addRenderTarget(bloomPassPrefilterRTName, Format.RGBA8, width, height, ResourceResidency.MANAGED); ppl.addDepthStencil(bloomPassPrefilterDSName, Format.DEPTH_STENCIL, width, height, ResourceResidency.MANAGED); } - const bloomPrefilterPass = ppl.addRasterPass(width, height, 'Bloom_Prefilter', `CameraBloomPrefilterPass${cameraID}`); + const bloomPrefilterPass = ppl.addRasterPass(width, height, 'Bloom_Prefilter'); + bloomPrefilterPass.name = `CameraBloomPrefilterPass${cameraID}`; bloomPrefilterPass.setViewport(new Viewport(area.x, area.y, width, height)); if (ppl.containsResource(inputRT)) { const computeView = new ComputeView(); @@ -228,7 +229,8 @@ export function buildBloomPass (camera: Camera, ppl.addRenderTarget(bloomPassDownSampleRTName, Format.RGBA8, width, height, ResourceResidency.MANAGED); ppl.addDepthStencil(bloomPassDownSampleDSName, Format.DEPTH_STENCIL, width, height, ResourceResidency.MANAGED); } - const bloomDownSamplePass = ppl.addRasterPass(width, height, `Bloom_Downsample${i}`, `CameraBloomDownSamplePass${cameraID}${i}`); + const bloomDownSamplePass = ppl.addRasterPass(width, height, `Bloom_Downsample${i}`); + bloomDownSamplePass.name = `CameraBloomDownSamplePass${cameraID}${i}`; bloomDownSamplePass.setViewport(new Viewport(area.x, area.y, width, height)); const computeView = new ComputeView(); computeView.name = 'bloomTexture'; @@ -260,8 +262,8 @@ export function buildBloomPass (camera: Camera, ppl.addRenderTarget(bloomPassUpSampleRTName, Format.RGBA8, width, height, ResourceResidency.MANAGED); ppl.addDepthStencil(bloomPassUpSampleDSName, Format.DEPTH_STENCIL, width, height, ResourceResidency.MANAGED); } - const bloomUpSamplePass = ppl.addRasterPass(width, height, `Bloom_Upsample${i}`, - `CameraBloomUpSamplePass${cameraID}${bloomData.iterations - 1 - i}`); + const bloomUpSamplePass = ppl.addRasterPass(width, height, `Bloom_Upsample${i}`); + bloomUpSamplePass.name = `CameraBloomUpSamplePass${cameraID}${bloomData.iterations - 1 - i}`; bloomUpSamplePass.setViewport(new Viewport(area.x, area.y, width, height)); const computeView = new ComputeView(); computeView.name = 'bloomTexture'; @@ -292,7 +294,8 @@ export function buildBloomPass (camera: Camera, ppl.addRenderTarget(bloomPassCombineRTName, Format.RGBA8, width, height, ResourceResidency.MANAGED); ppl.addDepthStencil(bloomPassCombineDSName, Format.DEPTH_STENCIL, width, height, ResourceResidency.MANAGED); } - const bloomCombinePass = ppl.addRasterPass(width, height, 'Bloom_Combine', `CameraBloomCombinePass${cameraID}`); + const bloomCombinePass = ppl.addRasterPass(width, height, 'Bloom_Combine'); + bloomCombinePass.name = `CameraBloomCombinePass${cameraID}`; bloomCombinePass.setViewport(new Viewport(area.x, area.y, width, height)); const computeViewOut = new ComputeView(); computeViewOut.name = 'outputResultMap'; @@ -360,7 +363,8 @@ export function buildPostprocessPass (camera: Camera, ppl.addDepthStencil(postprocessPassDS, Format.DEPTH_STENCIL, width, height, ResourceResidency.MANAGED); } ppl.updateRenderWindow(postprocessPassRTName, camera.window); - const postprocessPass = ppl.addRasterPass(width, height, 'Postprocess', `CameraPostprocessPass${cameraID}`); + const postprocessPass = ppl.addRasterPass(width, height, 'Postprocess'); + postprocessPass.name = `CameraPostprocessPass${cameraID}`; postprocessPass.setViewport(new Viewport(area.x, area.y, area.width, area.height)); if (ppl.containsResource(inputTex)) { const computeView = new ComputeView(); @@ -418,7 +422,8 @@ export function buildForwardPass (camera: Camera, if (!isOffScreen) { ppl.updateRenderWindow(forwardPassRTName, camera.window); } - const forwardPass = ppl.addRasterPass(width, height, 'default', `CameraForwardPass${cameraID}`); + const forwardPass = ppl.addRasterPass(width, height, 'default'); + forwardPass.name = `CameraForwardPass${cameraID}`; forwardPass.setViewport(new Viewport(area.x, area.y, width, height)); for (const dirShadowName of cameraInfo.mainLightShadowNames) { if (ppl.containsResource(dirShadowName)) { @@ -475,7 +480,8 @@ export function buildShadowPass (passName: Readonly, ppl.addRenderTarget(shadowMapName, format, width, height, ResourceResidency.MANAGED); ppl.addDepthStencil(`${shadowMapName}Depth`, Format.DEPTH_STENCIL, width, height, ResourceResidency.MANAGED); } - const pass = ppl.addRasterPass(width, height, 'default', passName); + const pass = ppl.addRasterPass(width, height, 'default'); + pass.name = passName; pass.setViewport(new Viewport(area.x, area.y, area.width, area.height)); pass.addRasterView(shadowMapName, new RasterView('_', AccessType.WRITE, AttachmentType.RENDER_TARGET, @@ -576,7 +582,8 @@ export function buildGBufferPass (camera: Camera, ppl.addDepthStencil(gBufferPassDSName, Format.DEPTH_STENCIL, width, height, ResourceResidency.MANAGED); } // gbuffer pass - const gBufferPass = ppl.addRasterPass(width, height, 'Geometry', `CameraGBufferPass${cameraID}`); + const gBufferPass = ppl.addRasterPass(width, height, 'Geometry'); + gBufferPass.name = `CameraGBufferPass${cameraID}`; gBufferPass.setViewport(new Viewport(area.x, area.y, area.width, area.height)); const rtColor = new Color(0, 0, 0, 0); if (camera.clearFlag & ClearFlagBit.COLOR) { @@ -662,7 +669,8 @@ export function buildLightingPass (camera: Camera, ppl: Pipeline, gBuffer: GBuff ppl.addDepthStencil(deferredLightingPassDS, Format.DEPTH_STENCIL, width, height, ResourceResidency.MANAGED); } // lighting pass - const lightingPass = ppl.addRasterPass(width, height, 'Lighting', `CameraLightingPass${cameraID}`); + const lightingPass = ppl.addRasterPass(width, height, 'Lighting'); + lightingPass.name = `CameraLightingPass${cameraID}`; lightingPass.setViewport(new Viewport(area.x, area.y, width, height)); for (const dirShadowName of cameraInfo.mainLightShadowNames) { if (ppl.containsResource(dirShadowName)) { @@ -731,7 +739,8 @@ export function buildNativeForwardPass (camera: Camera, ppl: Pipeline) { } // Passes - const forwardPass = ppl.addRasterPass(width, height, 'default', `CameraForwardPass${cameraID}`); + const forwardPass = ppl.addRasterPass(width, height, 'default'); + forwardPass.name = `CameraForwardPass${cameraID}`; forwardPass.setViewport(new Viewport(area.x, area.y, width, height)); const passView = new RasterView('_', diff --git a/cocos/rendering/custom/pipeline.ts b/cocos/rendering/custom/pipeline.ts index 1a7aa44bfd0..f82cc6ceb03 100644 --- a/cocos/rendering/custom/pipeline.ts +++ b/cocos/rendering/custom/pipeline.ts @@ -86,12 +86,9 @@ export interface Setter extends RenderNode { } export interface RasterQueueBuilder extends Setter { - addSceneOfCamera (camera: Camera, light: LightInfo, sceneFlags: SceneFlags, name: string): void; addSceneOfCamera (camera: Camera, light: LightInfo, sceneFlags: SceneFlags): void; addScene (name: string, sceneFlags: SceneFlags): void; - addFullscreenQuad (material: Material, passID: number, sceneFlags: SceneFlags, name: string): void; addFullscreenQuad (material: Material, passID: number, sceneFlags: SceneFlags): void; - addCameraQuad (camera: Camera, material: Material, passID: number, sceneFlags: SceneFlags, name: string): void; addCameraQuad (camera: Camera, material: Material, passID: number, sceneFlags: SceneFlags): void; clearRenderTarget (name: string, color: Color): void; setViewport (viewport: Viewport): void; @@ -100,26 +97,17 @@ export interface RasterQueueBuilder extends Setter { export interface RasterPassBuilder extends Setter { addRasterView (name: string, view: RasterView): void; addComputeView (name: string, view: ComputeView): void; - addQueue (hint: QueueHint, name: string): RasterQueueBuilder; addQueue (hint: QueueHint): RasterQueueBuilder; - addFullscreenQuad (material: Material, passID: number, sceneFlags: SceneFlags, name: string): void; - addFullscreenQuad (material: Material, passID: number, sceneFlags: SceneFlags): void; - addCameraQuad (camera: Camera, material: Material, passID: number, sceneFlags: SceneFlags, name: string): void; - addCameraQuad (camera: Camera, material: Material, passID: number, sceneFlags: SceneFlags): void; setViewport (viewport: Viewport): void; } export interface ComputeQueueBuilder extends Setter { - addDispatch (shader: string, threadGroupCountX: number, threadGroupCountY: number, threadGroupCountZ: number, name: string): void; addDispatch (shader: string, threadGroupCountX: number, threadGroupCountY: number, threadGroupCountZ: number): void; } export interface ComputePassBuilder extends Setter { addComputeView (name: string, view: ComputeView): void; - addQueue (name: string): ComputeQueueBuilder; addQueue (): ComputeQueueBuilder; - addDispatch (shader: string, threadGroupCountX: number, threadGroupCountY: number, threadGroupCountZ: number, name: string): void; - addDispatch (shader: string, threadGroupCountX: number, threadGroupCountY: number, threadGroupCountZ: number): void; } export interface MovePassBuilder extends RenderNode { @@ -175,12 +163,10 @@ export interface Pipeline extends PipelineRuntime { updateRenderWindow (name: string, renderWindow: RenderWindow): void; beginFrame (): void; endFrame (): void; - addRasterPass (width: number, height: number, layoutName: string, name: string): RasterPassBuilder; addRasterPass (width: number, height: number, layoutName: string): RasterPassBuilder; - addComputePass (layoutName: string, name: string): ComputePassBuilder; addComputePass (layoutName: string): ComputePassBuilder; - addMovePass (name: string): MovePassBuilder; - addCopyPass (name: string): CopyPassBuilder; + addMovePass (): MovePassBuilder; + addCopyPass (): CopyPassBuilder; presentAll (): void; createSceneTransversal (camera: Camera, scene: RenderScene): SceneTransversal; readonly layoutGraphBuilder: LayoutGraphBuilder; diff --git a/cocos/rendering/custom/web-pipeline.ts b/cocos/rendering/custom/web-pipeline.ts index d664f80c998..7c9868ffd67 100644 --- a/cocos/rendering/custom/web-pipeline.ts +++ b/cocos/rendering/custom/web-pipeline.ts @@ -788,15 +788,13 @@ export class WebPipeline implements Pipeline { public containsResource (name: string): boolean { return this._resourceGraph.contains(name); } - public addComputePass(layoutName: string, name: string): ComputePassBuilder; - public addComputePass(layoutName: string): ComputePassBuilder; - public addComputePass (layoutName: any, name?: any): ComputePassBuilder { + public addComputePass (layoutName: string): ComputePassBuilder { throw new Error('Method not implemented.'); } - public addMovePass (name: string): MovePassBuilder { + public addMovePass (): MovePassBuilder { throw new Error('Method not implemented.'); } - public addCopyPass (name: string): CopyPassBuilder { + public addCopyPass (): CopyPassBuilder { throw new Error('Method not implemented.'); } public presentAll (): void { @@ -1106,7 +1104,8 @@ export class WebPipeline implements Pipeline { this.endFrame(); } - addRasterPass (width: number, height: number, layoutName: string, name = 'Raster'): RasterPassBuilder { + addRasterPass (width: number, height: number, layoutName: string): RasterPassBuilder { + const name = 'Raster'; const pass = new RasterPass(); pass.viewport.width = width; pass.viewport.height = height; diff --git a/native/cocos/bindings/auto/jsb_render_auto.cpp b/native/cocos/bindings/auto/jsb_render_auto.cpp index 3b726b53fdf..be3af43c2dd 100644 --- a/native/cocos/bindings/auto/jsb_render_auto.cpp +++ b/native/cocos/bindings/auto/jsb_render_auto.cpp @@ -1213,56 +1213,22 @@ se::Class* __jsb_cc_render_RasterQueueBuilder_class = nullptr; se::Object* __jsb_cc_render_RasterQueueBuilder_proto = nullptr; SE_DECLARE_FINALIZE_FUNC(js_delete_cc_render_RasterQueueBuilder) -static bool js_cc_render_RasterQueueBuilder_addSceneOfCamera__SWIG_0(se::State& s) -{ - // js_overloaded_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - cc::render::RasterQueueBuilder *arg1 = (cc::render::RasterQueueBuilder *) NULL ; - cc::scene::Camera *arg2 = (cc::scene::Camera *) NULL ; - LightInfo arg3 ; - SceneFlags arg4 ; - ccstd::string *arg5 = 0 ; - ccstd::string temp5 ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE* - ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "RasterQueueBuilder_addSceneOfCamera,2,SWIGTYPE_p_cc__scene__Camera"); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[1], &arg3, s.thisObject()); - SE_PRECONDITION2(ok, false, "RasterQueueBuilder_addSceneOfCamera,3,SWIGTYPE_LightInfo"); - - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[2], &arg4, s.thisObject()); - SE_PRECONDITION2(ok, false, "RasterQueueBuilder_addSceneOfCamera,4,SWIGTYPE_SceneFlags"); - - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[3], &temp5, s.thisObject()); - SE_PRECONDITION2(ok, false, "RasterQueueBuilder_addSceneOfCamera,5,SWIGTYPE_p_ccstd__string"); - arg5 = &temp5; - - (arg1)->addSceneOfCamera(arg2,arg3,arg4,(ccstd::string const &)*arg5); - - - return true; -} - -static bool js_cc_render_RasterQueueBuilder_addSceneOfCamera__SWIG_1(se::State& s) +static bool js_cc_render_RasterQueueBuilder_addSceneOfCamera(se::State& s) { - // js_overloaded_function + // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); + size_t argc = args.size(); cc::render::RasterQueueBuilder *arg1 = (cc::render::RasterQueueBuilder *) NULL ; cc::scene::Camera *arg2 = (cc::scene::Camera *) NULL ; LightInfo arg3 ; SceneFlags arg4 ; + if(argc != 3) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); + return false; + } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE* @@ -1283,30 +1249,6 @@ static bool js_cc_render_RasterQueueBuilder_addSceneOfCamera__SWIG_1(se::State& return true; } - -static bool js_cc_render_RasterQueueBuilder_addSceneOfCamera(se::State& s) -{ - // js_function_dispatcher - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - - // js_function_dispatch_case - if (argc == 4) { - ok = js_cc_render_RasterQueueBuilder_addSceneOfCamera__SWIG_0(s); - if (ok) { - return true; - } - } // js_function_dispatch_case - if (argc == 3) { - ok = js_cc_render_RasterQueueBuilder_addSceneOfCamera__SWIG_1(s); - if (ok) { - return true; - } - } - SE_REPORT_ERROR("wrong number of arguments: %d", (int)argc); - return false; -} SE_BIND_FUNC(js_cc_render_RasterQueueBuilder_addSceneOfCamera) static bool js_cc_render_RasterQueueBuilder_addScene(se::State& s) @@ -1344,56 +1286,22 @@ static bool js_cc_render_RasterQueueBuilder_addScene(se::State& s) } SE_BIND_FUNC(js_cc_render_RasterQueueBuilder_addScene) -static bool js_cc_render_RasterQueueBuilder_addFullscreenQuad__SWIG_0(se::State& s) -{ - // js_overloaded_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - cc::render::RasterQueueBuilder *arg1 = (cc::render::RasterQueueBuilder *) NULL ; - cc::Material *arg2 = (cc::Material *) NULL ; - uint32_t arg3 ; - SceneFlags arg4 ; - ccstd::string *arg5 = 0 ; - ccstd::string temp5 ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE* - ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "RasterQueueBuilder_addFullscreenQuad,2,SWIGTYPE_p_cc__Material"); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[1], &arg3, s.thisObject()); - SE_PRECONDITION2(ok, false, "RasterQueueBuilder_addFullscreenQuad,3,SWIGTYPE_uint32_t"); - - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[2], &arg4, s.thisObject()); - SE_PRECONDITION2(ok, false, "RasterQueueBuilder_addFullscreenQuad,4,SWIGTYPE_SceneFlags"); - - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[3], &temp5, s.thisObject()); - SE_PRECONDITION2(ok, false, "RasterQueueBuilder_addFullscreenQuad,5,SWIGTYPE_p_ccstd__string"); - arg5 = &temp5; - - (arg1)->addFullscreenQuad(arg2,arg3,arg4,(ccstd::string const &)*arg5); - - - return true; -} - -static bool js_cc_render_RasterQueueBuilder_addFullscreenQuad__SWIG_1(se::State& s) +static bool js_cc_render_RasterQueueBuilder_addFullscreenQuad(se::State& s) { - // js_overloaded_function + // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); + size_t argc = args.size(); cc::render::RasterQueueBuilder *arg1 = (cc::render::RasterQueueBuilder *) NULL ; cc::Material *arg2 = (cc::Material *) NULL ; uint32_t arg3 ; SceneFlags arg4 ; + if(argc != 3) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); + return false; + } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE* @@ -1414,87 +1322,25 @@ static bool js_cc_render_RasterQueueBuilder_addFullscreenQuad__SWIG_1(se::State& return true; } - -static bool js_cc_render_RasterQueueBuilder_addFullscreenQuad(se::State& s) -{ - // js_function_dispatcher - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - - // js_function_dispatch_case - if (argc == 4) { - ok = js_cc_render_RasterQueueBuilder_addFullscreenQuad__SWIG_0(s); - if (ok) { - return true; - } - } // js_function_dispatch_case - if (argc == 3) { - ok = js_cc_render_RasterQueueBuilder_addFullscreenQuad__SWIG_1(s); - if (ok) { - return true; - } - } - SE_REPORT_ERROR("wrong number of arguments: %d", (int)argc); - return false; -} SE_BIND_FUNC(js_cc_render_RasterQueueBuilder_addFullscreenQuad) -static bool js_cc_render_RasterQueueBuilder_addCameraQuad__SWIG_0(se::State& s) -{ - // js_overloaded_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - cc::render::RasterQueueBuilder *arg1 = (cc::render::RasterQueueBuilder *) NULL ; - cc::scene::Camera *arg2 = (cc::scene::Camera *) NULL ; - cc::Material *arg3 = (cc::Material *) NULL ; - uint32_t arg4 ; - SceneFlags arg5 ; - ccstd::string *arg6 = 0 ; - ccstd::string temp6 ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE* - ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "RasterQueueBuilder_addCameraQuad,2,SWIGTYPE_p_cc__scene__Camera"); - // %typemap(in) SWIGTYPE* - ok &= sevalue_to_native(args[1], &arg3, s.thisObject()); - SE_PRECONDITION2(ok, false, "RasterQueueBuilder_addCameraQuad,3,SWIGTYPE_p_cc__Material"); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[2], &arg4, s.thisObject()); - SE_PRECONDITION2(ok, false, "RasterQueueBuilder_addCameraQuad,4,SWIGTYPE_uint32_t"); - - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[3], &arg5, s.thisObject()); - SE_PRECONDITION2(ok, false, "RasterQueueBuilder_addCameraQuad,5,SWIGTYPE_SceneFlags"); - - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[4], &temp6, s.thisObject()); - SE_PRECONDITION2(ok, false, "RasterQueueBuilder_addCameraQuad,6,SWIGTYPE_p_ccstd__string"); - arg6 = &temp6; - - (arg1)->addCameraQuad(arg2,arg3,arg4,arg5,(ccstd::string const &)*arg6); - - - return true; -} - -static bool js_cc_render_RasterQueueBuilder_addCameraQuad__SWIG_1(se::State& s) +static bool js_cc_render_RasterQueueBuilder_addCameraQuad(se::State& s) { - // js_overloaded_function + // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); + size_t argc = args.size(); cc::render::RasterQueueBuilder *arg1 = (cc::render::RasterQueueBuilder *) NULL ; cc::scene::Camera *arg2 = (cc::scene::Camera *) NULL ; cc::Material *arg3 = (cc::Material *) NULL ; uint32_t arg4 ; SceneFlags arg5 ; + if(argc != 4) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 4); + return false; + } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE* @@ -1518,30 +1364,6 @@ static bool js_cc_render_RasterQueueBuilder_addCameraQuad__SWIG_1(se::State& s) return true; } - -static bool js_cc_render_RasterQueueBuilder_addCameraQuad(se::State& s) -{ - // js_function_dispatcher - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - - // js_function_dispatch_case - if (argc == 5) { - ok = js_cc_render_RasterQueueBuilder_addCameraQuad__SWIG_0(s); - if (ok) { - return true; - } - } // js_function_dispatch_case - if (argc == 4) { - ok = js_cc_render_RasterQueueBuilder_addCameraQuad__SWIG_1(s); - if (ok) { - return true; - } - } - SE_REPORT_ERROR("wrong number of arguments: %d", (int)argc); - return false; -} SE_BIND_FUNC(js_cc_render_RasterQueueBuilder_addCameraQuad) static bool js_cc_render_RasterQueueBuilder_clearRenderTarget(se::State& s) @@ -1719,50 +1541,21 @@ static bool js_cc_render_RasterPassBuilder_addComputeView(se::State& s) } SE_BIND_FUNC(js_cc_render_RasterPassBuilder_addComputeView) -static bool js_cc_render_RasterPassBuilder_addQueue__SWIG_0(se::State& s) -{ - // js_overloaded_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - cc::render::RasterPassBuilder *arg1 = (cc::render::RasterPassBuilder *) NULL ; - QueueHint arg2 ; - ccstd::string *arg3 = 0 ; - ccstd::string temp3 ; - cc::render::RasterQueueBuilder *result = 0 ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "RasterPassBuilder_addQueue,2,SWIGTYPE_QueueHint"); - - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[1], &temp3, s.thisObject()); - SE_PRECONDITION2(ok, false, "RasterPassBuilder_addQueue,3,SWIGTYPE_p_ccstd__string"); - arg3 = &temp3; - - result = (cc::render::RasterQueueBuilder *)(arg1)->addQueue(arg2,(ccstd::string const &)*arg3); - // %typemap(out) SWIGTYPE* - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "RasterPassBuilder_addQueue, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - - - return true; -} - -static bool js_cc_render_RasterPassBuilder_addQueue__SWIG_1(se::State& s) +static bool js_cc_render_RasterPassBuilder_addQueue(se::State& s) { - // js_overloaded_function + // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); + size_t argc = args.size(); cc::render::RasterPassBuilder *arg1 = (cc::render::RasterPassBuilder *) NULL ; QueueHint arg2 ; cc::render::RasterQueueBuilder *result = 0 ; + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); @@ -1779,232 +1572,8 @@ static bool js_cc_render_RasterPassBuilder_addQueue__SWIG_1(se::State& s) return true; } - -static bool js_cc_render_RasterPassBuilder_addQueue(se::State& s) -{ - // js_function_dispatcher - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - - // js_function_dispatch_case - if (argc == 2) { - ok = js_cc_render_RasterPassBuilder_addQueue__SWIG_0(s); - if (ok) { - return true; - } - } // js_function_dispatch_case - if (argc == 1) { - ok = js_cc_render_RasterPassBuilder_addQueue__SWIG_1(s); - if (ok) { - return true; - } - } - SE_REPORT_ERROR("wrong number of arguments: %d", (int)argc); - return false; -} SE_BIND_FUNC(js_cc_render_RasterPassBuilder_addQueue) -static bool js_cc_render_RasterPassBuilder_addFullscreenQuad__SWIG_0(se::State& s) -{ - // js_overloaded_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - cc::render::RasterPassBuilder *arg1 = (cc::render::RasterPassBuilder *) NULL ; - cc::Material *arg2 = (cc::Material *) NULL ; - uint32_t arg3 ; - SceneFlags arg4 ; - ccstd::string *arg5 = 0 ; - ccstd::string temp5 ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE* - ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "RasterPassBuilder_addFullscreenQuad,2,SWIGTYPE_p_cc__Material"); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[1], &arg3, s.thisObject()); - SE_PRECONDITION2(ok, false, "RasterPassBuilder_addFullscreenQuad,3,SWIGTYPE_uint32_t"); - - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[2], &arg4, s.thisObject()); - SE_PRECONDITION2(ok, false, "RasterPassBuilder_addFullscreenQuad,4,SWIGTYPE_SceneFlags"); - - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[3], &temp5, s.thisObject()); - SE_PRECONDITION2(ok, false, "RasterPassBuilder_addFullscreenQuad,5,SWIGTYPE_p_ccstd__string"); - arg5 = &temp5; - - (arg1)->addFullscreenQuad(arg2,arg3,arg4,(ccstd::string const &)*arg5); - - - return true; -} - -static bool js_cc_render_RasterPassBuilder_addFullscreenQuad__SWIG_1(se::State& s) -{ - // js_overloaded_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - cc::render::RasterPassBuilder *arg1 = (cc::render::RasterPassBuilder *) NULL ; - cc::Material *arg2 = (cc::Material *) NULL ; - uint32_t arg3 ; - SceneFlags arg4 ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE* - ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "RasterPassBuilder_addFullscreenQuad,2,SWIGTYPE_p_cc__Material"); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[1], &arg3, s.thisObject()); - SE_PRECONDITION2(ok, false, "RasterPassBuilder_addFullscreenQuad,3,SWIGTYPE_uint32_t"); - - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[2], &arg4, s.thisObject()); - SE_PRECONDITION2(ok, false, "RasterPassBuilder_addFullscreenQuad,4,SWIGTYPE_SceneFlags"); - - (arg1)->addFullscreenQuad(arg2,arg3,arg4); - - - return true; -} - -static bool js_cc_render_RasterPassBuilder_addFullscreenQuad(se::State& s) -{ - // js_function_dispatcher - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - - // js_function_dispatch_case - if (argc == 4) { - ok = js_cc_render_RasterPassBuilder_addFullscreenQuad__SWIG_0(s); - if (ok) { - return true; - } - } // js_function_dispatch_case - if (argc == 3) { - ok = js_cc_render_RasterPassBuilder_addFullscreenQuad__SWIG_1(s); - if (ok) { - return true; - } - } - SE_REPORT_ERROR("wrong number of arguments: %d", (int)argc); - return false; -} -SE_BIND_FUNC(js_cc_render_RasterPassBuilder_addFullscreenQuad) - -static bool js_cc_render_RasterPassBuilder_addCameraQuad__SWIG_0(se::State& s) -{ - // js_overloaded_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - cc::render::RasterPassBuilder *arg1 = (cc::render::RasterPassBuilder *) NULL ; - cc::scene::Camera *arg2 = (cc::scene::Camera *) NULL ; - cc::Material *arg3 = (cc::Material *) NULL ; - uint32_t arg4 ; - SceneFlags arg5 ; - ccstd::string *arg6 = 0 ; - ccstd::string temp6 ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE* - ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "RasterPassBuilder_addCameraQuad,2,SWIGTYPE_p_cc__scene__Camera"); - // %typemap(in) SWIGTYPE* - ok &= sevalue_to_native(args[1], &arg3, s.thisObject()); - SE_PRECONDITION2(ok, false, "RasterPassBuilder_addCameraQuad,3,SWIGTYPE_p_cc__Material"); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[2], &arg4, s.thisObject()); - SE_PRECONDITION2(ok, false, "RasterPassBuilder_addCameraQuad,4,SWIGTYPE_uint32_t"); - - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[3], &arg5, s.thisObject()); - SE_PRECONDITION2(ok, false, "RasterPassBuilder_addCameraQuad,5,SWIGTYPE_SceneFlags"); - - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[4], &temp6, s.thisObject()); - SE_PRECONDITION2(ok, false, "RasterPassBuilder_addCameraQuad,6,SWIGTYPE_p_ccstd__string"); - arg6 = &temp6; - - (arg1)->addCameraQuad(arg2,arg3,arg4,arg5,(ccstd::string const &)*arg6); - - - return true; -} - -static bool js_cc_render_RasterPassBuilder_addCameraQuad__SWIG_1(se::State& s) -{ - // js_overloaded_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - cc::render::RasterPassBuilder *arg1 = (cc::render::RasterPassBuilder *) NULL ; - cc::scene::Camera *arg2 = (cc::scene::Camera *) NULL ; - cc::Material *arg3 = (cc::Material *) NULL ; - uint32_t arg4 ; - SceneFlags arg5 ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE* - ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "RasterPassBuilder_addCameraQuad,2,SWIGTYPE_p_cc__scene__Camera"); - // %typemap(in) SWIGTYPE* - ok &= sevalue_to_native(args[1], &arg3, s.thisObject()); - SE_PRECONDITION2(ok, false, "RasterPassBuilder_addCameraQuad,3,SWIGTYPE_p_cc__Material"); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[2], &arg4, s.thisObject()); - SE_PRECONDITION2(ok, false, "RasterPassBuilder_addCameraQuad,4,SWIGTYPE_uint32_t"); - - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[3], &arg5, s.thisObject()); - SE_PRECONDITION2(ok, false, "RasterPassBuilder_addCameraQuad,5,SWIGTYPE_SceneFlags"); - - (arg1)->addCameraQuad(arg2,arg3,arg4,arg5); - - - return true; -} - -static bool js_cc_render_RasterPassBuilder_addCameraQuad(se::State& s) -{ - // js_function_dispatcher - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - - // js_function_dispatch_case - if (argc == 5) { - ok = js_cc_render_RasterPassBuilder_addCameraQuad__SWIG_0(s); - if (ok) { - return true; - } - } // js_function_dispatch_case - if (argc == 4) { - ok = js_cc_render_RasterPassBuilder_addCameraQuad__SWIG_1(s); - if (ok) { - return true; - } - } - SE_REPORT_ERROR("wrong number of arguments: %d", (int)argc); - return false; -} -SE_BIND_FUNC(js_cc_render_RasterPassBuilder_addCameraQuad) - static bool js_cc_render_RasterPassBuilder_setViewport(se::State& s) { // js_function @@ -2048,8 +1617,6 @@ bool js_register_cc_render_RasterPassBuilder(se::Object* obj) { cls->defineFunction("addRasterView", _SE(js_cc_render_RasterPassBuilder_addRasterView)); cls->defineFunction("addComputeView", _SE(js_cc_render_RasterPassBuilder_addComputeView)); cls->defineFunction("addQueue", _SE(js_cc_render_RasterPassBuilder_addQueue)); - cls->defineFunction("addFullscreenQuad", _SE(js_cc_render_RasterPassBuilder_addFullscreenQuad)); - cls->defineFunction("addCameraQuad", _SE(js_cc_render_RasterPassBuilder_addCameraQuad)); cls->defineFunction("setViewport", _SE(js_cc_render_RasterPassBuilder_setViewport)); @@ -2069,63 +1636,16 @@ bool js_register_cc_render_RasterPassBuilder(se::Object* obj) { se::Class* __jsb_cc_render_ComputeQueueBuilder_class = nullptr; -se::Object* __jsb_cc_render_ComputeQueueBuilder_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_render_ComputeQueueBuilder) - -static bool js_cc_render_ComputeQueueBuilder_addDispatch__SWIG_0(se::State& s) -{ - // js_overloaded_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - cc::render::ComputeQueueBuilder *arg1 = (cc::render::ComputeQueueBuilder *) NULL ; - ccstd::string *arg2 = 0 ; - uint32_t arg3 ; - uint32_t arg4 ; - uint32_t arg5 ; - ccstd::string *arg6 = 0 ; - ccstd::string temp2 ; - ccstd::string temp6 ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "ComputeQueueBuilder_addDispatch,2,SWIGTYPE_p_ccstd__string"); - arg2 = &temp2; - - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[1], &arg3, s.thisObject()); - SE_PRECONDITION2(ok, false, "ComputeQueueBuilder_addDispatch,3,SWIGTYPE_uint32_t"); - - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[2], &arg4, s.thisObject()); - SE_PRECONDITION2(ok, false, "ComputeQueueBuilder_addDispatch,4,SWIGTYPE_uint32_t"); - - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[3], &arg5, s.thisObject()); - SE_PRECONDITION2(ok, false, "ComputeQueueBuilder_addDispatch,5,SWIGTYPE_uint32_t"); - - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[4], &temp6, s.thisObject()); - SE_PRECONDITION2(ok, false, "ComputeQueueBuilder_addDispatch,6,SWIGTYPE_p_ccstd__string"); - arg6 = &temp6; - - (arg1)->addDispatch((ccstd::string const &)*arg2,arg3,arg4,arg5,(ccstd::string const &)*arg6); - - - return true; -} +se::Object* __jsb_cc_render_ComputeQueueBuilder_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_render_ComputeQueueBuilder) -static bool js_cc_render_ComputeQueueBuilder_addDispatch__SWIG_1(se::State& s) +static bool js_cc_render_ComputeQueueBuilder_addDispatch(se::State& s) { - // js_overloaded_function + // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); + size_t argc = args.size(); cc::render::ComputeQueueBuilder *arg1 = (cc::render::ComputeQueueBuilder *) NULL ; ccstd::string *arg2 = 0 ; uint32_t arg3 ; @@ -2133,6 +1653,10 @@ static bool js_cc_render_ComputeQueueBuilder_addDispatch__SWIG_1(se::State& s) uint32_t arg5 ; ccstd::string temp2 ; + if(argc != 4) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 4); + return false; + } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE& @@ -2160,30 +1684,6 @@ static bool js_cc_render_ComputeQueueBuilder_addDispatch__SWIG_1(se::State& s) return true; } - -static bool js_cc_render_ComputeQueueBuilder_addDispatch(se::State& s) -{ - // js_function_dispatcher - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - - // js_function_dispatch_case - if (argc == 5) { - ok = js_cc_render_ComputeQueueBuilder_addDispatch__SWIG_0(s); - if (ok) { - return true; - } - } // js_function_dispatch_case - if (argc == 4) { - ok = js_cc_render_ComputeQueueBuilder_addDispatch__SWIG_1(s); - if (ok) { - return true; - } - } - SE_REPORT_ERROR("wrong number of arguments: %d", (int)argc); - return false; -} SE_BIND_FUNC(js_cc_render_ComputeQueueBuilder_addDispatch) static bool js_delete_cc_render_ComputeQueueBuilder(se::State& s) @@ -2255,43 +1755,20 @@ static bool js_cc_render_ComputePassBuilder_addComputeView(se::State& s) } SE_BIND_FUNC(js_cc_render_ComputePassBuilder_addComputeView) -static bool js_cc_render_ComputePassBuilder_addQueue__SWIG_0(se::State& s) -{ - // js_overloaded_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - cc::render::ComputePassBuilder *arg1 = (cc::render::ComputePassBuilder *) NULL ; - ccstd::string *arg2 = 0 ; - ccstd::string temp2 ; - cc::render::ComputeQueueBuilder *result = 0 ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "ComputePassBuilder_addQueue,2,SWIGTYPE_p_ccstd__string"); - arg2 = &temp2; - - result = (cc::render::ComputeQueueBuilder *)(arg1)->addQueue((ccstd::string const &)*arg2); - // %typemap(out) SWIGTYPE* - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "ComputePassBuilder_addQueue, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - - - return true; -} - -static bool js_cc_render_ComputePassBuilder_addQueue__SWIG_1(se::State& s) +static bool js_cc_render_ComputePassBuilder_addQueue(se::State& s) { - // js_overloaded_function + // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); + size_t argc = args.size(); cc::render::ComputePassBuilder *arg1 = (cc::render::ComputePassBuilder *) NULL ; cc::render::ComputeQueueBuilder *result = 0 ; + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); result = (cc::render::ComputeQueueBuilder *)(arg1)->addQueue(); @@ -2303,146 +1780,8 @@ static bool js_cc_render_ComputePassBuilder_addQueue__SWIG_1(se::State& s) return true; } - -static bool js_cc_render_ComputePassBuilder_addQueue(se::State& s) -{ - // js_function_dispatcher - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - - // js_function_dispatch_case - if (argc == 1) { - ok = js_cc_render_ComputePassBuilder_addQueue__SWIG_0(s); - if (ok) { - return true; - } - } // js_function_dispatch_case - if (argc == 0) { - ok = js_cc_render_ComputePassBuilder_addQueue__SWIG_1(s); - if (ok) { - return true; - } - } - SE_REPORT_ERROR("wrong number of arguments: %d", (int)argc); - return false; -} SE_BIND_FUNC(js_cc_render_ComputePassBuilder_addQueue) -static bool js_cc_render_ComputePassBuilder_addDispatch__SWIG_0(se::State& s) -{ - // js_overloaded_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - cc::render::ComputePassBuilder *arg1 = (cc::render::ComputePassBuilder *) NULL ; - ccstd::string *arg2 = 0 ; - uint32_t arg3 ; - uint32_t arg4 ; - uint32_t arg5 ; - ccstd::string *arg6 = 0 ; - ccstd::string temp2 ; - ccstd::string temp6 ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "ComputePassBuilder_addDispatch,2,SWIGTYPE_p_ccstd__string"); - arg2 = &temp2; - - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[1], &arg3, s.thisObject()); - SE_PRECONDITION2(ok, false, "ComputePassBuilder_addDispatch,3,SWIGTYPE_uint32_t"); - - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[2], &arg4, s.thisObject()); - SE_PRECONDITION2(ok, false, "ComputePassBuilder_addDispatch,4,SWIGTYPE_uint32_t"); - - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[3], &arg5, s.thisObject()); - SE_PRECONDITION2(ok, false, "ComputePassBuilder_addDispatch,5,SWIGTYPE_uint32_t"); - - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[4], &temp6, s.thisObject()); - SE_PRECONDITION2(ok, false, "ComputePassBuilder_addDispatch,6,SWIGTYPE_p_ccstd__string"); - arg6 = &temp6; - - (arg1)->addDispatch((ccstd::string const &)*arg2,arg3,arg4,arg5,(ccstd::string const &)*arg6); - - - return true; -} - -static bool js_cc_render_ComputePassBuilder_addDispatch__SWIG_1(se::State& s) -{ - // js_overloaded_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - cc::render::ComputePassBuilder *arg1 = (cc::render::ComputePassBuilder *) NULL ; - ccstd::string *arg2 = 0 ; - uint32_t arg3 ; - uint32_t arg4 ; - uint32_t arg5 ; - ccstd::string temp2 ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "ComputePassBuilder_addDispatch,2,SWIGTYPE_p_ccstd__string"); - arg2 = &temp2; - - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[1], &arg3, s.thisObject()); - SE_PRECONDITION2(ok, false, "ComputePassBuilder_addDispatch,3,SWIGTYPE_uint32_t"); - - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[2], &arg4, s.thisObject()); - SE_PRECONDITION2(ok, false, "ComputePassBuilder_addDispatch,4,SWIGTYPE_uint32_t"); - - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[3], &arg5, s.thisObject()); - SE_PRECONDITION2(ok, false, "ComputePassBuilder_addDispatch,5,SWIGTYPE_uint32_t"); - - (arg1)->addDispatch((ccstd::string const &)*arg2,arg3,arg4,arg5); - - - return true; -} - -static bool js_cc_render_ComputePassBuilder_addDispatch(se::State& s) -{ - // js_function_dispatcher - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - - // js_function_dispatch_case - if (argc == 5) { - ok = js_cc_render_ComputePassBuilder_addDispatch__SWIG_0(s); - if (ok) { - return true; - } - } // js_function_dispatch_case - if (argc == 4) { - ok = js_cc_render_ComputePassBuilder_addDispatch__SWIG_1(s); - if (ok) { - return true; - } - } - SE_REPORT_ERROR("wrong number of arguments: %d", (int)argc); - return false; -} -SE_BIND_FUNC(js_cc_render_ComputePassBuilder_addDispatch) - static bool js_delete_cc_render_ComputePassBuilder(se::State& s) { // js_dtoroverride @@ -2456,7 +1795,6 @@ bool js_register_cc_render_ComputePassBuilder(se::Object* obj) { cls->defineFunction("addComputeView", _SE(js_cc_render_ComputePassBuilder_addComputeView)); cls->defineFunction("addQueue", _SE(js_cc_render_ComputePassBuilder_addQueue)); - cls->defineFunction("addDispatch", _SE(js_cc_render_ComputePassBuilder_addDispatch)); @@ -3673,59 +3011,13 @@ static bool js_cc_render_Pipeline_endFrame(se::State& s) } SE_BIND_FUNC(js_cc_render_Pipeline_endFrame) -static bool js_cc_render_Pipeline_addRasterPass__SWIG_0(se::State& s) -{ - // js_overloaded_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - cc::render::Pipeline *arg1 = (cc::render::Pipeline *) NULL ; - uint32_t arg2 ; - uint32_t arg3 ; - ccstd::string *arg4 = 0 ; - ccstd::string *arg5 = 0 ; - ccstd::string temp4 ; - ccstd::string temp5 ; - cc::render::RasterPassBuilder *result = 0 ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Pipeline_addRasterPass,2,SWIGTYPE_uint32_t"); - - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[1], &arg3, s.thisObject()); - SE_PRECONDITION2(ok, false, "Pipeline_addRasterPass,3,SWIGTYPE_uint32_t"); - - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[2], &temp4, s.thisObject()); - SE_PRECONDITION2(ok, false, "Pipeline_addRasterPass,4,SWIGTYPE_p_ccstd__string"); - arg4 = &temp4; - - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[3], &temp5, s.thisObject()); - SE_PRECONDITION2(ok, false, "Pipeline_addRasterPass,5,SWIGTYPE_p_ccstd__string"); - arg5 = &temp5; - - result = (cc::render::RasterPassBuilder *)(arg1)->addRasterPass(arg2,arg3,(ccstd::string const &)*arg4,(ccstd::string const &)*arg5); - // %typemap(out) SWIGTYPE* - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Pipeline_addRasterPass, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - - - return true; -} - -static bool js_cc_render_Pipeline_addRasterPass__SWIG_1(se::State& s) +static bool js_cc_render_Pipeline_addRasterPass(se::State& s) { - // js_overloaded_function + // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); + size_t argc = args.size(); cc::render::Pipeline *arg1 = (cc::render::Pipeline *) NULL ; uint32_t arg2 ; uint32_t arg3 ; @@ -3733,6 +3025,10 @@ static bool js_cc_render_Pipeline_addRasterPass__SWIG_1(se::State& s) ccstd::string temp4 ; cc::render::RasterPassBuilder *result = 0 ; + if(argc != 3) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); + return false; + } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); @@ -3759,78 +3055,24 @@ static bool js_cc_render_Pipeline_addRasterPass__SWIG_1(se::State& s) return true; } - -static bool js_cc_render_Pipeline_addRasterPass(se::State& s) -{ - // js_function_dispatcher - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - - // js_function_dispatch_case - if (argc == 4) { - ok = js_cc_render_Pipeline_addRasterPass__SWIG_0(s); - if (ok) { - return true; - } - } // js_function_dispatch_case - if (argc == 3) { - ok = js_cc_render_Pipeline_addRasterPass__SWIG_1(s); - if (ok) { - return true; - } - } - SE_REPORT_ERROR("wrong number of arguments: %d", (int)argc); - return false; -} SE_BIND_FUNC(js_cc_render_Pipeline_addRasterPass) -static bool js_cc_render_Pipeline_addComputePass__SWIG_0(se::State& s) -{ - // js_overloaded_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - cc::render::Pipeline *arg1 = (cc::render::Pipeline *) NULL ; - ccstd::string *arg2 = 0 ; - ccstd::string *arg3 = 0 ; - ccstd::string temp2 ; - ccstd::string temp3 ; - cc::render::ComputePassBuilder *result = 0 ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Pipeline_addComputePass,2,SWIGTYPE_p_ccstd__string"); - arg2 = &temp2; - - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[1], &temp3, s.thisObject()); - SE_PRECONDITION2(ok, false, "Pipeline_addComputePass,3,SWIGTYPE_p_ccstd__string"); - arg3 = &temp3; - - result = (cc::render::ComputePassBuilder *)(arg1)->addComputePass((ccstd::string const &)*arg2,(ccstd::string const &)*arg3); - // %typemap(out) SWIGTYPE* - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Pipeline_addComputePass, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - - - return true; -} - -static bool js_cc_render_Pipeline_addComputePass__SWIG_1(se::State& s) +static bool js_cc_render_Pipeline_addComputePass(se::State& s) { - // js_overloaded_function + // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); + size_t argc = args.size(); cc::render::Pipeline *arg1 = (cc::render::Pipeline *) NULL ; ccstd::string *arg2 = 0 ; ccstd::string temp2 ; cc::render::ComputePassBuilder *result = 0 ; + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE& @@ -3847,30 +3089,6 @@ static bool js_cc_render_Pipeline_addComputePass__SWIG_1(se::State& s) return true; } - -static bool js_cc_render_Pipeline_addComputePass(se::State& s) -{ - // js_function_dispatcher - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - - // js_function_dispatch_case - if (argc == 2) { - ok = js_cc_render_Pipeline_addComputePass__SWIG_0(s); - if (ok) { - return true; - } - } // js_function_dispatch_case - if (argc == 1) { - ok = js_cc_render_Pipeline_addComputePass__SWIG_1(s); - if (ok) { - return true; - } - } - SE_REPORT_ERROR("wrong number of arguments: %d", (int)argc); - return false; -} SE_BIND_FUNC(js_cc_render_Pipeline_addComputePass) static bool js_cc_render_Pipeline_addMovePass(se::State& s) @@ -3881,22 +3099,15 @@ static bool js_cc_render_Pipeline_addMovePass(se::State& s) const auto& args = s.args(); size_t argc = args.size(); cc::render::Pipeline *arg1 = (cc::render::Pipeline *) NULL ; - ccstd::string *arg2 = 0 ; - ccstd::string temp2 ; cc::render::MovePassBuilder *result = 0 ; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Pipeline_addMovePass,2,SWIGTYPE_p_ccstd__string"); - arg2 = &temp2; - - result = (cc::render::MovePassBuilder *)(arg1)->addMovePass((ccstd::string const &)*arg2); + result = (cc::render::MovePassBuilder *)(arg1)->addMovePass(); // %typemap(out) SWIGTYPE* ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); SE_PRECONDITION2(ok, false, "Pipeline_addMovePass, Error processing arguments"); @@ -3915,22 +3126,15 @@ static bool js_cc_render_Pipeline_addCopyPass(se::State& s) const auto& args = s.args(); size_t argc = args.size(); cc::render::Pipeline *arg1 = (cc::render::Pipeline *) NULL ; - ccstd::string *arg2 = 0 ; - ccstd::string temp2 ; cc::render::CopyPassBuilder *result = 0 ; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Pipeline_addCopyPass,2,SWIGTYPE_p_ccstd__string"); - arg2 = &temp2; - - result = (cc::render::CopyPassBuilder *)(arg1)->addCopyPass((ccstd::string const &)*arg2); + result = (cc::render::CopyPassBuilder *)(arg1)->addCopyPass(); // %typemap(out) SWIGTYPE* ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); SE_PRECONDITION2(ok, false, "Pipeline_addCopyPass, Error processing arguments"); diff --git a/native/cocos/renderer/pipeline/custom/NativePipelineImpl.cpp b/native/cocos/renderer/pipeline/custom/NativePipelineImpl.cpp index ac047306b2b..08ef634f8bd 100644 --- a/native/cocos/renderer/pipeline/custom/NativePipelineImpl.cpp +++ b/native/cocos/renderer/pipeline/custom/NativePipelineImpl.cpp @@ -207,7 +207,8 @@ void NativePipeline::endFrame() { RasterPassBuilder *NativePipeline::addRasterPass( uint32_t width, uint32_t height, // NOLINT(bugprone-easily-swappable-parameters) - const ccstd::string &layoutName, const ccstd::string &name) { + const ccstd::string &layoutName) { + std::string_view name("Raster"); RasterPass pass(renderGraph.get_allocator()); pass.width = width; pass.height = height; @@ -216,7 +217,7 @@ RasterPassBuilder *NativePipeline::addRasterPass( auto passID = addVertex( RasterTag{}, - std::forward_as_tuple(name.c_str()), + std::forward_as_tuple(name), std::forward_as_tuple(layoutName.c_str()), std::forward_as_tuple(), std::forward_as_tuple(), @@ -230,16 +231,11 @@ RasterPassBuilder *NativePipeline::addRasterPass( } // NOLINTNEXTLINE -RasterPassBuilder *NativePipeline::addRasterPass(uint32_t width, uint32_t height, const ccstd::string &layoutName) { - return addRasterPass(width, height, layoutName, "Raster"); -} - -// NOLINTNEXTLINE -ComputePassBuilder *NativePipeline::addComputePass(const ccstd::string &layoutName, - const ccstd::string &name) { +ComputePassBuilder *NativePipeline::addComputePass(const ccstd::string &layoutName) { + std::string_view name("Compute"); auto passID = addVertex( ComputeTag{}, - std::forward_as_tuple(name.c_str()), + std::forward_as_tuple(name), std::forward_as_tuple(layoutName.c_str()), std::forward_as_tuple(), std::forward_as_tuple(), @@ -252,15 +248,11 @@ ComputePassBuilder *NativePipeline::addComputePass(const ccstd::string &layoutNa } // NOLINTNEXTLINE -ComputePassBuilder *NativePipeline::addComputePass(const ccstd::string &layoutName) { - return addComputePass(layoutName, "Compute"); -} - -// NOLINTNEXTLINE -MovePassBuilder *NativePipeline::addMovePass(const ccstd::string &name) { +MovePassBuilder *NativePipeline::addMovePass() { + std::string_view name("Move"); auto passID = addVertex( MoveTag{}, - std::forward_as_tuple(name.c_str()), + std::forward_as_tuple(name), std::forward_as_tuple(), std::forward_as_tuple(), std::forward_as_tuple(), @@ -271,10 +263,11 @@ MovePassBuilder *NativePipeline::addMovePass(const ccstd::string &name) { } // NOLINTNEXTLINE -CopyPassBuilder *NativePipeline::addCopyPass(const ccstd::string &name) { +CopyPassBuilder *NativePipeline::addCopyPass() { + std::string_view name("Copy"); auto passID = addVertex( CopyTag{}, - std::forward_as_tuple(name.c_str()), + std::forward_as_tuple(name), std::forward_as_tuple(), std::forward_as_tuple(), std::forward_as_tuple(), diff --git a/native/cocos/renderer/pipeline/custom/NativePipelineTypes.h b/native/cocos/renderer/pipeline/custom/NativePipelineTypes.h index e7a8b4686b0..6a70fae3f8e 100644 --- a/native/cocos/renderer/pipeline/custom/NativePipelineTypes.h +++ b/native/cocos/renderer/pipeline/custom/NativePipelineTypes.h @@ -75,12 +75,9 @@ class NativeRasterQueueBuilder final : public RasterQueueBuilder { layoutGraph(layoutGraphIn), queueID(queueIDIn) {} - void addSceneOfCamera(scene::Camera* camera, LightInfo light, SceneFlags sceneFlags, const ccstd::string& name) override; void addSceneOfCamera(scene::Camera* camera, LightInfo light, SceneFlags sceneFlags) override; void addScene(const ccstd::string& name, SceneFlags sceneFlags) override; - void addFullscreenQuad(cc::Material *material, uint32_t passID, SceneFlags sceneFlags, const ccstd::string& name) override; void addFullscreenQuad(cc::Material *material, uint32_t passID, SceneFlags sceneFlags) override; - void addCameraQuad(scene::Camera* camera, cc::Material *material, uint32_t passID, SceneFlags sceneFlags, const ccstd::string& name) override; void addCameraQuad(scene::Camera* camera, cc::Material *material, uint32_t passID, SceneFlags sceneFlags) override; void clearRenderTarget(const ccstd::string &name, const gfx::Color &color) override; void setViewport(const gfx::Viewport &viewport) override; @@ -117,12 +114,7 @@ class NativeRasterPassBuilder final : public RasterPassBuilder { void addRasterView(const ccstd::string& name, const RasterView& view) override; void addComputeView(const ccstd::string& name, const ComputeView& view) override; - RasterQueueBuilder *addQueue(QueueHint hint, const ccstd::string& name) override; RasterQueueBuilder *addQueue(QueueHint hint) override; - void addFullscreenQuad(cc::Material *material, uint32_t passID, SceneFlags sceneFlags, const ccstd::string& name) override; - void addFullscreenQuad(cc::Material *material, uint32_t passID, SceneFlags sceneFlags) override; - void addCameraQuad(scene::Camera* camera, cc::Material *material, uint32_t passID, SceneFlags sceneFlags, const ccstd::string& name) override; - void addCameraQuad(scene::Camera* camera, cc::Material *material, uint32_t passID, SceneFlags sceneFlags) override; void setViewport(const gfx::Viewport &viewport) override; void setMat4(const ccstd::string& name, const cc::Mat4& mat) override; @@ -155,7 +147,6 @@ class NativeComputeQueueBuilder final : public ComputeQueueBuilder { layoutGraph(layoutGraphIn), queueID(queueIDIn) {} - void addDispatch(const ccstd::string& shader, uint32_t threadGroupCountX, uint32_t threadGroupCountY, uint32_t threadGroupCountZ, const ccstd::string& name) override; void addDispatch(const ccstd::string& shader, uint32_t threadGroupCountX, uint32_t threadGroupCountY, uint32_t threadGroupCountZ) override; void setMat4(const ccstd::string& name, const cc::Mat4& mat) override; @@ -190,12 +181,8 @@ class NativeComputePassBuilder final : public ComputePassBuilder { void addComputeView(const ccstd::string& name, const ComputeView& view) override; - ComputeQueueBuilder *addQueue(const ccstd::string& name) override; ComputeQueueBuilder *addQueue() override; - void addDispatch(const ccstd::string& shader, uint32_t threadGroupCountX, uint32_t threadGroupCountY, uint32_t threadGroupCountZ, const ccstd::string& name) override; - void addDispatch(const ccstd::string& shader, uint32_t threadGroupCountX, uint32_t threadGroupCountY, uint32_t threadGroupCountZ) override; - void setMat4(const ccstd::string& name, const cc::Mat4& mat) override; void setQuaternion(const ccstd::string& name, const cc::Quaternion& quat) override; void setColor(const ccstd::string& name, const gfx::Color& color) override; @@ -488,12 +475,10 @@ class NativePipeline final : public Pipeline { void beginFrame() override; void endFrame() override; - RasterPassBuilder *addRasterPass(uint32_t width, uint32_t height, const ccstd::string& layoutName, const ccstd::string& name) override; RasterPassBuilder *addRasterPass(uint32_t width, uint32_t height, const ccstd::string& layoutName) override; - ComputePassBuilder *addComputePass(const ccstd::string& layoutName, const ccstd::string& name) override; ComputePassBuilder *addComputePass(const ccstd::string& layoutName) override; - MovePassBuilder *addMovePass(const ccstd::string& name) override; - CopyPassBuilder *addCopyPass(const ccstd::string& name) override; + MovePassBuilder *addMovePass() override; + CopyPassBuilder *addCopyPass() override; void presentAll() override; SceneTransversal *createSceneTransversal(const scene::Camera *camera, const scene::RenderScene *scene) override; diff --git a/native/cocos/renderer/pipeline/custom/NativeRenderGraph.cpp b/native/cocos/renderer/pipeline/custom/NativeRenderGraph.cpp index 362ab1bdbe0..2d7489c18f7 100644 --- a/native/cocos/renderer/pipeline/custom/NativeRenderGraph.cpp +++ b/native/cocos/renderer/pipeline/custom/NativeRenderGraph.cpp @@ -49,7 +49,8 @@ void NativeRasterQueueBuilder::setName(const ccstd::string &name) { get(RenderGraph::Name, *renderGraph, queueID) = std::string_view(name); } -void NativeRasterQueueBuilder::addSceneOfCamera(scene::Camera *camera, LightInfo light, SceneFlags sceneFlags, const ccstd::string &name) { +void NativeRasterQueueBuilder::addSceneOfCamera(scene::Camera *camera, LightInfo light, SceneFlags sceneFlags) { + std::string_view name = "Camera"; SceneData scene(renderGraph->get_allocator()); scene.name = name; scene.flags = sceneFlags; @@ -57,7 +58,7 @@ void NativeRasterQueueBuilder::addSceneOfCamera(scene::Camera *camera, LightInfo scene.light = std::move(light); auto sceneID = addVertex( SceneTag{}, - std::forward_as_tuple(name.c_str()), + std::forward_as_tuple(name), std::forward_as_tuple(), std::forward_as_tuple(), std::forward_as_tuple(), @@ -66,10 +67,6 @@ void NativeRasterQueueBuilder::addSceneOfCamera(scene::Camera *camera, LightInfo CC_ENSURES(sceneID != RenderGraph::null_vertex()); } -void NativeRasterQueueBuilder::addSceneOfCamera(scene::Camera *camera, LightInfo light, SceneFlags sceneFlags) { - addSceneOfCamera(camera, std::move(light), sceneFlags, "Camera"); -} - void NativeRasterQueueBuilder::addScene(const ccstd::string &name, SceneFlags sceneFlags) { SceneData scene(renderGraph->get_allocator()); scene.name = name; @@ -87,10 +84,11 @@ void NativeRasterQueueBuilder::addScene(const ccstd::string &name, SceneFlags sc } void NativeRasterQueueBuilder::addFullscreenQuad( - Material *material, uint32_t passID, SceneFlags sceneFlags, const ccstd::string &name) { + Material *material, uint32_t passID, SceneFlags sceneFlags) { + std::string_view name = "FullscreenQuad"; auto drawID = addVertex( BlitTag{}, - std::forward_as_tuple(name.c_str()), + std::forward_as_tuple(name), std::forward_as_tuple(), std::forward_as_tuple(), std::forward_as_tuple(), @@ -99,13 +97,10 @@ void NativeRasterQueueBuilder::addFullscreenQuad( CC_ENSURES(drawID != RenderGraph::null_vertex()); } -void NativeRasterQueueBuilder::addFullscreenQuad(Material *material, uint32_t passID, SceneFlags sceneFlags) { - addFullscreenQuad(material, passID, sceneFlags, "FullscreenQuad"); -} - void NativeRasterQueueBuilder::addCameraQuad( scene::Camera *camera, cc::Material *material, uint32_t passID, - SceneFlags sceneFlags, const ccstd::string &name) { + SceneFlags sceneFlags) { + std::string_view name = "CameraQuad"; auto drawID = addVertex( BlitTag{}, std::forward_as_tuple(name), @@ -117,11 +112,6 @@ void NativeRasterQueueBuilder::addCameraQuad( CC_ENSURES(drawID != RenderGraph::null_vertex()); } -void NativeRasterQueueBuilder::addCameraQuad( - scene::Camera *camera, cc::Material *material, uint32_t passID, SceneFlags sceneFlags) { - addCameraQuad(camera, material, passID, sceneFlags, "CameraQuad"); -} - void NativeRasterQueueBuilder::clearRenderTarget(const ccstd::string &name, const gfx::Color &color) { ccstd::pmr::vector clears(renderGraph->get_allocator()); clears.emplace_back(name.c_str(), gfx::ClearFlagBit::COLOR, color); @@ -289,75 +279,18 @@ void NativeRasterQueueBuilder::setSampler(const ccstd::string &name, gfx::Sample addSampler(*layoutGraph, name, sampler, data); } -RasterQueueBuilder *NativeRasterPassBuilder::addQueue( - QueueHint hint, const ccstd::string &name) { // NOLINT(bugprone-easily-swappable-parameters) - auto queueID = addVertex( - QueueTag{}, - std::forward_as_tuple(name.c_str()), - std::forward_as_tuple(), - std::forward_as_tuple(), - std::forward_as_tuple(), - std::forward_as_tuple(hint), - *renderGraph, passID); - - return new NativeRasterQueueBuilder(renderGraph, queueID, layoutGraph); -} - RasterQueueBuilder *NativeRasterPassBuilder::addQueue(QueueHint hint) { - return addQueue(hint, "Queue"); -} - -void NativeRasterPassBuilder::addFullscreenQuad( - Material *material, uint32_t passID, SceneFlags sceneFlags, const ccstd::string &name) { // NOLINT(bugprone-easily-swappable-parameters) + std::string_view name = "Queue"; auto queueID = addVertex( QueueTag{}, - std::forward_as_tuple("Queue"), - std::forward_as_tuple(), - std::forward_as_tuple(), - std::forward_as_tuple(), - std::forward_as_tuple(QueueHint::RENDER_TRANSPARENT), - *renderGraph, passID); - - addVertex( - BlitTag{}, std::forward_as_tuple(name), std::forward_as_tuple(), std::forward_as_tuple(), std::forward_as_tuple(), - std::forward_as_tuple(material, passID, sceneFlags, nullptr), - *renderGraph, queueID); -} - -void NativeRasterPassBuilder::addFullscreenQuad( - Material *material, uint32_t passID, SceneFlags sceneFlags) { - return addFullscreenQuad(material, passID, sceneFlags, "FullscreenQuad"); -} - -void NativeRasterPassBuilder::addCameraQuad( - scene::Camera *camera, cc::Material *material, uint32_t passID, - SceneFlags sceneFlags, const ccstd::string &name) { - auto queueID = addVertex( - QueueTag{}, - std::forward_as_tuple("Queue"), - std::forward_as_tuple(), - std::forward_as_tuple(), - std::forward_as_tuple(), - std::forward_as_tuple(QueueHint::RENDER_TRANSPARENT), + std::forward_as_tuple(hint), *renderGraph, passID); - addVertex( - BlitTag{}, - std::forward_as_tuple(name), - std::forward_as_tuple(), - std::forward_as_tuple(), - std::forward_as_tuple(), - std::forward_as_tuple(material, passID, sceneFlags, camera), - *renderGraph, queueID); -} - -void NativeRasterPassBuilder::addCameraQuad( - scene::Camera *camera, cc::Material *material, uint32_t passID, SceneFlags sceneFlags) { - return addCameraQuad(camera, material, passID, sceneFlags, "CameraQuad"); + return new NativeRasterQueueBuilder(renderGraph, queueID, layoutGraph); } void NativeRasterPassBuilder::setViewport(const gfx::Viewport &viewport) { @@ -429,10 +362,11 @@ void NativeComputeQueueBuilder::setName(const ccstd::string &name) { get(RenderGraph::Name, *renderGraph, queueID) = std::string_view(name); } -void NativeComputeQueueBuilder::addDispatch(const ccstd::string &shader, uint32_t threadGroupCountX, uint32_t threadGroupCountY, uint32_t threadGroupCountZ, const ccstd::string &name) { +void NativeComputeQueueBuilder::addDispatch(const ccstd::string &shader, uint32_t threadGroupCountX, uint32_t threadGroupCountY, uint32_t threadGroupCountZ) { + std::string_view name("Dispatch"); addVertex( DispatchTag{}, - std::forward_as_tuple(name.c_str()), + std::forward_as_tuple(name), std::forward_as_tuple(), std::forward_as_tuple(), std::forward_as_tuple(), @@ -444,10 +378,6 @@ void NativeComputeQueueBuilder::addDispatch(const ccstd::string &shader, uint32_ *renderGraph); } -void NativeComputeQueueBuilder::addDispatch(const ccstd::string &shader, uint32_t threadGroupCountX, uint32_t threadGroupCountY, uint32_t threadGroupCountZ) { - addDispatch(shader, threadGroupCountX, threadGroupCountY, threadGroupCountZ, "Dispatch"); -} - void NativeComputeQueueBuilder::setMat4(const ccstd::string &name, const Mat4 &mat) { auto &data = get(RenderGraph::Data, *renderGraph, queueID); addMat4(*layoutGraph, name, mat, data); @@ -525,10 +455,11 @@ void NativeComputePassBuilder::addComputeView(const ccstd::string &name, const C iter->second.emplace_back(view); } -ComputeQueueBuilder *NativeComputePassBuilder::addQueue(const ccstd::string &name) { +ComputeQueueBuilder *NativeComputePassBuilder::addQueue() { + std::string_view name("Queue"); auto queueID = addVertex( QueueTag{}, - std::forward_as_tuple(name.c_str()), + std::forward_as_tuple(name), std::forward_as_tuple(), std::forward_as_tuple(), std::forward_as_tuple(), @@ -538,39 +469,6 @@ ComputeQueueBuilder *NativeComputePassBuilder::addQueue(const ccstd::string &nam return new NativeComputeQueueBuilder(renderGraph, queueID, layoutGraph); } -ComputeQueueBuilder *NativeComputePassBuilder::addQueue() { - return addQueue("Queue"); -} - -void NativeComputePassBuilder::addDispatch( - const ccstd::string &shader, - uint32_t threadGroupCountX, uint32_t threadGroupCountY, uint32_t threadGroupCountZ, - const ccstd::string &name) { - auto queueID = addVertex( - QueueTag{}, - std::forward_as_tuple("Queue"), - std::forward_as_tuple(), - std::forward_as_tuple(), - std::forward_as_tuple(), - std::forward_as_tuple(), - *renderGraph, passID); - - addVertex( - DispatchTag{}, - std::forward_as_tuple(name.c_str()), - std::forward_as_tuple(), - std::forward_as_tuple(), - std::forward_as_tuple(), - std::forward_as_tuple(shader.c_str(), threadGroupCountX, threadGroupCountY, threadGroupCountZ), - *renderGraph, queueID); -} - -void NativeComputePassBuilder::addDispatch( - const ccstd::string &shader, - uint32_t threadGroupCountX, uint32_t threadGroupCountY, uint32_t threadGroupCountZ) { - addDispatch(shader, threadGroupCountX, threadGroupCountY, threadGroupCountZ, "Dispatch"); -} - void NativeComputePassBuilder::setMat4(const ccstd::string &name, const Mat4 &mat) { auto &data = get(RenderGraph::Data, *renderGraph, passID); addMat4(*layoutGraph, name, mat, data); diff --git a/native/cocos/renderer/pipeline/custom/RenderInterfaceTypes.h b/native/cocos/renderer/pipeline/custom/RenderInterfaceTypes.h index 3a536004adf..1d1cec9329f 100644 --- a/native/cocos/renderer/pipeline/custom/RenderInterfaceTypes.h +++ b/native/cocos/renderer/pipeline/custom/RenderInterfaceTypes.h @@ -149,12 +149,9 @@ class RasterQueueBuilder : public Setter { public: RasterQueueBuilder() noexcept = default; - virtual void addSceneOfCamera(scene::Camera* camera, LightInfo light, SceneFlags sceneFlags, const ccstd::string& name) = 0; virtual void addSceneOfCamera(scene::Camera* camera, LightInfo light, SceneFlags sceneFlags) = 0; virtual void addScene(const ccstd::string& name, SceneFlags sceneFlags) = 0; - virtual void addFullscreenQuad(cc::Material *material, uint32_t passID, SceneFlags sceneFlags, const ccstd::string& name) = 0; virtual void addFullscreenQuad(cc::Material *material, uint32_t passID, SceneFlags sceneFlags) = 0; - virtual void addCameraQuad(scene::Camera* camera, cc::Material *material, uint32_t passID, SceneFlags sceneFlags, const ccstd::string& name) = 0; virtual void addCameraQuad(scene::Camera* camera, cc::Material *material, uint32_t passID, SceneFlags sceneFlags) = 0; virtual void clearRenderTarget(const ccstd::string &name, const gfx::Color &color) = 0; virtual void setViewport(const gfx::Viewport &viewport) = 0; @@ -166,12 +163,7 @@ class RasterPassBuilder : public Setter { virtual void addRasterView(const ccstd::string& name, const RasterView& view) = 0; virtual void addComputeView(const ccstd::string& name, const ComputeView& view) = 0; - virtual RasterQueueBuilder *addQueue(QueueHint hint, const ccstd::string& name) = 0; virtual RasterQueueBuilder *addQueue(QueueHint hint) = 0; - virtual void addFullscreenQuad(cc::Material *material, uint32_t passID, SceneFlags sceneFlags, const ccstd::string& name) = 0; - virtual void addFullscreenQuad(cc::Material *material, uint32_t passID, SceneFlags sceneFlags) = 0; - virtual void addCameraQuad(scene::Camera* camera, cc::Material *material, uint32_t passID, SceneFlags sceneFlags, const ccstd::string& name) = 0; - virtual void addCameraQuad(scene::Camera* camera, cc::Material *material, uint32_t passID, SceneFlags sceneFlags) = 0; virtual void setViewport(const gfx::Viewport &viewport) = 0; }; @@ -179,7 +171,6 @@ class ComputeQueueBuilder : public Setter { public: ComputeQueueBuilder() noexcept = default; - virtual void addDispatch(const ccstd::string& shader, uint32_t threadGroupCountX, uint32_t threadGroupCountY, uint32_t threadGroupCountZ, const ccstd::string& name) = 0; virtual void addDispatch(const ccstd::string& shader, uint32_t threadGroupCountX, uint32_t threadGroupCountY, uint32_t threadGroupCountZ) = 0; }; @@ -189,11 +180,7 @@ class ComputePassBuilder : public Setter { virtual void addComputeView(const ccstd::string& name, const ComputeView& view) = 0; - virtual ComputeQueueBuilder *addQueue(const ccstd::string& name) = 0; virtual ComputeQueueBuilder *addQueue() = 0; - - virtual void addDispatch(const ccstd::string& shader, uint32_t threadGroupCountX, uint32_t threadGroupCountY, uint32_t threadGroupCountZ, const ccstd::string& name) = 0; - virtual void addDispatch(const ccstd::string& shader, uint32_t threadGroupCountX, uint32_t threadGroupCountY, uint32_t threadGroupCountZ) = 0; }; class MovePassBuilder : public RenderNode { @@ -294,12 +281,10 @@ class Pipeline : public PipelineRuntime { virtual void beginFrame() = 0; virtual void endFrame() = 0; - virtual RasterPassBuilder *addRasterPass(uint32_t width, uint32_t height, const ccstd::string& layoutName, const ccstd::string& name) = 0; virtual RasterPassBuilder *addRasterPass(uint32_t width, uint32_t height, const ccstd::string& layoutName) = 0; - virtual ComputePassBuilder *addComputePass(const ccstd::string& layoutName, const ccstd::string& name) = 0; virtual ComputePassBuilder *addComputePass(const ccstd::string& layoutName) = 0; - virtual MovePassBuilder *addMovePass(const ccstd::string& name) = 0; - virtual CopyPassBuilder *addCopyPass(const ccstd::string& name) = 0; + virtual MovePassBuilder *addMovePass() = 0; + virtual CopyPassBuilder *addCopyPass() = 0; virtual void presentAll() = 0; virtual SceneTransversal *createSceneTransversal(const scene::Camera *camera, const scene::RenderScene *scene) = 0; From 28555c355a1d8683af40e004bc2e03d3d0d5c6f3 Mon Sep 17 00:00:00 2001 From: bofeng-song Date: Thu, 27 Oct 2022 10:39:56 +0800 Subject: [PATCH 089/829] Lod (#13072) --- cocos/misc/index.ts | 1 + cocos/misc/lodgroup-component.ts | 569 ++++++++++++++++++ cocos/render-scene/core/render-scene.ts | 44 ++ cocos/render-scene/scene/index.ts | 1 + cocos/render-scene/scene/lod-group.ts | 190 ++++++ cocos/rendering/custom/web-scene.ts | 10 + cocos/rendering/lod-group-editor-utility.ts | 99 +++ cocos/rendering/lod-models-utils.ts | 98 +++ cocos/rendering/planar-shadow-queue.ts | 7 + cocos/rendering/scene-culling.ts | 18 +- editor/exports/lod-group-utils.ts | 2 + editor/inspector/components.js | 1 + editor/inspector/components/lodGroup/index.js | 268 +++++++++ .../inspector/components/lodGroup/lod-item.js | 128 ++++ .../components/lodGroup/multi-lod-group.js | 134 +++++ 15 files changed, 1565 insertions(+), 5 deletions(-) create mode 100644 cocos/misc/lodgroup-component.ts create mode 100644 cocos/render-scene/scene/lod-group.ts create mode 100644 cocos/rendering/lod-group-editor-utility.ts create mode 100644 cocos/rendering/lod-models-utils.ts create mode 100644 editor/exports/lod-group-utils.ts create mode 100644 editor/inspector/components/lodGroup/index.js create mode 100644 editor/inspector/components/lodGroup/lod-item.js create mode 100644 editor/inspector/components/lodGroup/multi-lod-group.js diff --git a/cocos/misc/index.ts b/cocos/misc/index.ts index de07f74a901..ab0e35c6457 100644 --- a/cocos/misc/index.ts +++ b/cocos/misc/index.ts @@ -32,3 +32,4 @@ export { MissingScript } from './missing-script'; export { PrefabLink } from './prefab-link'; /** deprecated */ export * from './deprecated'; +export { LOD, LODGroup } from './lodgroup-component'; diff --git a/cocos/misc/lodgroup-component.ts b/cocos/misc/lodgroup-component.ts new file mode 100644 index 00000000000..196e589edd7 --- /dev/null +++ b/cocos/misc/lodgroup-component.ts @@ -0,0 +1,569 @@ +/* + Copyright (c) 2022 Xiamen Yaji Software Co., Ltd. + + https://www.cocos.com/ + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated engine source code (the "Software"), a limited, + worldwide, royalty-free, non-assignable, revocable and non-exclusive license + to use Cocos Creator solely to develop games on your target platforms. You shall + not use Cocos Creator software for developing other software or tools that's + used for developing games. You are not granted to publish, distribute, + sublicense, and/or sell copies of Cocos Creator. + + The software or tools in this License Agreement are licensed, not sold. + Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + */ +import { EDITOR, JSB } from 'internal:constants'; +import { ccclass, editable, executeInEditMode, menu, serializable, type } from 'cc.decorator'; +import { Vec3, Mat4, geometry } from '../core'; +import { Node } from '../scene-graph/node'; +import { Component } from '../scene-graph/component'; +import { Mesh, MeshRenderer } from '../3d'; +import { scene } from '../render-scene'; +import { NodeEventType } from '../scene-graph/node-event'; +import { array } from '../core/utils/js'; + +// Ratio of objects occupying the screen +const DEFAULT_SCREEN_OCCUPATION: number[] = [0.5, 0.25, 0.125]; +@ccclass('cc.LOD') +export class LOD { + // Minimum percentage of screen usage for the current lod in effect, range in [0, 1] + @serializable + protected _screenUsagePercentage = 1.0; + // Mesh renderers components contained in this LOD level. + @type([MeshRenderer]) + @serializable + protected _renderers: MeshRenderer[] = []; + // renderer internal LOD data block. + /** + * @engineInternal + */ + private _LODData: scene.LODData = new scene.LODData(); + + constructor () { + this._LODData.screenUsagePercentage = this._screenUsagePercentage; + } + + /** + * @en Minimum percentage of screen usage for the current lod in effect, range in [0, 1] + * @zh 本层级生效时,占用屏幕的最小百分比, 取值范围[0, 1] + */ + @type(Number) + get screenUsagePercentage () : number { return this._screenUsagePercentage; } + set screenUsagePercentage (val: number) { + this._screenUsagePercentage = val; + this._LODData.screenUsagePercentage = val; + } + + /** + * @en Get the list of [[MeshRenderer]] used by the current lod. + * @zh 获取当前lod使用的 [[MeshRenderer]] 列表 + */ + @type([MeshRenderer]) + get renderers (): readonly MeshRenderer[] { + return this._renderers; + } + + /** + * @en reset _renderers to meshList or [], LODData's model will be reset too. + * @zh 重置 _renderers 为 meshList或空数组, LODData上的model也会被重置 + */ + set renderers (meshList: readonly MeshRenderer[]) { + this._renderers.length = 0; + this._LODData.clearModels(); + for (let i = 0; i < meshList.length; i++) { + this._renderers[i] = meshList[i]; + const model = meshList[i]?.model; + if (model) { + this._LODData.addModel(model); + } + } + } + + /** + * @engineInternal + * @en Get the total number of all mesh's triangle. + * @zh 获取所有模型的三角形总数 + */ + @editable + @type([Number]) + get triangleCount () : number[] { + const tris: number[] = []; + this._renderers.forEach((meshRenderer: MeshRenderer | null) => { + let count = 0; + if (meshRenderer && meshRenderer.mesh) { + const primitives = meshRenderer.mesh.struct.primitives; + primitives?.forEach((subMesh: Mesh.ISubMesh) => { + if (subMesh && subMesh.indexView) { + count += subMesh.indexView.count; + } + }); + } + tris.push(count / 3); + }); + return tris; + } + + /** + * @en Get the number of LOD. + * @zh 获取LOD的数量 + */ + get rendererCount () : number { return this._renderers.length; } + + /** + * @engineInternal + * @en Get internal LOD object. + */ + get lodData () { return this._LODData; } + + /** + * @en Insert a [[MeshRenderer]] before specific index position. + * @zh 在指定的数组索引处插入一个[[MeshRenderer]] + * @param index @en The rendering array is indexed from 0. If - 1 is passed, it will be added to the end of the list. + * @zh renderers数组从0开始索引,若传递-1将会被添加到列表末尾。 + * @param renderer @en The mesh-renderer object. @zh [[MeshRenderer]] 对象 + * @returns @en The inserted [[MeshRenderer]] @zh 返回被插入的 [[MeshRenderer]] 对象 + */ + insertRenderer (index: number, renderer: MeshRenderer): MeshRenderer { + // make sure insert at the tail of the list. + if (index < 0 || index > this._renderers.length) { + index = this._renderers.length; + } + this._renderers.splice(index, 0, renderer); + if (renderer.model) { + this._LODData.addModel(renderer.model); + } + return renderer; + } + + /** + * @en Delete the [[MeshRenderer]] at specific index position. + * @zh 删除指定索引处的[[MeshRenderer]] + * @param index @en 0 indexed position in renderer array, when -1 is specified, the last element will be deleted. + * @zh _renderers从0开始索引,传递-1则最后一个元素会被删除。 + * @returns @en The deleted [[MeshRenderer]], or null if the specified index does not exist. @zh 如果指定索引处的对象存在,返回被删除对象否则返回null。 + */ + public deleteRenderer (index: number): MeshRenderer | null { + const renders = this._renderers.splice(index, 1); + const model = renders.length > 0 ? renders[0]?.model : null; + if (model) { + this._LODData.eraseModel(model); + } + + return renders[0]; + } + + /** + * @en Get the [[MeshRenderer]] at specific index position. + * @zh 获取指定索引处的[[MeshRenderer]] + * @param index @en Value range from 0 to _renderers's length. @zh 取值范围是[0, _renderers长度] + * @return @en Returns the [[MeshRenderer]] at the specified index, or null if the specified index does not exist. @zh 返回指定索引处的对象,若不存在则返回null。 + */ + public getRenderer (index: number): MeshRenderer | null { + return this._renderers[index] || null; + } + + /** + * @en Update the [[MeshRenderer]] at specific index position. + * @zh 更新指定索引处的 [[MeshRenderer]] + * @param index @en Value range from 0 to _renderers's length @zh 取值范围是 [0, _renderers数组长度] + */ + public setRenderer (index: number, renderer: MeshRenderer) { + if (index < 0 || index >= this.rendererCount) { + console.error('setRenderer to LOD error, index out of range'); + return; + } + this.deleteRenderer(index); + this.insertRenderer(index, renderer); + } +} + +@ccclass('cc.LODGroup') +@menu('Rendering/LOD Group') +@executeInEditMode +export class LODGroup extends Component { + /** + * @en Object reference point in local space, e.g. center of the bound volume for all LODs + */ + @serializable + protected _localBoundaryCenter: Vec3 = new Vec3(0, 0, 0); + + /** + * @en Object Size in local space, may be auto-calculated value from object bounding box or value from user input. + */ + @serializable + protected _objectSize = 1; + + /** + *@en The array of LODs + */ + @serializable + protected _LODs: LOD[] = []; + + /** + * @engineInternal + */ + protected _lodGroup = new scene.LODGroup(); + + private _eventRegistered = false; + + constructor () { + super(); + this._lodGroup.objectSize = this._objectSize; + } + + /** + * @engineInternal + */ + set localBoundaryCenter (val: Vec3) { + this._localBoundaryCenter.set(val); + this._lodGroup.localBoundaryCenter = val; + } + + /** + * @en Obtain the center point of AABB composed of all models + * @zh 获取所有模型组成的AABB的中心点 + */ + get localBoundaryCenter () : Readonly { return this._localBoundaryCenter.clone(); } + + /** + * @en Obtain LOD level numbers. + * @zh 获取LOD层级数 + */ + get lodCount () : number { return this._LODs.length; } + + /** + * @en Set current AABB's size. + * @zh 设置当前包围盒的大小 + */ + @type(Number) + set objectSize (val: number) { + this._objectSize = val; + this._lodGroup.objectSize = val; + } + + /** + * @en Get current AABB's size. + * @zh 获取当前包围盒的大小 + */ + get objectSize () { return this._objectSize; } + + /** + * @en Get LOD array config. + * @zh 获取当前包围盒的大小 + */ + @type([LOD]) + get LODs () : readonly LOD[] { + return this._LODs; + } + + /** + * @en Reset current LODs to new value. + * @ 重置 LODs 为当前新设置的值。 + */ + set LODs (valArray: readonly LOD[]) { + this._LODs.length = 0; + this.lodGroup.clearLODs(); + valArray.forEach((lod: LOD, index: number) => { + this.lodGroup.insertLOD(index, lod.lodData); + this._LODs[index] = lod; + }); + } + + /** + * @engineInternal + */ + get lodGroup () { return this._lodGroup; } + + /** + * @en Insert the [[LOD]] at specific index position, [[LOD]] will be inserted to the last position if index less than 0 or greater than lodCount. + * @zh 在指定索引处插入 [[LOD]], 若索引为负或超过lodCount,则在末尾添加 + * @param index @en location where lod is added. @zh lod被插入的位置 + * @param screenUsagePercentage @en The minimum screen usage percentage that the currently set lod starts to use, range in[0, 1]. + * @zh lod生效时的最低屏幕显示百分比要求,取值范围[0, 1] + * @param lod @en If this parameter is not set, it will be created by default. @zh 如果参数没传,则内部创建 + * @returns @en The new lod added. @zh 返回被添加的lod + */ + public insertLOD (index: number, screenUsagePercentage?: number, lod?: LOD): LOD { + if (index < 0 || index > this.lodCount) { + index = this.lodCount; + } + + if (!lod) { + lod = new LOD(); + } + if (!screenUsagePercentage) { + const preLod = this.getLOD(index - 1); + const nextLod = this.getLOD(index); + if (preLod && nextLod) { + screenUsagePercentage = (preLod.screenUsagePercentage + nextLod.screenUsagePercentage) / 2; + } else if (preLod && !nextLod) { // insert at last position + screenUsagePercentage = preLod.screenUsagePercentage / 2; + } else if (nextLod && !preLod) { + //insert at first position + screenUsagePercentage = nextLod.screenUsagePercentage; + const curNextLOD = this.getLOD(index + 1); + nextLod.screenUsagePercentage = (screenUsagePercentage + (curNextLOD ? curNextLOD.screenUsagePercentage : 0)) / 2; + } else { //lod count is zero + screenUsagePercentage = DEFAULT_SCREEN_OCCUPATION[0]; + } + } + lod.screenUsagePercentage = screenUsagePercentage; + this._LODs.splice(index, 0, lod); + this._lodGroup.insertLOD(index, lod.lodData); + this._emitChangeNode(this.node); + return lod; + } + + /** + * @en Erase the [[LOD]] at specific index position. + * @zh 删除指定索引处的 [[LOD]] + * @param index @en Index of the erased lod, range in [0, lodCount]. @zh 被删除对象索引, 取值范围[0, lodCount] + * @returns @en Erased lod. @zh 被删除的对象 + */ + public eraseLOD (index: number) : LOD | null { + if (index < 0 || index >= this.lodCount) { + console.warn('eraseLOD error, index out of range'); + return null; + } + const lod = this._LODs[index]; + if (!lod) { + console.warn('eraseLOD error, LOD not exist at specified index.'); + return null; + } + this._LODs.splice(index, 1); + this._lodGroup.eraseLOD(index); + this._emitChangeNode(this.node); + return lod; + } + + /** + * @en Get [[LOD]] at specific index position. + * @zh 获取指定索引处的 [[LOD]] + * @param index @en Range in [0, lodCount]. @zh 取值范围[0, lodCount] + * @returns @en Lod at specified index, or null. @zh 返回指定索引的lod或null + */ + public getLOD (index: number): LOD | null { + if (index < 0 || index >= this.lodCount) { + console.warn('getLOD error, index out of range'); + return null; + } + return this._LODs[index]; + } + + /** + * @en Update the [[LOD]] at specific index position. + * @zh 更新指定索引处的 [[LOD]] + * @param index, update lod at specified index. + * @param lod, the updated lod. + */ + public setLOD (index: number, lod: LOD) { + if (index < 0 || index >= this.lodCount) { + console.warn('setLOD error, index out of range'); + return; + } + this._LODs[index] = lod; + this.lodGroup.updateLOD(index, lod.lodData); + } + + /** + * @en Recalculate the bounding box, and the interface will recalculate the localBoundaryCenter and objectSize + * @zh 重新计算包围盒,该接口会更新 localBoundaryCenter 和 objectSize + */ + public recalculateBounds () { + function getTransformedBoundary (c: /* center */Vec3, e: /*extents*/Vec3, transform: Mat4): [Vec3, Vec3] { + let minPos: Vec3; + let maxPos: Vec3; + + const pts = new Array( + new Vec3(c.x - e.x, c.y - e.y, c.z - e.z), + new Vec3(c.x - e.x, c.y + e.y, c.z - e.z), + new Vec3(c.x + e.x, c.y + e.y, c.z - e.z), + new Vec3(c.x + e.x, c.y - e.y, c.z - e.z), + new Vec3(c.x - e.x, c.y - e.y, c.z + e.z), + new Vec3(c.x - e.x, c.y + e.y, c.z + e.z), + new Vec3(c.x + e.x, c.y + e.y, c.z + e.z), + new Vec3(c.x + e.x, c.y - e.y, c.z + e.z), + ); + + minPos = pts[0].transformMat4(transform); + maxPos = minPos.clone(); + for (let i = 1; i < 8; ++i) { + const pt = pts[i].transformMat4(transform); + minPos = Vec3.min(minPos, minPos, pt); + maxPos = Vec3.max(maxPos, maxPos, pt); + } + return [minPos, maxPos]; + } + + const minPos = new Vec3(); + const maxPos = new Vec3(); + let boundsMin: Vec3 | null = null; + let boundsMax: Vec3 = new Vec3(); + + for (let i = 0; i < this.lodCount; ++i) { + const lod = this.getLOD(i); + if (lod) { + for (let j = 0; j < lod.rendererCount; ++j) { + const renderer = lod.getRenderer(j); + if (!renderer) { + continue; + } + let worldBounds = renderer.model?.worldBounds; + if (worldBounds) { + if (JSB) { + const center = worldBounds.center; + const halfExtents = worldBounds.halfExtents; + worldBounds = geometry.AABB.create(center.x, center.y, center.z, halfExtents.x, halfExtents.y, halfExtents.z); + } + worldBounds.getBoundary(minPos, maxPos); + + if (boundsMin) { + Vec3.min(boundsMin, boundsMin, minPos); + Vec3.max(boundsMax, boundsMax, maxPos); + } else { + boundsMin = minPos.clone(); + boundsMax = maxPos.clone(); + } + } + } + } + } + + if (boundsMin) { + // Transform world bounds to local space bounds + const boundsMin2 = boundsMin; + const c = new Vec3((boundsMax.x + boundsMin2.x) * 0.5, (boundsMax.y + boundsMin2.y) * 0.5, (boundsMax.z + boundsMin2.z) * 0.5); + const e = new Vec3((boundsMax.x - boundsMin2.x) * 0.5, (boundsMax.y - boundsMin2.y) * 0.5, (boundsMax.z - boundsMin2.z) * 0.5); + + const [minPos, maxPos] = getTransformedBoundary(c, e, this.node.worldMatrix.clone().invert()); + + // Set bounding volume center and extents in local space + c.set((maxPos.x + minPos.x) * 0.5, (maxPos.y + minPos.y) * 0.5, (maxPos.z + minPos.z) * 0.5); + e.set((maxPos.x - minPos.x) * 0.5, (maxPos.y - minPos.y) * 0.5, (maxPos.z - minPos.z) * 0.5); + + // Save the result + this.localBoundaryCenter = c; + this.objectSize = Math.max(e.x, e.y, e.z) * 2.0; + } + this._emitChangeNode(this.node); + } + + /** + * @en reset current objectSize to 1, and recalculate screenUsagePercentage. + * @zh 重置 objectSize 的大小为1,该接口会重新计算 screenUsagePercentage + */ + public resetObjectSize () { + if (this.objectSize === 1.0) return; + + // 1 will be new object size + const scale = 1.0 / this.objectSize; + // reset object size to 1 + this.objectSize = 1.0; + + for (let i = 0; i < this.lodCount; ++i) { + const lod = this.getLOD(i); + if (lod) { + lod.screenUsagePercentage *= scale; + } + } + this._emitChangeNode(this.node); + } + + /** + * @zh 强制使用某一级的LOD + * @en Force LOD level to use. + * lodLevel @en The LOD level to use. Passing lodLevel < 0 will return to standard LOD processing. @zh 要使用的LOD层级,为负数时使用标准的处理流程 + */ + public forceLOD (lodLevel: number) { + this.lodGroup.lockLODLevels(lodLevel < 0 ? [] : [lodLevel]); + } + + onLoad () { + this._lodGroup.node = this.node; + if (!this._eventRegistered) { + this.node.on(NodeEventType.COMPONENT_REMOVED, this._onRemove, this); + this._eventRegistered = true; + } + // generate default lod for lodGroup + if (this.lodCount < 1) { + const size = DEFAULT_SCREEN_OCCUPATION.length; + for (let i = 0; i < size; i++) { + this.insertLOD(i, DEFAULT_SCREEN_OCCUPATION[i]); + } + } + } + + _onRemove (comp: Component) { + if (comp === this) { + this.onDisable(); + } + } + + // Redo, Undo, Prefab restore, etc. + onRestore () { + if (this.enabledInHierarchy) { + this._attachToScene(); + } + } + + onEnable () { + this._attachToScene(); + // this.recalculateBounds(this); + + // cache lod for scene + if (this.lodCount > 0 && this._lodGroup.lodCount < 1) { + this._LODs.forEach((lod: LOD, index) => { + lod.lodData.screenUsagePercentage = lod.screenUsagePercentage; + const renderers = lod.renderers; + if (renderers !== null && renderers.length > 0) { + for (let i = 0; i < renderers.length; i++) { + const lodInstance = lod.lodData; + const renderer = renderers[i]; + if (lodInstance && renderer && renderer.model) { + lodInstance.addModel(renderer.model); + } + } + } + this._lodGroup.updateLOD(index, lod.lodData); + }); + } + } + + onDisable () { + this._detachFromScene(); + } + + private _attachToScene () { + if (!this.node.scene) { return; } + + const renderScene = this._getRenderScene(); + if (this._lodGroup.scene) { + this._detachFromScene(); + } + renderScene.addLODGroup(this._lodGroup); + } + + private _detachFromScene () { + if (this._lodGroup.scene) { this._lodGroup.scene.removeLODGroup(this._lodGroup); } + } + + /** + * @engineInternal + */ + private _emitChangeNode (node: Node) { + if (EDITOR) { + // @ts-expect-error Because EditorExtends is Editor only + EditorExtends.Node.emit('change', node.uuid, node); + } + } +} diff --git a/cocos/render-scene/core/render-scene.ts b/cocos/render-scene/core/render-scene.ts index a4b68f0689d..1f9b5969fb7 100644 --- a/cocos/render-scene/core/render-scene.ts +++ b/cocos/render-scene/core/render-scene.ts @@ -31,6 +31,7 @@ import { SphereLight } from '../scene/sphere-light'; import { SpotLight } from '../scene/spot-light'; import { TransformBit } from '../../scene-graph/node-enum'; import { DrawBatch2D } from '../../2d/renderer/draw-batch'; +import { LODGroup } from '../scene/lod-group'; export interface IRenderSceneInfo { name: string; @@ -127,10 +128,18 @@ export class RenderScene { return this._batches; } + /** + * @engineInternal + * @en All LOD groups of the render scene + * @zh 渲染场景管理的所有 LOD 组 + */ + get lodGroups () : readonly LODGroup[] { return this._lodGroups; } + private _root: Root; private _name = ''; private _cameras: Camera[] = []; private _models: Model[] = []; + private _lodGroups: LODGroup[] = []; // LOD Group gathered private _batches: DrawBatch2D[] = []; private _directionalLights: DirectionalLight[] = []; private _sphereLights: SphereLight[] = []; @@ -204,6 +213,7 @@ export class RenderScene { this.removeSphereLights(); this.removeSpotLights(); this.removeModels(); + this.removeLODGroups(); } /** @@ -442,6 +452,40 @@ export class RenderScene { this._batches.length = 0; } + /** + * @engineInternal + * @en Add a LOD group, all LOD groups attached to the render scene will be submitted for rendering. + * @zh 增加一个LOD 组,渲染场景上挂载的所有LOD 组都会被提交渲染。 + * @param lodGroup the LOD group + */ + addLODGroup (lodGroup: LODGroup) { + this._lodGroups.push(lodGroup); + lodGroup.attachToScene(this); + } + + /** + * @engineInternal + * @en Remove a LOD group, the LOD group removed will no longer be submitted for rendering. + * @zh 删除一个LOD 组,移除的LOD 组将不再被提交渲染。 + * @param lodGroup the LOD group + */ + removeLODGroup (lodGroup: LODGroup) { + const index = this._lodGroups.indexOf(lodGroup); + if (index >= 0) { + this._lodGroups.splice(index, 1); + lodGroup.detachFromScene(); + } + } + + /** + * @engineInternal + * @en Remove all LOD groups. + * @zh 删除所有LOD 组。 + */ + removeLODGroups () { + this._lodGroups.length = 0; + } + /** * @en Notify all models that the global pipeline state have been updated so that they can update their render data and states. * @zh 通知所有模型全局管线状态已更新,需要更新自身状态。 diff --git a/cocos/render-scene/scene/index.ts b/cocos/render-scene/scene/index.ts index c488c1063d1..0471a8a9caa 100644 --- a/cocos/render-scene/scene/index.ts +++ b/cocos/render-scene/scene/index.ts @@ -35,3 +35,4 @@ export * from './light'; export * from './directional-light'; export * from './sphere-light'; export * from './spot-light'; +export * from './lod-group'; diff --git a/cocos/render-scene/scene/lod-group.ts b/cocos/render-scene/scene/lod-group.ts new file mode 100644 index 00000000000..b37a2850e8b --- /dev/null +++ b/cocos/render-scene/scene/lod-group.ts @@ -0,0 +1,190 @@ +/* + Copyright (c) 2020 Xiamen Yaji Software Co., Ltd. + + https://www.cocos.com/ + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated engine source code (the "Software"), a limited, + worldwide, royalty-free, non-assignable, revocable and non-exclusive license + to use Cocos Creator solely to develop games on your target platforms. You shall + not use Cocos Creator software for developing other software or tools that's + used for developing games. You are not granted to publish, distribute, + sublicense, and/or sell copies of Cocos Creator. + + The software or tools in this License Agreement are licensed, not sold. + Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + */ +import { Model } from './model'; +import { Vec3 } from '../../core'; +import { RenderScene } from '..'; +import { Device, deviceManager } from '../../gfx'; +import { Node } from '../../scene-graph'; +import { Camera, CameraProjection } from './camera'; +import { assertIsTrue } from '../../core/data/utils/asserts'; + +/** + * @engineInternal + */ +export class LODData { + // Range in [0, 1]. + screenUsagePercentage = 1.0; + + private _models: Model[] = []; + + get models () : readonly Model[] { + return this._models; + } + + public addModel (model: Model) { + this._models.splice(0, 0, model); + } + + public eraseModel (model: Model) { + const removeIndex = this._models.indexOf(model); + if (removeIndex >= 0) { + this._models.splice(removeIndex, 1); + } + } + + public clearModels () { + this._models.length = 0; + } +} + +/** + * @engineInternal + */ +export class LODGroup { + public scene?: RenderScene; + + public node: Node = null!; + + protected _device: Device; + + public enabled = true; + + private _localBoundaryCenter: Vec3 = new Vec3(0, 0, 0); + + /** + * @en Object Size in local space, may be auto-calculated value from object bounding box or value from user input. + */ + protected _objectSize = 1; + + /** + *@en The array of LODs + */ + protected _LODs: LODData[] = []; + + /** + * For editor only, users maybe operate several LOD's object + */ + protected _lockedLODLevelVec : number[] = []; + + constructor () { + this._device = deviceManager.gfxDevice; + } + + set localBoundaryCenter (val: Vec3) { this._localBoundaryCenter.set(val); } + + get localBoundaryCenter () : Readonly { return this._localBoundaryCenter.clone(); } + + get lodCount () { return this._LODs.length; } + + set objectSize (val: number) { + this._objectSize = val; + } + + get objectSize () { return this._objectSize; } + + get LODs () : readonly LODData[] { return this._LODs; } + + attachToScene (scene: RenderScene) { + this.scene = scene; + } + + detachFromScene () { + this.scene = null!; + } + + lockLODLevels (lockLev: number[]) { + this._lockedLODLevelVec = lockLev; + } + + getLockLODLevels (): number[] { + return this._lockedLODLevelVec; + } + + clearLODs () { + this._LODs.length = 0; + } + + insertLOD (index: number, lod: LODData) { + this._LODs.splice(index, 0, lod); + } + + updateLOD (index: number, lod: LODData) { + this._LODs[index] = lod; + } + + eraseLOD (index: number) { + this._LODs.splice(index, 1); + } + + /** + * + * @param camera current perspective camera + * @returns visible LOD index in lodGroup + */ + getVisibleLOD (camera: Camera): number { + const relativeHeight = this.getRelativeHeight(camera) || 0; + + let lodIndex = -1; + for (let i = 0; i < this.lodCount; ++i) { + const lod = this.LODs[i]; + if (relativeHeight >= lod.screenUsagePercentage) { + lodIndex = i; + break; + } + } + return lodIndex; + } + + /** + * + * @param camera current perspective camera + * @returns height of current lod group relvative to camera position in screen space, aka. relativeHeight + */ + getRelativeHeight (camera: Camera): number|null { + if (!this.node) return null; + + let distance: number | undefined; + if (camera.projectionType === CameraProjection.PERSPECTIVE) { + distance = Vec3.len(this.localBoundaryCenter.transformMat4(this.node.worldMatrix).subtract(camera.node.position)); + } + + return this.distanceToRelativeHeight(camera, distance, this.getWorldSpaceSize()); + } + + private distanceToRelativeHeight (camera: Camera, distance: number | undefined, size: number): number { + if (camera.projectionType === CameraProjection.PERSPECTIVE) { + assertIsTrue(typeof distance === 'number', 'distance must be present for perspective projection'); + return (size * camera.matProj.m05) / (distance * 2.0); // note: matProj.m11 is 1 / tan(fov / 2.0) + } else { + return size * camera.matProj.m05 * 0.5; + } + } + + private getWorldSpaceSize (): number { + const scale = this.node.scale; + const maxScale = Math.max(Math.abs(scale.x), Math.abs(scale.y), Math.abs(scale.z)); + return maxScale * this.objectSize; + } +} diff --git a/cocos/rendering/custom/web-scene.ts b/cocos/rendering/custom/web-scene.ts index 5b6a1062c06..640dbc401a1 100644 --- a/cocos/rendering/custom/web-scene.ts +++ b/cocos/rendering/custom/web-scene.ts @@ -32,6 +32,7 @@ import { PipelineSceneData } from '../pipeline-scene-data'; import { SceneTask, SceneTransversal, SceneVisitor } from './pipeline'; import { TaskType } from './types'; import { PipelineUBO } from '../pipeline-ubo'; +import { LODModesCachedUtils } from '../lod-models-utils'; export class RenderObject implements IRenderObject { public model: Model; @@ -109,11 +110,19 @@ export class WebSceneTask implements SceneTask { const models = scene!.models; const visibility = camera.visibility; + if (scene) { + LODModesCachedUtils.updateCachedLODModels(scene, camera); + } + for (let i = 0; i < models.length; i++) { const model = models[i]; // filter model by view visibility if (model.enabled) { + if (LODModesCachedUtils.isLODModelCulled(model)) { + continue; + } + if (model.castShadow) { castShadowObjects.push(this._getRenderObject(model, camera)); csmLayerObjects.push(this._getRenderObject(model, camera)); @@ -130,6 +139,7 @@ export class WebSceneTask implements SceneTask { } } } + LODModesCachedUtils.clearCachedLODModels(); } public start (): void { diff --git a/cocos/rendering/lod-group-editor-utility.ts b/cocos/rendering/lod-group-editor-utility.ts new file mode 100644 index 00000000000..bc5b51a1d5b --- /dev/null +++ b/cocos/rendering/lod-group-editor-utility.ts @@ -0,0 +1,99 @@ +/* + Copyright (c) 2022 Xiamen Yaji Software Co., Ltd. + + https://www.cocos.com/ + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated engine source code (the "Software"), a limited, + worldwide, royalty-free, non-assignable, revocable and non-exclusive license + to use Cocos Creator solely to develop games on your target platforms. You shall + not use Cocos Creator software for developing other software or tools that's + used for developing games. You are not granted to publish, distribute, + sublicense, and/or sell copies of Cocos Creator. + + The software or tools in this License Agreement are licensed, not sold. + Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + */ + +import { LODGroup } from "../misc/lodgroup-component"; +import { Vec3 } from '../core'; +import { assertIsTrue } from '../core/data/utils/asserts'; +import { Camera, CameraProjection } from '../render-scene/scene'; +import { scene } from '../render-scene'; + +export class LODGroupEditorUtility { + /** + * @en Get the lod level used under the current camera, -1 indicates no lod is used. + * @zh 获取当前摄像机下,使用哪一级的LOD,-1 表示没有lod被使用 + * @param lodGroup current LOD Group component. + * @param camera current perspective camera. + * @returns visible LOD index in lodGroup. + */ + static getVisibleLOD (lodGroup: LODGroup, camera: Camera): number { + const screenOccupancyPercentage = this.getRelativeHeight(lodGroup, camera) || 0; + + let lodIndex = -1; + for (let i = 0; i < lodGroup.lodCount; ++i) { + const lod = lodGroup.getLOD(i); + if (lod && screenOccupancyPercentage >= lod.screenUsagePercentage) { + lodIndex = i; + break; + } + } + return lodIndex; + } + + /** + * @en Get the percentage of objects used on the screen under the current camera. + * @zh 获取当前摄像机下,物体在屏幕上的占用比率 + * @param lodGroup current LOD Group component + * @param camera current perspective camera + * @returns height of current lod group relative to camera position in screen space, aka. relativeHeight + */ + static getRelativeHeight (lodGroup: LODGroup, camera: Camera): number|null { + if (!lodGroup.node) return null; + + let distance: number | undefined; + if (camera.projectionType === scene.CameraProjection.PERSPECTIVE) { + distance = Vec3.len(lodGroup.localBoundaryCenter.transformMat4(lodGroup.node.worldMatrix).subtract(camera.node.position)); + } + return this.distanceToRelativeHeight(camera, distance, this.getWorldSpaceSize(lodGroup)); + } + + /** + * @zh 强制使用某几级的LOD + * @en Force multi LOD level to use. + * lodIndexArray @en The LOD level array. Passing [] will return to standard LOD processing. @zh 要使用的LOD层级数组,传[]时将使用标准的处理流程。 + */ + static forceLODs (lodGroup: LODGroup, lodIndexArray: number[]) { + lodGroup.lodGroup.lockLODLevels(lodIndexArray); + } + + private static distanceToRelativeHeight (camera: Camera, distance: number | undefined, size: number): number { + if (camera.projectionType === CameraProjection.PERSPECTIVE) { + assertIsTrue(typeof distance === 'number', 'distance must be present for perspective projection'); + return (size * camera.matProj.m05) / (distance * 2.0); // note: matProj.m05 is 1 / tan(fov / 2.0) + } else { + return size * camera.matProj.m05 * 0.5; + } + } + + private static relativeHeightToDistance (camera: Camera, relativeHeight: number, size: number): number { + assertIsTrue(camera.projectionType === CameraProjection.PERSPECTIVE, 'Camera type must be perspective.'); + return (size * camera.matProj.m05) / (relativeHeight * 2.0); // note: matProj.m05 is 1 / tan(fov / 2.0) + } + + private static getWorldSpaceSize (lodGroup: LODGroup): number { + const scale = lodGroup.node.scale; + const maxScale = Math.max(Math.abs(scale.x), Math.abs(scale.y), Math.abs(scale.z)); + return maxScale * lodGroup.objectSize; + } +} diff --git a/cocos/rendering/lod-models-utils.ts b/cocos/rendering/lod-models-utils.ts new file mode 100644 index 00000000000..cc6a66fefc3 --- /dev/null +++ b/cocos/rendering/lod-models-utils.ts @@ -0,0 +1,98 @@ +/* + Copyright (c) 2022 Xiamen Yaji Software Co., Ltd. + + https://www.cocos.com/ + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated engine source code (the "Software"), a limited, + worldwide, royalty-free, non-assignable, revocable and non-exclusive license + to use Cocos Creator solely to develop games on your target platforms. You shall + not use Cocos Creator software for developing other software or tools that's + used for developing games. You are not granted to publish, distribute, + sublicense, and/or sell copies of Cocos Creator. + + The software or tools in this License Agreement are licensed, not sold. + Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + */ + +import { Model } from '../render-scene/scene/model'; +import { Camera } from '../render-scene/scene/camera'; +import { RenderScene } from '../render-scene'; + +/** + * @engineInternal + * @zh LOD所有级别中存储的model集合;包含多个LODGroup的所有LOD + * @en The collection of models stored in all levels of LOD, All LODs containing multiple LODGroups. + */ +const modelsInAnyLODGroup = new Map(); +/** + * @engineInternal + * @zh 指定相机下,某一级LOD使用的model集合;可能包含多个LODGroup的某一级LOD + * @en Specify the model set used by a level of LOD under the camera, LOD of a level that may contain multiple LODGroups. + */ +const visibleModelsByAnyLODGroup = new Map(); + +/** + * @engineInternal + */ +export class LODModesCachedUtils { + /** + * @en Insert visible LOD models into visibleModelsByAnyLODGroup, Add all models on lodGroups to modelsInAnyLODGroup + */ + public static updateCachedLODModels (scene: RenderScene, camera: Camera) { + // eslint-disable-next-line no-lone-blocks + for (const lodGroup of scene.lodGroups) { + if (lodGroup.enabled) { + const LODLevels = lodGroup.getLockLODLevels(); + const count = LODLevels.length; + //count == 0 will return to standard LOD processing. + if (count > 0) { + for (let index = 0; index < lodGroup.lodCount; index++) { + const lod = lodGroup.LODs[index]; + for (const model of lod.models) { + for (let i = 0; i < count; i++) { + // The LOD level to use. + if (LODLevels[i] === index) { + if (model && model.node.active) { + visibleModelsByAnyLODGroup.set(model, true); + break; + } + } + } + modelsInAnyLODGroup.set(model, true); + } + } + continue; + } + + const visIndex = lodGroup.getVisibleLOD(camera); + for (let index = 0; index < lodGroup.lodCount; index++) { + const lod = lodGroup.LODs[index]; + for (const model of lod.models) { + if (visIndex === index && model && model.node.active) { + visibleModelsByAnyLODGroup.set(model, true); + } + modelsInAnyLODGroup.set(model, true); + } + } + } + } + } + + public static isLODModelCulled (model: Model) { + return modelsInAnyLODGroup.get(model) && !visibleModelsByAnyLODGroup.get(model); + } + + public static clearCachedLODModels () { + modelsInAnyLODGroup.clear(); + visibleModelsByAnyLODGroup.clear(); + } +} diff --git a/cocos/rendering/planar-shadow-queue.ts b/cocos/rendering/planar-shadow-queue.ts index e26b42c7b4b..1b4856b790a 100644 --- a/cocos/rendering/planar-shadow-queue.ts +++ b/cocos/rendering/planar-shadow-queue.ts @@ -33,6 +33,7 @@ import { ShadowType } from '../render-scene/scene/shadows'; import { Layers } from '../scene-graph/layers'; import { PipelineRuntime } from './custom/pipeline'; import { BatchingSchemes } from '../render-scene/core/pass'; +import { LODModesCachedUtils } from './lod-models-utils'; const _ab = new AABB(); @@ -59,11 +60,17 @@ export class PlanarShadowQueue { const shadowVisible = (camera.visibility & Layers.BitMask.DEFAULT) !== 0; if (!scene.mainLight || !shadowVisible) { return; } + LODModesCachedUtils.updateCachedLODModels(scene, camera); const models = scene.models; for (let i = 0; i < models.length; i++) { const model = models[i]; + if (LODModesCachedUtils.isLODModelCulled(model)) { + continue; + } if (model.enabled && model.node && model.castShadow) { this._castModels.push(model); } } + LODModesCachedUtils.clearCachedLODModels(); + const instancedBuffer = shadows.instancingMaterial.passes[0].getInstancedBuffer(); this._instancedQueue.queue.add(instancedBuffer); diff --git a/cocos/rendering/scene-culling.ts b/cocos/rendering/scene-culling.ts index 9f20ec4f05c..7a312794ca2 100644 --- a/cocos/rendering/scene-culling.ts +++ b/cocos/rendering/scene-culling.ts @@ -22,7 +22,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - import { intersect, Sphere } from '../core/geometry'; import { Model } from '../render-scene/scene/model'; import { Camera, SKYBOX_FLAG } from '../render-scene/scene/camera'; @@ -34,6 +33,7 @@ import { ShadowType, CSMOptimizationMode } from '../render-scene/scene/shadows'; import { PipelineSceneData } from './pipeline-scene-data'; import { ShadowLayerVolume } from './shadow/csm-layers'; import { warnID } from '../core/platform'; +import { LODModesCachedUtils } from './lod-models-utils'; const _tempVec3 = new Vec3(); const _sphere = Sphere.create(0, 0, 0, 1); @@ -157,11 +157,13 @@ export function sceneCulling (pipeline: RenderPipeline, camera: Camera) { const models = scene.models; const visibility = camera.visibility; - for (let i = 0; i < models.length; i++) { - const model = models[i]; - + function enqueueRenderObject (model: Model) { // filter model by view visibility if (model.enabled) { + if (LODModesCachedUtils.isLODModelCulled(model)) { + return; + } + if (model.castShadow) { castShadowObjects.push(getRenderObject(model, camera)); csmLayerObjects.push(getRenderObject(model, camera)); @@ -171,11 +173,17 @@ export function sceneCulling (pipeline: RenderPipeline, camera: Camera) { || (visibility & model.visFlags)) { // frustum culling if (model.worldBounds && !intersect.aabbFrustum(model.worldBounds, camera.frustum)) { - continue; + return; } renderObjects.push(getRenderObject(model, camera)); } } } + + LODModesCachedUtils.updateCachedLODModels(scene, camera); + for (let i = 0; i < models.length; i++) { + enqueueRenderObject(models[i]); + } + LODModesCachedUtils.clearCachedLODModels(); } diff --git a/editor/exports/lod-group-utils.ts b/editor/exports/lod-group-utils.ts new file mode 100644 index 00000000000..175f8554b4c --- /dev/null +++ b/editor/exports/lod-group-utils.ts @@ -0,0 +1,2 @@ +export { LODGroupEditorUtility } from '../../cocos/rendering/lod-group-editor-utility'; +export { LODModesCachedUtils } from '../../cocos/rendering/lod-models-utils'; diff --git a/editor/inspector/components.js b/editor/inspector/components.js index 7f033404acc..0ac285836d1 100644 --- a/editor/inspector/components.js +++ b/editor/inspector/components.js @@ -20,4 +20,5 @@ module.exports = { 'cc.WebView': join(__dirname, './components/webview.js'), 'cc.Widget': join(__dirname, './components/widget.js'), 'cc.Class': join(__dirname, './components/class.js'), + 'cc.LODGroup': join(__dirname, './components/lodGroup/index.js'), }; diff --git a/editor/inspector/components/lodGroup/index.js b/editor/inspector/components/lodGroup/index.js new file mode 100644 index 00000000000..f39a7731e1d --- /dev/null +++ b/editor/inspector/components/lodGroup/index.js @@ -0,0 +1,268 @@ +'use strict'; + +const { join } = require('path'); + +const lodItem = require('./lod-item'); +const multiLodGroup = require('./multi-lod-group'); + +module.paths.push(join(Editor.App.path, 'node_modules')); +const Vue = require('vue/dist/vue.min.js'); +let vm; + +exports.style = ` +.lod-group { + position: relative; + width: 100%; + margin: 6px 0; +} + +.lod-group > .generate-lods { + display: flex; + justify-content: center; + margin-top: 12px; +} + +.lod-group ui-prop, +.lod-group .lod-item .mesh-list { + margin-bottom: 6px; +} + +.lod-group .object-size-content, +.lod-group .lod-item .screen-size-content, +.multi-lod-group .object-size-content { + display: flex; +} + +.lod-group .object-size-content > ui-num-input, +.multi-lod-group .object-size-content > ui-num-input, +.lod-item .screen-size-content > ui-num-input { + flex: 1; + margin-right: 4px; + min-width: 44px; +} + +.lod-item .header { + flex: 1; + display: flex; + align-items: center; +} + +.lod-item .header:hover > .right > .operator { + display: flex; +} + +.lod-item .header > .left { + display: flex; + align-items: center; + margin-right: 4px; +} + +.lod-item .header > .right { + flex: 1; + text-align: right; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + width: 0; + display: flex; + justify-content: flex-end; + align-items: center; +} + +.header > .right > .operator { + display: none; + margin-left: 8px; + background: var(--color-default-fill); + border-color: var(--color-default-border); + border-radius: calc(var(--size-normal-radius) * 1px); +} + +.header .operator > ui-icon { + padding: 0 5px; + transition: color 0.15s; + color: var(--color-default-contrast-emphasis); + position: relative; +} + +.header .operator > ui-icon + ui-icon { + margin-left: 1px; +} + +.header .operator > ui-icon + ui-icon::after { + content: ''; + display: block; + width: 1px; + height: 12px; + position: absolute; + top: 6px; + left: -1px; + background: var(--color-normal-fill-normal); +} + +.header .operator > ui-icon:hover { + background: var(--color-hover-fill-weaker); + color: var(--color-focus-contrast-emphasis); +} + +.lod-item .mesh-list > .mesh { + margin-top: 12px; +} + +.lod-item .mesh-list > footer { + display: flex; + justify-content: flex-end; + margin-top: 4px; +} + +.lod-item .mesh-list > footer > ui-button + ui-button { + margin-left: 4px; +} + +.lod-item .mesh { + display: flex; + position: relative; + user-select: none; +} + +.lod-item .mesh > .component { + flex: 2; +} + +.lod-item .mesh > .label { + flex: 1; + box-sizing: border-box; + white-space: nowrap; + user-select: text; + overflow: hidden; + text-align: right; +} +`; + +exports.template = ` +
+
+
+ + Recalculate Bounds + + + +
+ + + Reset Object Size +
+
+ + +
+
+
+ +
+
`; + +exports.methods = {}; + +exports.$ = { + app: '#app', +}; + +exports.update = function(dump) { + vm.dump = dump; + vm.multi = !!dump.value.LODs.values; +}; + +exports.ready = function() { + vm = new Vue({ + el: this.$.app, + components: { + 'lod-item': lodItem, + 'multi-lod-group': multiLodGroup, + }, + data() { + return { + dump: {}, + multi: false, + }; + }, + methods: { + onObjectSizeConfirm(event) { + const that = this; + that.dump.value.objectSize.value = event.target.value; + that.updateDump(that.dump.value.objectSize); + }, + updateDump(dump) { + const that = this; + that.$refs['lod-dump'].dump = dump; + that.$refs['lod-dump'].dispatch('change-dump'); + }, + recalculateBounds() { + const that = this; + Editor.Message.send('scene', 'execute-component-method', { + uuid: that.dump.value.uuid.value, + name: 'recalculateBounds', + args: [], + }); + }, + resetObjectSize() { + const that = this; + Editor.Message.send('scene', 'execute-component-method', { + uuid: that.dump.value.uuid.value, + name: 'resetObjectSize', + args: [], + }); + }, + updateLODs(operator, index) { + const that = this; + const LODs = that.dump.value.LODs.value; + if (operator === 'insert') { + // insert after + if (LODs.length >= 8) { + console.warn('Maximum 8 LOD, Can\'t add more LOD'); + return; + } + const preValue = LODs[index].value.screenUsagePercentage.value; + const nextValue = LODs[index + 1] ? LODs[index + 1].value.screenUsagePercentage.value : 0; + Editor.Message.request('scene', 'lod:insert-lod', that.dump.value.uuid.value, index + 1, (preValue + nextValue) / 2, null); + } else if (operator === 'delete') { + if (LODs.length === 1) { + console.warn('At least one LOD, Can\'t delete any more'); + return; + } + Editor.Message.request('scene', 'lod:delete-lod', that.dump.value.uuid.value, index); + } + }, + calculateRange(range, index) { + const that = this; + const LODs = that.dump.value.LODs.value; + if (range === 'min') { + return LODs[index + 1] ? LODs[index + 1].value.screenUsagePercentage.value * 100 : 0; + } else if (range === 'max') { + return LODs[index - 1] ? LODs[index - 1].value.screenUsagePercentage.value * 100 : 100; + } + return null; + }, + }, + }); +}; + +exports.close = function() { + vm = null; +}; diff --git a/editor/inspector/components/lodGroup/lod-item.js b/editor/inspector/components/lodGroup/lod-item.js new file mode 100644 index 00000000000..35abaad2bd6 --- /dev/null +++ b/editor/inspector/components/lodGroup/lod-item.js @@ -0,0 +1,128 @@ +'use strict'; + +exports.template = ` + +
+
+ LOD {{ index }} +
+
+ {{ totalTriangles }} Triangles - + {{ data.value.renderers.value.length }} Sub Mesh(es) +
+ + +
+
+
+ +
+ + +
+ + + Apply Current Camera Size +
+
+ + + + + +
+ + + + + + +
+
+
+
+`; + +exports.props = ['data', 'index', 'min', 'max', 'lodGroupId']; + +exports.data = function() { + return { + totalTriangles: 0, + }; +}; + +exports.watch = { + 'data.value.triangleCount': { + immediate: true, + handler(triangleCount) { + const that = this; + const res = triangleCount.value.reduce((sum, item) => { + return sum += item.value; + }, 0); + that.totalTriangles = res; + }, + }, +}; + +exports.computed = { + cacheExpandId() { + const that = this; + return `${that.lodGroupId}-lod-${that.index}`; + }, +}; + +exports.methods = { + onScreenSizeConfirm(event) { + const that = this; + that.data.value.screenUsagePercentage.value = event.target.value / 100; + that.updateDump(that.data.value.screenUsagePercentage); + }, + onMeshConfirm(event, meshIndex) { + const that = this; + that.data.value.renderers.value[meshIndex].value.uuid = event.target.value; + that.updateDump(that.data.value.renderers); + }, + updateRenderers(operator) { + const that = this; + if (operator === 'insert') { + that.data.value.renderers.value.push(that.data.value.renderers.elementTypeData); + } else if (operator === 'delete') { + that.data.value.renderers.value.pop(); + } + that.updateDump(that.data.value.renderers); + }, + updateDump(dump) { + const that = this; + that.$refs['lod-item-dump'].dump = dump; + that.$refs['lod-item-dump'].dispatch('change-dump'); + }, + updateLODs(operator) { + const that = this; + // emit method is recommended to all lowercase, camel case may be automatically converted to lowercase resulting in failure to match + that.$emit('update-lods', operator, that.index); + }, + applyCameraSize() { + const that = this; + Editor.Message.send('scene', 'lod:apply-current-camera-size', that.lodGroupId, that.index); + }, + handleTriangleLabel(meshIndex) { + const that = this; + return `${ that.data.value.triangleCount.value[meshIndex] ? that.data.value.triangleCount.value[meshIndex].value : 0 } Triangles`; + }, +}; diff --git a/editor/inspector/components/lodGroup/multi-lod-group.js b/editor/inspector/components/lodGroup/multi-lod-group.js new file mode 100644 index 00000000000..d56bb9f55c0 --- /dev/null +++ b/editor/inspector/components/lodGroup/multi-lod-group.js @@ -0,0 +1,134 @@ +'use strict'; + +exports.template = ` +
+ + + +
+ + Reset Object Size +
+
+ +
+`; + +exports.props = ['dump']; + +exports.watch = { + dump: { + immediate: true, + deep: true, + handler() { + const that = this; + that.refresh(); + }, + }, +}; + +exports.data = function() { + return { + multiLen: 0, + multiObjectSizeInvalid: false, + multiLODs: [], + }; +}; + +exports.methods = { + refresh() { + const that = this; + if (that.dump.value) { + that.multiObjectSizeInvalid = that.dump.value.objectSize.values.some((val) => val !== that.dump.value.objectSize.values[0]); + const multiLodGroups = that.dump.value.LODs.values; + that.multiLen = multiLodGroups.reduce((pre, next) => { + return pre.length < next.length ? pre.length : next.length; + }); + const multiLods = []; + for (let i = 0; i < that.multiLen; i++) { + let multiScreenSizeInvalid = false; + for (let j = 1; j < multiLodGroups.length; j++) { + if (multiLodGroups[j][i].value.screenUsagePercentage.value !== multiLodGroups[0][i].value.screenUsagePercentage.value) { + multiScreenSizeInvalid = true; + break; + } + } + multiLods[i] = multiScreenSizeInvalid ? 'invalid' : multiLodGroups[0][i].value.screenUsagePercentage.value; + } + that.multiLODs = multiLods; + } + }, + onMultiObjectSizeConfirm(event) { + const that = this; + that.dump.value.objectSize.values = that.dump.value.objectSize.values.fill(event.target.value); + that.multiObjectSizeInvalid = false; + that.updateDump(that.dump.value.objectSize); + }, + onMultiScreenSizeConfirm(event, index) { + const that = this; + that.dump.value.LODs.values.forEach((lod) => { + lod[index].value.screenUsagePercentage.value = event.target.value / 100; + }); + that.updateDump(that.dump.value.LODs); + }, + resetMultiObjectSize() { + const that = this; + that.dump.value.uuid.values.forEach((uuid) => { + Editor.Message.send('scene', 'execute-component-method', { + uuid: uuid, + name: 'resetObjectSize', + args: [], + }); + }); + }, + updateDump(dump) { + const that = this; + that.$refs['multi-lod-dump'].dump = dump; + that.$refs['multi-lod-dump'].dispatch('change-dump'); + }, + calculateMultiRange(range, index) { + const that = this; + if (range === 'min') { + let min = that.dump.value.LODs.values[0][index + 1] ? that.dump.value.LODs.values[0][index + 1].value.screenUsagePercentage.value : 0; + for (let i = 1; i < that.dump.value.LODs.values.length; i++) { + const multiLods = that.dump.value.LODs.values[i]; + if (multiLods[index + 1] && multiLods[index + 1].value.screenUsagePercentage.value > min) { + min = multiLods[index + 1].value.screenUsagePercentage.value; + } + } + return min * 100; + } else if (range === 'max') { + let max = that.dump.value.LODs.values[0][index - 1] ? that.dump.value.LODs.values[0][index - 1].value.screenUsagePercentage.value : 1; + for (let i = 1; i < that.dump.value.LODs.values.length; i++) { + const multiLods = that.dump.value.LODs.values[i]; + if (multiLods[index - 1] && multiLods[index - 1].value.screenUsagePercentage.value < max) { + max = multiLods[index - 1].value.screenUsagePercentage.value; + } + } + return max * 100; + } + return null; + }, + handleMultiScreenSize(index) { + return `LOD ${index} Transition (% Screen Size)`; + }, +}; From ef1635d26732b5285429d11e2c1611535828abe5 Mon Sep 17 00:00:00 2001 From: minggo Date: Thu, 27 Oct 2022 11:30:34 +0800 Subject: [PATCH 090/829] move prefab related classes into scene-graph (#13156) --- cocos/asset/assets/index.jsb.ts | 1 - cocos/asset/assets/index.ts | 1 - cocos/asset/assets/prefab.jsb.ts | 79 ------------------- cocos/core/data/instantiate.ts | 2 +- cocos/core/utils/prefab/index.ts | 2 - cocos/misc/prefab-link.ts | 2 +- cocos/scene-graph/component.ts | 2 +- cocos/scene-graph/index.ts | 1 + cocos/scene-graph/node.ts | 2 +- cocos/scene-graph/prefab/index.ts | 5 ++ .../prefab/prefab-info.ts | 11 +-- .../assets => scene-graph/prefab}/prefab.ts | 6 +- .../utils => scene-graph}/prefab/utils.ts | 24 +++--- cocos/scene-graph/scene.ts | 2 +- 14 files changed, 32 insertions(+), 108 deletions(-) delete mode 100644 cocos/asset/assets/prefab.jsb.ts delete mode 100644 cocos/core/utils/prefab/index.ts create mode 100644 cocos/scene-graph/prefab/index.ts rename cocos/{core/utils => scene-graph}/prefab/prefab-info.ts (96%) rename cocos/{asset/assets => scene-graph/prefab}/prefab.ts (98%) rename cocos/{core/utils => scene-graph}/prefab/utils.ts (96%) diff --git a/cocos/asset/assets/index.jsb.ts b/cocos/asset/assets/index.jsb.ts index 5fdc8930b17..597ec3f6839 100644 --- a/cocos/asset/assets/index.jsb.ts +++ b/cocos/asset/assets/index.jsb.ts @@ -28,7 +28,6 @@ import './deprecation'; export { Asset } from './asset'; export { BufferAsset } from './buffer-asset'; -export { Prefab } from './prefab'; export * from './scripts'; export { RenderingSubMesh } from './rendering-sub-mesh'; export { SceneAsset } from './scene-asset'; diff --git a/cocos/asset/assets/index.ts b/cocos/asset/assets/index.ts index 8ce78e1716b..2f05f9dc498 100644 --- a/cocos/asset/assets/index.ts +++ b/cocos/asset/assets/index.ts @@ -28,7 +28,6 @@ import './deprecation'; export { Asset } from './asset'; export { BufferAsset } from './buffer-asset'; -export { Prefab } from './prefab'; export * from './scripts'; export { RenderingSubMesh } from './rendering-sub-mesh'; export { SceneAsset } from './scene-asset'; diff --git a/cocos/asset/assets/prefab.jsb.ts b/cocos/asset/assets/prefab.jsb.ts deleted file mode 100644 index c621da472b7..00000000000 --- a/cocos/asset/assets/prefab.jsb.ts +++ /dev/null @@ -1,79 +0,0 @@ -/* - Copyright (c) 2021 Xiamen Yaji Software Co., Ltd. - - http://www.cocos.com - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated engine source code (the "Software"), a limited, - worldwide, royalty-free, non-assignable, revocable and non-exclusive license - to use Cocos Creator solely to develop games on your target platforms. You shall - not use Cocos Creator software for developing other software or tools that's - used for developing games. You are not granted to publish, distribute, - sublicense, and/or sell copies of Cocos Creator. - - The software or tools in this License Agreement are licensed, not sold. - Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. -*/ -import { ccclass, editable, serializable } from 'cc.decorator'; -import { legacyCC } from '../../core/global-exports'; -import { Enum } from '../../core/value-types'; -import './asset'; - -export const Prefab = jsb.Prefab; -export type Prefab = jsb.Prefab; - -const OptimizationPolicy = Enum({ - /** - * @en The optimization policy is automatically chosen based on the number of instantiations. - * When you first create an instance, the behavior is the same as SINGLE_INSTANCE. - * MULTI_INSTANCE will be automatically used after multiple creation. - * @zh 根据创建次数自动调整优化策略。初次创建实例时,行为等同 SINGLE_INSTANCE,多次创建后将自动采用 MULTI_INSTANCE。 - */ - AUTO: 0, - /** - * @en Optimize for single instance creation.
- * This option skips code generation for this prefab. - * When this prefab will usually create only one instances, please select this option. - * @zh 优化单次创建性能。
- * 该选项会跳过针对这个 prefab 的代码生成优化操作。当该 prefab 加载后,一般只会创建一个实例时,请选择此项。 - */ - SINGLE_INSTANCE: 1, - /** - * @en Optimize for creating instances multiple times.
- * This option enables code generation for this prefab. - * When this prefab will usually create multiple instances, please select this option. - * It is also recommended to select this option if the prefab instance in the scene - * has Auto Sync enabled and there are multiple instances in the scene. - * @zh 优化多次创建性能。
- * 该选项会启用针对这个 prefab 的代码生成优化操作。当该 prefab 加载后,一般会创建多个实例时,请选择此项。如果该 prefab 在场景中的节点启用了自动关联,并且在场景中有多份实例,也建议选择此项。 - */ - MULTI_INSTANCE: 2, -}); - -const prefabProto: any = Prefab.prototype; - -prefabProto._ctor = function () { - jsb.Asset.prototype._ctor.apply(this, arguments); - // _initializerDefineProperty(_this, 'data', _descriptor$v, _assertThisInitialized(_this)); - // _initializerDefineProperty(_this, 'optimizationPolicy', _descriptor2$o, _assertThisInitialized(_this)); -}; - -legacyCC.Prefab = Prefab; - -// handle meta data, it is generated automatically -const PrefabProto = Prefab.prototype; -editable(PrefabProto, 'data'); -serializable(PrefabProto, 'data'); -editable(PrefabProto, 'optimizationPolicy'); -serializable(PrefabProto, 'optimizationPolicy'); -editable(PrefabProto, 'persistent'); -serializable(PrefabProto, 'persistent'); -ccclass('cc.Prefab')(Prefab); diff --git a/cocos/core/data/instantiate.ts b/cocos/core/data/instantiate.ts index b595e42fb73..78699a1b298 100644 --- a/cocos/core/data/instantiate.ts +++ b/cocos/core/data/instantiate.ts @@ -31,7 +31,7 @@ import { CCObject, isCCObject } from './object'; import { js } from '../utils/js'; import { getError, warn } from '../platform/debug'; import { legacyCC } from '../global-exports'; -import { Prefab } from '../../asset/assets/prefab'; +import { Prefab } from '../../scene-graph/prefab'; import { Node } from '../../scene-graph/node'; import { updateChildrenForDeserialize } from '../utils/jsb-utils'; import { isCCClassOrFastDefined } from './class'; diff --git a/cocos/core/utils/prefab/index.ts b/cocos/core/utils/prefab/index.ts deleted file mode 100644 index 9563ff3bcf1..00000000000 --- a/cocos/core/utils/prefab/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './prefab-info'; -export * from './utils'; diff --git a/cocos/misc/prefab-link.ts b/cocos/misc/prefab-link.ts index fd5793fca72..034579f21ed 100644 --- a/cocos/misc/prefab-link.ts +++ b/cocos/misc/prefab-link.ts @@ -1,6 +1,6 @@ import { ccclass, serializable, type, visible } from '../core/data/decorators'; import { Component } from '../scene-graph/component'; -import { Prefab } from '../asset/assets/prefab'; +import { Prefab } from '../scene-graph/prefab'; /** * @en diff --git a/cocos/scene-graph/component.ts b/cocos/scene-graph/component.ts index 19f0870bebf..ae41c5c339a 100644 --- a/cocos/scene-graph/component.ts +++ b/cocos/scene-graph/component.ts @@ -36,7 +36,7 @@ import * as RF from '../core/data/utils/requiring-frame'; import { Node } from './node'; import { legacyCC } from '../core/global-exports'; import { errorID, warnID, assertID } from '../core/platform/debug'; -import { CompPrefabInfo } from '../core/utils/prefab/prefab-info'; +import { CompPrefabInfo } from './prefab/prefab-info'; import { EventHandler } from './component-event-handler'; const idGenerator = new IDGenerator('Comp'); diff --git a/cocos/scene-graph/index.ts b/cocos/scene-graph/index.ts index 3b80ad6002c..f2123a23843 100644 --- a/cocos/scene-graph/index.ts +++ b/cocos/scene-graph/index.ts @@ -40,3 +40,4 @@ export { EventHandler } from './component-event-handler'; export { Component } from './component'; export * from './deprecated'; export { default as NodeActivator } from './node-activator'; +export { Prefab } from './prefab'; diff --git a/cocos/scene-graph/node.ts b/cocos/scene-graph/node.ts index 5b746fe0e45..7bfd8017296 100644 --- a/cocos/scene-graph/node.ts +++ b/cocos/scene-graph/node.ts @@ -40,7 +40,7 @@ import { CCObject } from '../core/data/object'; import * as js from '../core/utils/js'; import IdGenerator from '../core/utils/id-generator'; import type { Scene } from './scene'; -import { PrefabInfo } from '../core/utils/prefab/prefab-info'; +import { PrefabInfo } from './prefab/prefab-info'; import { NodeEventType } from './node-event'; import { Event } from '../input/types'; diff --git a/cocos/scene-graph/prefab/index.ts b/cocos/scene-graph/prefab/index.ts new file mode 100644 index 00000000000..b74bc1dbb3c --- /dev/null +++ b/cocos/scene-graph/prefab/index.ts @@ -0,0 +1,5 @@ +// To keep compatibility: +// - prefab-info.ts is exported in utils.ts +// - utils.ts is exported in prefab.ts +// - so here just export prefab.ts +export * from './prefab'; diff --git a/cocos/core/utils/prefab/prefab-info.ts b/cocos/scene-graph/prefab/prefab-info.ts similarity index 96% rename from cocos/core/utils/prefab/prefab-info.ts rename to cocos/scene-graph/prefab/prefab-info.ts index 36b8b5412e6..a5f2aa4e6a0 100644 --- a/cocos/core/utils/prefab/prefab-info.ts +++ b/cocos/scene-graph/prefab/prefab-info.ts @@ -1,9 +1,10 @@ import { ccclass, serializable, editable, type } from 'cc.decorator'; import { EDITOR } from 'internal:constants'; -import { legacyCC } from '../../global-exports'; -import { Prefab } from '../../../asset/assets'; -import { CCObject } from '../../data'; -import { Component, Node } from '../../../scene-graph'; +import { cclegacy } from '../../core'; +import { Prefab } from './prefab'; +import { CCObject } from '../../core/data'; +import { Component } from '../component'; +import { Node } from '../node'; function compareStringArray (array1: string[] | undefined, array2: string[] | undefined) { if (!array1 || !array2) { @@ -204,4 +205,4 @@ export class PrefabInfo { public nestedPrefabInstanceRoots?: Node[]; } -legacyCC._PrefabInfo = PrefabInfo; +cclegacy._PrefabInfo = PrefabInfo; diff --git a/cocos/asset/assets/prefab.ts b/cocos/scene-graph/prefab/prefab.ts similarity index 98% rename from cocos/asset/assets/prefab.ts rename to cocos/scene-graph/prefab/prefab.ts index 8c01c152485..985fd359f58 100644 --- a/cocos/asset/assets/prefab.ts +++ b/cocos/scene-graph/prefab/prefab.ts @@ -29,11 +29,11 @@ import { SUPPORT_JIT, ALIPAY, RUNTIME_BASED } from 'internal:constants'; import { compile } from '../../core/data/instantiate-jit'; import { js, obsolete } from '../../core/utils/js'; import { Enum } from '../../core/value-types'; -import { Asset } from './asset'; -import { Node } from '../../scene-graph/node'; +import { Asset } from '../../asset/assets/asset'; +import { Node } from '../node'; import { legacyCC } from '../../core/global-exports'; import { warnID } from '../../core/platform/debug'; -import * as utils from '../../core/utils/prefab'; +import * as utils from './utils'; /** * @en An enumeration used with the [[Prefab.optimizationPolicy]] to specify how to optimize the instantiate operation. diff --git a/cocos/core/utils/prefab/utils.ts b/cocos/scene-graph/prefab/utils.ts similarity index 96% rename from cocos/core/utils/prefab/utils.ts rename to cocos/scene-graph/prefab/utils.ts index a416c39a883..0a78695c68b 100644 --- a/cocos/core/utils/prefab/utils.ts +++ b/cocos/scene-graph/prefab/utils.ts @@ -25,13 +25,13 @@ */ import { EDITOR, SUPPORT_JIT } from 'internal:constants'; -import { legacyCC } from '../../global-exports'; -import type { Node, Component } from '../../../scene-graph'; -import { errorID, warn } from '../../platform/debug'; -import { MountedChildrenInfo, PropertyOverrideInfo } from './prefab-info'; -import { MountedComponentsInfo, TargetInfo } from '.'; -import { editorExtrasTag } from '../../data'; -import { ValueType } from '../../value-types'; +import { cclegacy, errorID, warn, editorExtrasTag } from '../../core'; +import { Node } from '../node'; +import { Component } from '../component'; +import { MountedChildrenInfo, PropertyOverrideInfo, MountedComponentsInfo, TargetInfo } from './prefab-info'; +import { ValueType } from '../../core/value-types'; + +export * from './prefab-info'; export function createNodeWithPrefab (node: Node) { // @ts-expect-error: private member access @@ -68,7 +68,7 @@ export function createNodeWithPrefab (node: Node) { const editorExtras = node[editorExtrasTag]; // instantiate prefab - legacyCC.game._isCloning = true; + cclegacy.game._isCloning = true; if (SUPPORT_JIT) { // @ts-expect-error: private member access prefabInfo.asset._doInstantiate(node); @@ -80,9 +80,9 @@ export function createNodeWithPrefab (node: Node) { prefabRoot._iN$t = node; // instantiate prefab and apply to node - legacyCC.instantiate._clone(prefabRoot, prefabRoot); + cclegacy.instantiate._clone(prefabRoot, prefabRoot); } - legacyCC.game._isCloning = false; + cclegacy.game._isCloning = false; // restore preserved props node._objFlags = _objFlags; @@ -191,7 +191,7 @@ export function applyMountedChildren (node: Node, mountedChildren: MountedChildr // @ts-expect-error private member access target._children.push(childNode); - // @ts-expect-error private member access + // @ts-expect-error: private member access childNode._parent = target; if (EDITOR) { if (!childNode[editorExtrasTag]) { @@ -202,7 +202,7 @@ export function applyMountedChildren (node: Node, mountedChildren: MountedChildr } // mounted node need to add to the target map generateTargetMap(childNode, curTargetMap, false); - // siblingIndex update is in _onBatchCreated function, and it needs a parent. + // siblingIndex update is in _onBatchCreated function, and it p needs a parent. // @ts-expect-error private member access childNode._siblingIndex = target._children.length - 1; expandPrefabInstanceNode(childNode, true); diff --git a/cocos/scene-graph/scene.ts b/cocos/scene-graph/scene.ts index 5b1a05e4865..02aa59c2461 100644 --- a/cocos/scene-graph/scene.ts +++ b/cocos/scene-graph/scene.ts @@ -32,7 +32,7 @@ import { Node } from './node'; import { legacyCC } from '../core/global-exports'; import { Component } from './component'; import { SceneGlobals } from './scene-globals'; -import { applyTargetOverrides, expandNestedPrefabInstanceNode } from '../core/utils/prefab/utils'; +import { applyTargetOverrides, expandNestedPrefabInstanceNode } from './prefab/utils'; /** * @en From a1a833ceb47f921a8c4d7cfe72564d59213cc1be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=90=89=E6=9E=97?= <798080536@qq.com> Date: Thu, 27 Oct 2022 11:36:08 +0800 Subject: [PATCH 091/829] first optimization for light probe (#13157) * first optimization for light probe * optionally emit LIGHT_PROBE_CHANGED event --- cocos/gi/light-probe/delaunay.ts | 156 +++++++++++++-------- cocos/gi/light-probe/light-probe-group.ts | 6 +- cocos/gi/light-probe/light-probe.ts | 50 ++++--- cocos/render-scene/scene/model.ts | 14 +- cocos/scene-graph/scene-globals.ts | 19 ++- native/cocos/bindings/auto/jsb_gi_auto.cpp | 128 +++++++++++++---- native/cocos/gi/light-probe/Delaunay.cpp | 142 ++++++++++--------- native/cocos/gi/light-probe/Delaunay.h | 28 +++- native/cocos/gi/light-probe/LightProbe.cpp | 27 ++-- native/cocos/gi/light-probe/LightProbe.h | 20 ++- native/cocos/scene/Model.cpp | 12 +- 11 files changed, 397 insertions(+), 205 deletions(-) diff --git a/cocos/gi/light-probe/delaunay.ts b/cocos/gi/light-probe/delaunay.ts index eeecf374e75..33c41f76889 100644 --- a/cocos/gi/light-probe/delaunay.ts +++ b/cocos/gi/light-probe/delaunay.ts @@ -57,6 +57,13 @@ class Edge { this.vertex1 = v1; } + public set (tet: number, i: number, v0: number, v1: number) { + this.tetrahedron = tet; + this.index = i; + this.vertex0 = v0; + this.vertex1 = v1; + } + public isSame (other: Edge) { return ((this.vertex0 === other.vertex0 && this.vertex1 === other.vertex1) || (this.vertex0 === other.vertex1 && this.vertex1 === other.vertex0)); @@ -90,6 +97,18 @@ class Triangle { this.vertex3 = v3; } + public set (tet: number, i: number, v0: number, v1: number, v2: number, v3: number) { + this.tetrahedron = tet; + this.index = i; + this.vertex0 = v0; + this.vertex1 = v1; + this.vertex2 = v2; + this.vertex3 = v3; + + this.invalid = false; + this.isOuterFace = true; + } + public isSame (other: Triangle) { return ((this.vertex0 === other.vertex0 && this.vertex1 === other.vertex1 && this.vertex2 === other.vertex2) || (this.vertex0 === other.vertex0 && this.vertex1 === other.vertex2 && this.vertex2 === other.vertex1) @@ -173,7 +192,7 @@ export class Tetrahedron { } public isInCircumSphere (point: Vec3) { - return Vec3.squaredDistance(point, this.sphere.center) < this.sphere.radiusSquared - EPSILON; + return Vec3.squaredDistance(point, this.sphere.center) < this.sphere.radiusSquared - 0.01; // EPSILON } public contain (vertexIndex: number) { @@ -194,30 +213,27 @@ export class Delaunay { private _probes: Vertex[] = []; private _tetrahedrons: Tetrahedron[] = []; + private _triangles: Triangle[] = []; + private _edges: Edge[] = []; + public getProbes () { return this._probes; } public getTetrahedrons () { return this._tetrahedrons; } - public build (points: Vec3[]) { - this.reset(); - - const pointCount = points.length; - if (pointCount < 4) { - warnID(17000); - return; - } - - for (let i = 0; i < points.length; i++) { - this._probes.push(new Vertex(points[i])); - } + public build (probes: Vertex[]) { + this._probes = probes; + this.reset(); this.tetrahedralize(); this.computeAdjacency(); this.computeMatrices(); + + return this._tetrahedrons; } private reset () { - this._probes.length = 0; this._tetrahedrons.length = 0; + this._triangles.length = 0; + this._edges.length = 0; } /** @@ -292,40 +308,56 @@ export class Delaunay { return center; } + private addTriangle (index: number, tet: number, i: number, v0: number, v1: number, v2: number, v3: number) { + if (index < this._triangles.length) { + this._triangles[index].set(tet, i, v0, v1, v2, v3); + } else { + this._triangles.push(new Triangle(tet, i, v0, v1, v2, v3)); + } + } + + private addEdge (index: number, tet: number, i: number, v0: number, v1: number) { + if (index < this._edges.length) { + this._edges[index].set(tet, i, v0, v1); + } else { + this._edges.push(new Edge(tet, i, v0, v1)); + } + } + private addProbe (vertexIndex: number) { - let triangles: Triangle[] = []; const probe = this._probes[vertexIndex]; + let triangleIndex = 0; for (let i = 0; i < this._tetrahedrons.length; i++) { const tetrahedron = this._tetrahedrons[i]; if (tetrahedron.isInCircumSphere(probe.position)) { tetrahedron.invalid = true; - triangles.push(new Triangle(i, 0, tetrahedron.vertex1, tetrahedron.vertex3, tetrahedron.vertex2, tetrahedron.vertex0)); - triangles.push(new Triangle(i, 1, tetrahedron.vertex0, tetrahedron.vertex2, tetrahedron.vertex3, tetrahedron.vertex1)); - triangles.push(new Triangle(i, 2, tetrahedron.vertex0, tetrahedron.vertex3, tetrahedron.vertex1, tetrahedron.vertex2)); - triangles.push(new Triangle(i, 3, tetrahedron.vertex0, tetrahedron.vertex1, tetrahedron.vertex2, tetrahedron.vertex3)); + this.addTriangle(triangleIndex, i, 0, tetrahedron.vertex1, tetrahedron.vertex3, tetrahedron.vertex2, tetrahedron.vertex0); + this.addTriangle(triangleIndex + 1, i, 1, tetrahedron.vertex0, tetrahedron.vertex2, tetrahedron.vertex3, tetrahedron.vertex1); + this.addTriangle(triangleIndex + 2, i, 2, tetrahedron.vertex0, tetrahedron.vertex3, tetrahedron.vertex1, tetrahedron.vertex2); + this.addTriangle(triangleIndex + 3, i, 3, tetrahedron.vertex0, tetrahedron.vertex1, tetrahedron.vertex2, tetrahedron.vertex3); + triangleIndex += 4; } } - for (let i = 0; i < triangles.length; i++) { - for (let k = i + 1; k < triangles.length; k++) { - if (triangles[i].isSame(triangles[k])) { - triangles[i].invalid = true; - triangles[k].invalid = true; + for (let i = 0; i < triangleIndex; i++) { + for (let k = i + 1; k < triangleIndex; k++) { + if (this._triangles[i].isSame(this._triangles[k])) { + this._triangles[i].invalid = true; + this._triangles[k].invalid = true; } } } - // remove all duplicated triangles. - triangles = triangles.filter((triangle) => !triangle.invalid); - // remove containing tetrahedron this._tetrahedrons = this._tetrahedrons.filter((tetrahedron) => !tetrahedron.invalid); - for (let i = 0; i < triangles.length; i++) { - const triangle = triangles[i]; - this._tetrahedrons.push(new Tetrahedron(this, triangle.vertex0, triangle.vertex1, triangle.vertex2, vertexIndex)); + for (let i = 0; i < triangleIndex; i++) { + const triangle = this._triangles[i]; + if (!triangle.invalid) { + this._tetrahedrons.push(new Tetrahedron(this, triangle.vertex0, triangle.vertex1, triangle.vertex2, vertexIndex)); + } } } @@ -335,8 +367,6 @@ export class Delaunay { } private computeAdjacency () { - const triangles: Triangle[] = []; - const edges: Edge[] = []; const normal = new Vec3(0.0, 0.0, 0.0); const edge1 = new Vec3(0.0, 0.0, 0.0); const edge2 = new Vec3(0.0, 0.0, 0.0); @@ -344,32 +374,34 @@ export class Delaunay { const tetrahedronCount = this._tetrahedrons.length; + let triangleIndex = 0; for (let i = 0; i < this._tetrahedrons.length; i++) { const tetrahedron = this._tetrahedrons[i]; - triangles.push(new Triangle(i, 0, tetrahedron.vertex1, tetrahedron.vertex3, tetrahedron.vertex2, tetrahedron.vertex0)); - triangles.push(new Triangle(i, 1, tetrahedron.vertex0, tetrahedron.vertex2, tetrahedron.vertex3, tetrahedron.vertex1)); - triangles.push(new Triangle(i, 2, tetrahedron.vertex0, tetrahedron.vertex3, tetrahedron.vertex1, tetrahedron.vertex2)); - triangles.push(new Triangle(i, 3, tetrahedron.vertex0, tetrahedron.vertex1, tetrahedron.vertex2, tetrahedron.vertex3)); + this.addTriangle(triangleIndex, i, 0, tetrahedron.vertex1, tetrahedron.vertex3, tetrahedron.vertex2, tetrahedron.vertex0); + this.addTriangle(triangleIndex + 1, i, 1, tetrahedron.vertex0, tetrahedron.vertex2, tetrahedron.vertex3, tetrahedron.vertex1); + this.addTriangle(triangleIndex + 2, i, 2, tetrahedron.vertex0, tetrahedron.vertex3, tetrahedron.vertex1, tetrahedron.vertex2); + this.addTriangle(triangleIndex + 3, i, 3, tetrahedron.vertex0, tetrahedron.vertex1, tetrahedron.vertex2, tetrahedron.vertex3); + triangleIndex += 4; } - for (let i = 0; i < triangles.length; i++) { - for (let k = i + 1; k < triangles.length; k++) { - if (triangles[i].isSame(triangles[k])) { + for (let i = 0; i < triangleIndex; i++) { + for (let k = i + 1; k < triangleIndex; k++) { + if (this._triangles[i].isSame(this._triangles[k])) { // update adjacency between tetrahedrons - this._tetrahedrons[triangles[i].tetrahedron].neighbours[triangles[i].index] = triangles[k].tetrahedron; - this._tetrahedrons[triangles[k].tetrahedron].neighbours[triangles[k].index] = triangles[i].tetrahedron; - triangles[i].isOuterFace = false; - triangles[k].isOuterFace = false; + this._tetrahedrons[this._triangles[i].tetrahedron].neighbours[this._triangles[i].index] = this._triangles[k].tetrahedron; + this._tetrahedrons[this._triangles[k].tetrahedron].neighbours[this._triangles[k].index] = this._triangles[i].tetrahedron; + this._triangles[i].isOuterFace = false; + this._triangles[k].isOuterFace = false; break; } } - if (triangles[i].isOuterFace) { - const probe0 = this._probes[triangles[i].vertex0]; - const probe1 = this._probes[triangles[i].vertex1]; - const probe2 = this._probes[triangles[i].vertex2]; - const probe3 = this._probes[triangles[i].vertex3]; + if (this._triangles[i].isOuterFace) { + const probe0 = this._probes[this._triangles[i].vertex0]; + const probe1 = this._probes[this._triangles[i].vertex1]; + const probe2 = this._probes[this._triangles[i].vertex2]; + const probe3 = this._probes[this._triangles[i].vertex3]; Vec3.subtract(edge1, probe1.position, probe0.position); Vec3.subtract(edge2, probe2.position, probe0.position); @@ -387,33 +419,35 @@ export class Delaunay { Vec3.add(probe2.normal, probe2.normal, normal); // create an outer cell with normal facing out - const v0 = triangles[i].vertex0; - const v1 = negative > 0.0 ? triangles[i].vertex2 : triangles[i].vertex1; - const v2 = negative > 0.0 ? triangles[i].vertex1 : triangles[i].vertex2; + const v0 = this._triangles[i].vertex0; + const v1 = negative > 0.0 ? this._triangles[i].vertex2 : this._triangles[i].vertex1; + const v2 = negative > 0.0 ? this._triangles[i].vertex1 : this._triangles[i].vertex2; const tetrahedron = new Tetrahedron(this, v0, v1, v2); // update adjacency between tetrahedron and outer cell - tetrahedron.neighbours[3] = triangles[i].tetrahedron; - this._tetrahedrons[triangles[i].tetrahedron].neighbours[triangles[i].index] = this._tetrahedrons.length; + tetrahedron.neighbours[3] = this._triangles[i].tetrahedron; + this._tetrahedrons[this._triangles[i].tetrahedron].neighbours[this._triangles[i].index] = this._tetrahedrons.length; this._tetrahedrons.push(tetrahedron); } } // start from outer cell index + let edgeIndex = 0; for (let i = tetrahedronCount; i < this._tetrahedrons.length; i++) { const tetrahedron = this._tetrahedrons[i]; - edges.push(new Edge(i, 0, tetrahedron.vertex1, tetrahedron.vertex2)); - edges.push(new Edge(i, 1, tetrahedron.vertex2, tetrahedron.vertex0)); - edges.push(new Edge(i, 2, tetrahedron.vertex0, tetrahedron.vertex1)); + this.addEdge(edgeIndex, i, 0, tetrahedron.vertex1, tetrahedron.vertex2); + this.addEdge(edgeIndex + 1, i, 1, tetrahedron.vertex2, tetrahedron.vertex0); + this.addEdge(edgeIndex + 2, i, 2, tetrahedron.vertex0, tetrahedron.vertex1); + edgeIndex += 3; } - for (let i = 0; i < edges.length; i++) { - for (let k = i + 1; k < edges.length; k++) { - if (edges[i].isSame(edges[k])) { + for (let i = 0; i < edgeIndex; i++) { + for (let k = i + 1; k < edgeIndex; k++) { + if (this._edges[i].isSame(this._edges[k])) { // update adjacency between outer cells - this._tetrahedrons[edges[i].tetrahedron].neighbours[edges[i].index] = edges[k].tetrahedron; - this._tetrahedrons[edges[k].tetrahedron].neighbours[edges[k].index] = edges[i].tetrahedron; + this._tetrahedrons[this._edges[i].tetrahedron].neighbours[this._edges[i].index] = this._edges[k].tetrahedron; + this._tetrahedrons[this._edges[k].tetrahedron].neighbours[this._edges[k].index] = this._edges[i].tetrahedron; } } } diff --git a/cocos/gi/light-probe/light-probe-group.ts b/cocos/gi/light-probe/light-probe-group.ts index 4cf77a88eb6..ee2d9b8bf64 100644 --- a/cocos/gi/light-probe/light-probe-group.ts +++ b/cocos/gi/light-probe/light-probe-group.ts @@ -191,9 +191,9 @@ export class LightProbeGroup extends Component { this.onProbeChanged(); } - public onProbeChanged () { - if (this._probes.length > 0) { - this.node.scene.globals.lightProbeInfo.update(); + public onProbeChanged (updateTet = true, emitEvent = true) { + this.node.scene.globals.lightProbeInfo.update(updateTet); + if (emitEvent) { this.node.emit(NodeEventType.LIGHT_PROBE_CHANGED); } } diff --git a/cocos/gi/light-probe/light-probe.ts b/cocos/gi/light-probe/light-probe.ts index 73eb2eb0318..f9f781e4031 100644 --- a/cocos/gi/light-probe/light-probe.ts +++ b/cocos/gi/light-probe/light-probe.ts @@ -29,6 +29,8 @@ import { PolynomialSolver } from './polynomial-solver'; import { LightProbeInfo } from '../../scene-graph/scene-globals'; import { Vec3, Vec4, cclegacy, math } from '../../core'; import { SH } from './sh'; +import { EPSILON } from '../../core/math/utils'; +import { warnID } from '../../core/platform/debug'; @ccclass('cc.LightProbesData') export class LightProbesData { @@ -44,23 +46,31 @@ export class LightProbesData { return this._probes.length === 0 || this._tetrahedrons.length === 0; } - public available () { - return !this.empty() && this._probes[0].coefficients.length !== 0; + public reset () { + this._probes.length = 0; + this._tetrahedrons.length = 0; } - public build (points: Vec3[]) { - const delaunay = new Delaunay(); - delaunay.build(points); + public updateProbes (points: Vec3[]) { + this._probes.length = 0; - this._probes = delaunay.getProbes(); - this._tetrahedrons = delaunay.getTetrahedrons(); + const pointCount = points.length; + for (let i = 0; i < pointCount; i++) { + this._probes.push(new Vertex(points[i])); + } } - public getInterpolationSHCoefficients (position: Vec3, tetIndex: number, coefficients: Vec3[]) { - const weights = new Vec4(0.0, 0.0, 0.0, 0.0); - tetIndex = this.getInterpolationWeights(position, tetIndex, weights); - const length = SH.getBasisCount(); + public updateTetrahedrons () { + const delaunay = new Delaunay(); + this._tetrahedrons = delaunay.build(this._probes); + } + + public getInterpolationSHCoefficients (tetIndex: number, weights: Vec4, coefficients: Vec3[]) { + if (!this.hasCoefficients()) { + return false; + } + const length = SH.getBasisCount(); const tetrahedron = this._tetrahedrons[tetIndex]; const c0 = this._probes[tetrahedron.vertex0].coefficients; const c1 = this._probes[tetrahedron.vertex1].coefficients; @@ -85,10 +95,10 @@ export class LightProbesData { } } - return tetIndex; + return true; } - private getInterpolationWeights (position: Vec3, tetIndex: number, weights: Vec4) { + public getInterpolationWeights (position: Vec3, tetIndex: number, weights: Vec4) { const tetrahedronCount = this._tetrahedrons.length; if (tetIndex < 0 || tetIndex >= tetrahedronCount) { tetIndex = 0; @@ -126,6 +136,10 @@ export class LightProbesData { return tetIndex; } + private hasCoefficients () { + return !this.empty() && this._probes[0].coefficients.length !== 0; + } + private static getTriangleBarycentricCoord (p0: Vec3, p1: Vec3, p2: Vec3, position: Vec3) { const v1 = new Vec3(0.0, 0.0, 0.0); const v2 = new Vec3(0.0, 0.0, 0.0); @@ -135,7 +149,7 @@ export class LightProbesData { Vec3.subtract(v2, p2, p0); Vec3.cross(normal, v1, v2); - if (normal.lengthSqr() <= math.EPSILON) { + if (normal.lengthSqr() <= EPSILON) { return new Vec3(0.0, 0.0, 0.0); } @@ -325,16 +339,16 @@ export class LightProbes { this._updatePipeline(); } - public available () { + public empty () { if (!this._enabled) { - return false; + return true; } if (!this._data) { - return false; + return true; } - return this._data.available(); + return this._data.empty(); } protected _updatePipeline () { diff --git a/cocos/render-scene/scene/model.ts b/cocos/render-scene/scene/model.ts index 80ebdb85a56..c21182c4d31 100644 --- a/cocos/render-scene/scene/model.ts +++ b/cocos/render-scene/scene/model.ts @@ -617,7 +617,7 @@ export class Model { } const lightProbes = (legacyCC.director.root as Root).pipeline.pipelineSceneData.lightProbes; - if (!lightProbes || !lightProbes.available()) { + if (!lightProbes || lightProbes.empty()) { return false; } @@ -647,12 +647,18 @@ export class Model { } const coefficients: Vec3[] = []; - const lightProbes = (legacyCC.director.root as Root).pipeline.pipelineSceneData.lightProbes!; - this._tetrahedronIndex = lightProbes.data!.getInterpolationSHCoefficients(center, this._tetrahedronIndex, coefficients); - legacyCC.internal.SH.reduceRinging(coefficients, lightProbes.reduceRinging); + const weights = new Vec4(0.0, 0.0, 0.0, 0.0); + const lightProbes = (legacyCC.director.root as Root).pipeline.pipelineSceneData.lightProbes; + this._lastWorldBoundCenter.set(center); + this._tetrahedronIndex = lightProbes.data!.getInterpolationWeights(center, this._tetrahedronIndex, weights); + const result = lightProbes.data!.getInterpolationSHCoefficients(this._tetrahedronIndex, weights, coefficients); + if (!result) { + return; + } if (this._localSHData && this._localSHBuffer) { + legacyCC.internal.SH.reduceRinging(coefficients, lightProbes.reduceRinging); legacyCC.internal.SH.updateUBOData(this._localSHData, UBOSH.SH_LINEAR_CONST_R_OFFSET, coefficients); this._localSHBuffer.update(this._localSHData); } diff --git a/cocos/scene-graph/scene-globals.ts b/cocos/scene-graph/scene-globals.ts index 1ac9a9ee23d..1c85372f4d8 100644 --- a/cocos/scene-graph/scene-globals.ts +++ b/cocos/scene-graph/scene-globals.ts @@ -1215,7 +1215,7 @@ export class LightProbeInfo { return true; } - public update () { + public update (updateTet = true) { if (!legacyCC.internal.LightProbesData) { return; } @@ -1227,7 +1227,7 @@ export class LightProbeInfo { } } - const probes: Vec3[] = []; + const points: Vec3[] = []; for (let i = 0; i < this._lightProbeGroups.length; i++) { const group = this._lightProbeGroups[i]; if (!group.node) { @@ -1240,11 +1240,22 @@ export class LightProbeInfo { for (let j = 0; j < count; j++) { const position = new Vec3(0, 0, 0); Vec3.add(position, group.probes[j], worldPosition); - probes.push(position); + points.push(position); } } - this._data!.build(probes); + const pointCount = points.length; + if (pointCount < 4) { + warnID(17000); + this._data!.reset(); + return; + } + + this._data!.updateProbes(points); + + if (updateTet) { + this._data!.updateTetrahedrons(); + } } } legacyCC.internal.LightProbeInfo = LightProbeInfo; diff --git a/native/cocos/bindings/auto/jsb_gi_auto.cpp b/native/cocos/bindings/auto/jsb_gi_auto.cpp index 39c33f388fd..009e025ce1a 100644 --- a/native/cocos/bindings/auto/jsb_gi_auto.cpp +++ b/native/cocos/bindings/auto/jsb_gi_auto.cpp @@ -1369,8 +1369,9 @@ static bool js_cc_gi_Delaunay_build(se::State& s) const auto& args = s.args(); size_t argc = args.size(); cc::gi::Delaunay *arg1 = (cc::gi::Delaunay *) NULL ; - ccstd::vector< Vec3 > *arg2 = 0 ; - ccstd::vector< Vec3 > temp2 ; + ccstd::vector< cc::gi::Vertex > *arg2 = 0 ; + ccstd::vector< cc::gi::Vertex > temp2 ; + ccstd::vector< cc::gi::Tetrahedron > result; if(argc != 1) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); @@ -1380,10 +1381,15 @@ static bool js_cc_gi_Delaunay_build(se::State& s) SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE& ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Delaunay_build,2,SWIGTYPE_p_ccstd__vectorT_Vec3_t"); + SE_PRECONDITION2(ok, false, "Delaunay_build,2,SWIGTYPE_p_ccstd__vectorT_cc__gi__Vertex_t"); arg2 = &temp2; - (arg1)->build((ccstd::vector< Vec3 > const &)*arg2); + result = (arg1)->build((ccstd::vector< cc::gi::Vertex > const &)*arg2); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "Delaunay_build, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + return true; @@ -1460,7 +1466,7 @@ static bool js_cc_gi_LightProbesData_empty(se::State& s) } SE_BIND_FUNC(js_cc_gi_LightProbesData_empty) -static bool js_cc_gi_LightProbesData_available(se::State& s) +static bool js_cc_gi_LightProbesData_reset(se::State& s) { // js_function @@ -1468,7 +1474,6 @@ static bool js_cc_gi_LightProbesData_available(se::State& s) const auto& args = s.args(); size_t argc = args.size(); cc::gi::LightProbesData *arg1 = (cc::gi::LightProbesData *) NULL ; - bool result; if(argc != 0) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); @@ -1476,16 +1481,14 @@ static bool js_cc_gi_LightProbesData_available(se::State& s) } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (bool)((cc::gi::LightProbesData const *)arg1)->available(); - // out 5 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + (arg1)->reset(); return true; } -SE_BIND_FUNC(js_cc_gi_LightProbesData_available) +SE_BIND_FUNC(js_cc_gi_LightProbesData_reset) -static bool js_cc_gi_LightProbesData_build(se::State& s) +static bool js_cc_gi_LightProbesData_updateProbes(se::State& s) { // js_function @@ -1504,29 +1507,96 @@ static bool js_cc_gi_LightProbesData_build(se::State& s) SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE& ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "LightProbesData_build,2,SWIGTYPE_p_ccstd__vectorT_Vec3_t"); + SE_PRECONDITION2(ok, false, "LightProbesData_updateProbes,2,SWIGTYPE_p_ccstd__vectorT_Vec3_t"); arg2 = &temp2; - (arg1)->build((ccstd::vector< Vec3 > const &)*arg2); + (arg1)->updateProbes(*arg2); return true; } -SE_BIND_FUNC(js_cc_gi_LightProbesData_build) +SE_BIND_FUNC(js_cc_gi_LightProbesData_updateProbes) + +static bool js_cc_gi_LightProbesData_updateTetrahedrons(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbesData *arg1 = (cc::gi::LightProbesData *) NULL ; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + (arg1)->updateTetrahedrons(); + + + return true; +} +SE_BIND_FUNC(js_cc_gi_LightProbesData_updateTetrahedrons) static bool js_cc_gi_LightProbesData_getInterpolationSHCoefficients(se::State& s) { // js_function + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbesData *arg1 = (cc::gi::LightProbesData *) NULL ; + int32_t arg2 ; + Vec4 *arg3 = 0 ; + ccstd::vector< Vec3 > *arg4 = 0 ; + Vec4 temp3 ; + ccstd::vector< Vec3 > temp4 ; + bool result; + + if(argc != 3) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "LightProbesData_getInterpolationSHCoefficients,2,SWIGTYPE_int32_t"); + + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[1], &temp3, s.thisObject()); + SE_PRECONDITION2(ok, false, "LightProbesData_getInterpolationSHCoefficients,3,SWIGTYPE_p_Vec4"); + arg3 = &temp3; + + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[2], &temp4, s.thisObject()); + SE_PRECONDITION2(ok, false, "LightProbesData_getInterpolationSHCoefficients,4,SWIGTYPE_p_ccstd__vectorT_Vec3_t"); + arg4 = &temp4; + + result = (bool)((cc::gi::LightProbesData const *)arg1)->getInterpolationSHCoefficients(arg2,(Vec4 const &)*arg3,*arg4); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + + + return true; +} +SE_BIND_FUNC(js_cc_gi_LightProbesData_getInterpolationSHCoefficients) + +static bool js_cc_gi_LightProbesData_getInterpolationWeights(se::State& s) +{ + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); cc::gi::LightProbesData *arg1 = (cc::gi::LightProbesData *) NULL ; Vec3 *arg2 = 0 ; int32_t arg3 ; - ccstd::vector< Vec3 > *arg4 = 0 ; + Vec4 *arg4 = 0 ; Vec3 temp2 ; - ccstd::vector< Vec3 > temp4 ; + Vec4 temp4 ; int32_t result; if(argc != 3) { @@ -1537,30 +1607,30 @@ static bool js_cc_gi_LightProbesData_getInterpolationSHCoefficients(se::State& s SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE& ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "LightProbesData_getInterpolationSHCoefficients,2,SWIGTYPE_p_Vec3"); + SE_PRECONDITION2(ok, false, "LightProbesData_getInterpolationWeights,2,SWIGTYPE_p_Vec3"); arg2 = &temp2; // %typemap(in) SWIGTYPE value in ok &= sevalue_to_native(args[1], &arg3, s.thisObject()); - SE_PRECONDITION2(ok, false, "LightProbesData_getInterpolationSHCoefficients,3,SWIGTYPE_int32_t"); + SE_PRECONDITION2(ok, false, "LightProbesData_getInterpolationWeights,3,SWIGTYPE_int32_t"); // %typemap(in) SWIGTYPE& ok &= sevalue_to_native(args[2], &temp4, s.thisObject()); - SE_PRECONDITION2(ok, false, "LightProbesData_getInterpolationSHCoefficients,4,SWIGTYPE_p_ccstd__vectorT_Vec3_t"); + SE_PRECONDITION2(ok, false, "LightProbesData_getInterpolationWeights,4,SWIGTYPE_p_Vec4"); arg4 = &temp4; - result = ((cc::gi::LightProbesData const *)arg1)->getInterpolationSHCoefficients((Vec3 const &)*arg2,arg3,*arg4); + result = ((cc::gi::LightProbesData const *)arg1)->getInterpolationWeights((Vec3 const &)*arg2,arg3,*arg4); // %typemap(out) SWIGTYPE ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "LightProbesData_getInterpolationSHCoefficients, Error processing arguments"); + SE_PRECONDITION2(ok, false, "LightProbesData_getInterpolationWeights, Error processing arguments"); SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); return true; } -SE_BIND_FUNC(js_cc_gi_LightProbesData_getInterpolationSHCoefficients) +SE_BIND_FUNC(js_cc_gi_LightProbesData_getInterpolationWeights) static bool js_cc_gi_LightProbesData__probes_set(se::State& s) { @@ -1738,9 +1808,11 @@ bool js_register_cc_gi_LightProbesData(se::Object* obj) { cls->defineProperty("tetrahedrons", _SE(js_cc_gi_LightProbesData_tetrahedrons_get), _SE(js_cc_gi_LightProbesData_tetrahedrons_set)); cls->defineFunction("empty", _SE(js_cc_gi_LightProbesData_empty)); - cls->defineFunction("available", _SE(js_cc_gi_LightProbesData_available)); - cls->defineFunction("build", _SE(js_cc_gi_LightProbesData_build)); + cls->defineFunction("reset", _SE(js_cc_gi_LightProbesData_reset)); + cls->defineFunction("updateProbes", _SE(js_cc_gi_LightProbesData_updateProbes)); + cls->defineFunction("updateTetrahedrons", _SE(js_cc_gi_LightProbesData_updateTetrahedrons)); cls->defineFunction("getInterpolationSHCoefficients", _SE(js_cc_gi_LightProbesData_getInterpolationSHCoefficients)); + cls->defineFunction("getInterpolationWeights", _SE(js_cc_gi_LightProbesData_getInterpolationWeights)); @@ -1812,7 +1884,7 @@ static bool js_cc_gi_LightProbes_initialize(se::State& s) } SE_BIND_FUNC(js_cc_gi_LightProbes_initialize) -static bool js_cc_gi_LightProbes_available(se::State& s) +static bool js_cc_gi_LightProbes_empty(se::State& s) { // js_function @@ -1828,14 +1900,14 @@ static bool js_cc_gi_LightProbes_available(se::State& s) } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (bool)((cc::gi::LightProbes const *)arg1)->available(); + result = (bool)((cc::gi::LightProbes const *)arg1)->empty(); // out 5 ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); return true; } -SE_BIND_FUNC(js_cc_gi_LightProbes_available) +SE_BIND_FUNC(js_cc_gi_LightProbes_empty) static bool js_cc_gi_LightProbes__enabled_set(se::State& s) { @@ -2285,7 +2357,7 @@ bool js_register_cc_gi_LightProbes(se::Object* obj) { cls->defineProperty("data", _SE(js_cc_gi_LightProbes_data_get), _SE(js_cc_gi_LightProbes_data_set)); cls->defineFunction("initialize", _SE(js_cc_gi_LightProbes_initialize)); - cls->defineFunction("available", _SE(js_cc_gi_LightProbes_available)); + cls->defineFunction("empty", _SE(js_cc_gi_LightProbes_empty)); diff --git a/native/cocos/gi/light-probe/Delaunay.cpp b/native/cocos/gi/light-probe/Delaunay.cpp index 67166c76790..56d013a4852 100644 --- a/native/cocos/gi/light-probe/Delaunay.cpp +++ b/native/cocos/gi/light-probe/Delaunay.cpp @@ -62,28 +62,21 @@ Tetrahedron::Tetrahedron(const Delaunay *delaunay, int32_t v0, int32_t v1, int32 } } -void Delaunay::build(const ccstd::vector &points) { - reset(); - - const auto pointCount = points.size(); - if (pointCount < 4) { - debug::warnID(17000); - return; - } - - _probes.reserve(pointCount); - for (const auto &point : points) { - _probes.emplace_back(point); - } +ccstd::vector Delaunay::build(const ccstd::vector &probes) { + _probes = probes; + reset(); tetrahedralize(); computeAdjacency(); computeMatrices(); + + return _tetrahedrons; } void Delaunay::reset() { - _probes.clear(); _tetrahedrons.clear(); + _triangles.clear(); + _edges.clear(); } void Delaunay::tetrahedralize() { @@ -153,42 +146,58 @@ Vec3 Delaunay::initTetrahedron() { return center; } +void Delaunay::addTriangle(uint32_t index, int32_t tet, int32_t i, int32_t v0, int32_t v1, int32_t v2, int32_t v3) { + if (index < static_cast(_triangles.size())) { + _triangles[index].set(tet, i, v0, v1, v2, v3); + } else { + _triangles.emplace_back(tet, i, v0, v1, v2, v3); + } +} + +void Delaunay::addEdge(uint32_t index, int32_t tet, int32_t i, int32_t v0, int32_t v1) { + if (index < static_cast(_edges.size())) { + _edges[index].set(tet, i, v0, v1); + } else { + _edges.emplace_back(tet, i, v0, v1); + } +} + void Delaunay::addProbe(int32_t vertexIndex) { - ccstd::vector triangles; const auto &probe = _probes[vertexIndex]; - for (auto i = 0; i < _tetrahedrons.size(); i++) { + auto triangleIndex = 0; + for (auto i = 0; i < static_cast(_tetrahedrons.size()); i++) { auto &tetrahedron = _tetrahedrons[i]; if (tetrahedron.isInCircumSphere(probe.position)) { tetrahedron.invalid = true; - triangles.emplace_back(i, 0, tetrahedron.vertex1, tetrahedron.vertex3, tetrahedron.vertex2, tetrahedron.vertex0); - triangles.emplace_back(i, 1, tetrahedron.vertex0, tetrahedron.vertex2, tetrahedron.vertex3, tetrahedron.vertex1); - triangles.emplace_back(i, 2, tetrahedron.vertex0, tetrahedron.vertex3, tetrahedron.vertex1, tetrahedron.vertex2); - triangles.emplace_back(i, 3, tetrahedron.vertex0, tetrahedron.vertex1, tetrahedron.vertex2, tetrahedron.vertex3); + addTriangle(triangleIndex, i, 0, tetrahedron.vertex1, tetrahedron.vertex3, tetrahedron.vertex2, tetrahedron.vertex0); + addTriangle(triangleIndex + 1, i, 1, tetrahedron.vertex0, tetrahedron.vertex2, tetrahedron.vertex3, tetrahedron.vertex1); + addTriangle(triangleIndex + 2, i, 2, tetrahedron.vertex0, tetrahedron.vertex3, tetrahedron.vertex1, tetrahedron.vertex2); + addTriangle(triangleIndex + 3, i, 3, tetrahedron.vertex0, tetrahedron.vertex1, tetrahedron.vertex2, tetrahedron.vertex3); + triangleIndex += 4; } } - for (auto i = 0; i < triangles.size(); i++) { - for (auto k = i + 1; k < triangles.size(); k++) { - if (triangles[i].isSame(triangles[k])) { - triangles[i].invalid = true; - triangles[k].invalid = true; + for (auto i = 0; i < triangleIndex; i++) { + for (auto k = i + 1; k < triangleIndex; k++) { + if (_triangles[i].isSame(_triangles[k])) { + _triangles[i].invalid = true; + _triangles[k].invalid = true; } } } - // remove all duplicated triangles. - triangles.erase(std::remove_if(triangles.begin(), triangles.end(), - [](Triangle &triangle) { return triangle.invalid; }), - triangles.end()); // remove containing tetrahedron _tetrahedrons.erase(std::remove_if(_tetrahedrons.begin(), _tetrahedrons.end(), [](Tetrahedron &tetrahedron) { return tetrahedron.invalid; }), _tetrahedrons.end()); - for (const auto &triangle : triangles) { - _tetrahedrons.emplace_back(this, triangle.vertex0, triangle.vertex1, triangle.vertex2, vertexIndex); + for (auto i = 0; i < triangleIndex; i++) { + const auto &triangle = _triangles[i]; + if (!triangle.invalid) { + _tetrahedrons.emplace_back(this, triangle.vertex0, triangle.vertex1, triangle.vertex2, vertexIndex); + } } } @@ -200,39 +209,38 @@ void Delaunay::reorder(const Vec3 ¢er) { } void Delaunay::computeAdjacency() { - ccstd::vector triangles; - ccstd::vector edges; Vec3 normal; - const auto tetrahedronCount = _tetrahedrons.size(); - triangles.reserve(tetrahedronCount * 4); + const auto tetrahedronCount = static_cast(_tetrahedrons.size()); - for (auto i = 0; i < _tetrahedrons.size(); i++) { + auto triangleIndex = 0; + for (auto i = 0; i < static_cast(_tetrahedrons.size()); i++) { const auto &tetrahedron = _tetrahedrons[i]; - triangles.emplace_back(i, 0, tetrahedron.vertex1, tetrahedron.vertex3, tetrahedron.vertex2, tetrahedron.vertex0); - triangles.emplace_back(i, 1, tetrahedron.vertex0, tetrahedron.vertex2, tetrahedron.vertex3, tetrahedron.vertex1); - triangles.emplace_back(i, 2, tetrahedron.vertex0, tetrahedron.vertex3, tetrahedron.vertex1, tetrahedron.vertex2); - triangles.emplace_back(i, 3, tetrahedron.vertex0, tetrahedron.vertex1, tetrahedron.vertex2, tetrahedron.vertex3); + addTriangle(triangleIndex, i, 0, tetrahedron.vertex1, tetrahedron.vertex3, tetrahedron.vertex2, tetrahedron.vertex0); + addTriangle(triangleIndex + 1, i, 1, tetrahedron.vertex0, tetrahedron.vertex2, tetrahedron.vertex3, tetrahedron.vertex1); + addTriangle(triangleIndex + 2, i, 2, tetrahedron.vertex0, tetrahedron.vertex3, tetrahedron.vertex1, tetrahedron.vertex2); + addTriangle(triangleIndex + 3, i, 3, tetrahedron.vertex0, tetrahedron.vertex1, tetrahedron.vertex2, tetrahedron.vertex3); + triangleIndex += 4; } - for (auto i = 0; i < triangles.size(); i++) { - for (auto k = i + 1; k < triangles.size(); k++) { - if (triangles[i].isSame(triangles[k])) { + for (auto i = 0; i < triangleIndex; i++) { + for (auto k = i + 1; k < triangleIndex; k++) { + if (_triangles[i].isSame(_triangles[k])) { // update adjacency between tetrahedrons - _tetrahedrons[triangles[i].tetrahedron].neighbours[triangles[i].index] = triangles[k].tetrahedron; - _tetrahedrons[triangles[k].tetrahedron].neighbours[triangles[k].index] = triangles[i].tetrahedron; - triangles[i].isOuterFace = false; - triangles[k].isOuterFace = false; + _tetrahedrons[_triangles[i].tetrahedron].neighbours[_triangles[i].index] = _triangles[k].tetrahedron; + _tetrahedrons[_triangles[k].tetrahedron].neighbours[_triangles[k].index] = _triangles[i].tetrahedron; + _triangles[i].isOuterFace = false; + _triangles[k].isOuterFace = false; break; } } - if (triangles[i].isOuterFace) { - auto &probe0 = _probes[triangles[i].vertex0]; - auto &probe1 = _probes[triangles[i].vertex1]; - auto &probe2 = _probes[triangles[i].vertex2]; - auto &probe3 = _probes[triangles[i].vertex3]; + if (_triangles[i].isOuterFace) { + auto &probe0 = _probes[_triangles[i].vertex0]; + auto &probe1 = _probes[_triangles[i].vertex1]; + auto &probe2 = _probes[_triangles[i].vertex2]; + auto &probe3 = _probes[_triangles[i].vertex3]; auto edge1 = probe1.position - probe0.position; auto edge2 = probe2.position - probe0.position; @@ -250,33 +258,35 @@ void Delaunay::computeAdjacency() { probe2.normal += normal; // create an outer cell with normal facing out - auto v0 = triangles[i].vertex0; - auto v1 = negative > 0.0F ? triangles[i].vertex2 : triangles[i].vertex1; - auto v2 = negative > 0.0F ? triangles[i].vertex1 : triangles[i].vertex2; + auto v0 = _triangles[i].vertex0; + auto v1 = negative > 0.0F ? _triangles[i].vertex2 : _triangles[i].vertex1; + auto v2 = negative > 0.0F ? _triangles[i].vertex1 : _triangles[i].vertex2; Tetrahedron tetrahedron(this, v0, v1, v2); // update adjacency between tetrahedron and outer cell - tetrahedron.neighbours[3] = triangles[i].tetrahedron; - _tetrahedrons[triangles[i].tetrahedron].neighbours[triangles[i].index] = static_cast(_tetrahedrons.size()); + tetrahedron.neighbours[3] = _triangles[i].tetrahedron; + _tetrahedrons[_triangles[i].tetrahedron].neighbours[_triangles[i].index] = static_cast(_tetrahedrons.size()); _tetrahedrons.push_back(tetrahedron); } } // start from outer cell index - for (auto i = tetrahedronCount; i < _tetrahedrons.size(); i++) { + auto edgeIndex = 0; + for (auto i = tetrahedronCount; i < static_cast(_tetrahedrons.size()); i++) { const auto &tetrahedron = _tetrahedrons[i]; - edges.emplace_back(i, 0, tetrahedron.vertex1, tetrahedron.vertex2); - edges.emplace_back(i, 1, tetrahedron.vertex2, tetrahedron.vertex0); - edges.emplace_back(i, 2, tetrahedron.vertex0, tetrahedron.vertex1); + addEdge(edgeIndex, i, 0, tetrahedron.vertex1, tetrahedron.vertex2); + addEdge(edgeIndex + 1, i, 1, tetrahedron.vertex2, tetrahedron.vertex0); + addEdge(edgeIndex + 2, i, 2, tetrahedron.vertex0, tetrahedron.vertex1); + edgeIndex += 3; } - for (auto i = 0; i < edges.size(); i++) { - for (auto k = i + 1; k < edges.size(); k++) { - if (edges[i].isSame(edges[k])) { + for (auto i = 0; i < edgeIndex; i++) { + for (auto k = i + 1; k < edgeIndex; k++) { + if (_edges[i].isSame(_edges[k])) { // update adjacency between outer cells - _tetrahedrons[edges[i].tetrahedron].neighbours[edges[i].index] = edges[k].tetrahedron; - _tetrahedrons[edges[k].tetrahedron].neighbours[edges[k].index] = edges[i].tetrahedron; + _tetrahedrons[_edges[i].tetrahedron].neighbours[_edges[i].index] = _edges[k].tetrahedron; + _tetrahedrons[_edges[k].tetrahedron].neighbours[_edges[k].index] = _edges[i].tetrahedron; } } } diff --git a/native/cocos/gi/light-probe/Delaunay.h b/native/cocos/gi/light-probe/Delaunay.h index 204842fffa5..b50178aae61 100644 --- a/native/cocos/gi/light-probe/Delaunay.h +++ b/native/cocos/gi/light-probe/Delaunay.h @@ -59,6 +59,13 @@ struct Edge { : tetrahedron(tet), index(i), vertex0(v0), vertex1(v1) { } + inline void set(int32_t tet, int32_t i, int32_t v0, int32_t v1) { + tetrahedron = tet; + index = i; + vertex0 = v0; + vertex1 = v1; + } + inline bool isSame(const Edge &other) const { return ((vertex0 == other.vertex0 && vertex1 == other.vertex1) || (vertex0 == other.vertex1 && vertex1 == other.vertex0)); @@ -80,6 +87,18 @@ struct Triangle { : tetrahedron(tet), index(i), vertex0(v0), vertex1(v1), vertex2(v2), vertex3(v3) { } + inline void set(int32_t tet, int32_t i, int32_t v0, int32_t v1, int32_t v2, int32_t v3) { + tetrahedron = tet; + index = i; + vertex0 = v0; + vertex1 = v1; + vertex2 = v2; + vertex3 = v3; + + invalid = false; + isOuterFace = true; + } + inline bool isSame(const Triangle &other) const { return ((vertex0 == other.vertex0 && vertex1 == other.vertex1 && vertex2 == other.vertex2) || (vertex0 == other.vertex0 && vertex1 == other.vertex2 && vertex2 == other.vertex1) || @@ -118,7 +137,7 @@ struct Tetrahedron { Tetrahedron() = default; inline bool isInCircumSphere(const Vec3 &point) const { - return point.distanceSquared(sphere.center) < sphere.radiusSquared - mathutils::EPSILON; + return point.distanceSquared(sphere.center) < sphere.radiusSquared - 0.01F; // mathutils::EPSILON } inline bool contain(int32_t vertexIndex) const { @@ -143,12 +162,14 @@ class Delaunay { inline const ccstd::vector &getProbes() const { return _probes; } inline const ccstd::vector &getTetrahedrons() const { return _tetrahedrons; } - void build(const ccstd::vector &points); + ccstd::vector build(const ccstd::vector &probes); private: void reset(); void tetrahedralize(); // Bowyer-Watson algorithm Vec3 initTetrahedron(); + void addTriangle(uint32_t index, int32_t tet, int32_t i, int32_t v0, int32_t v1, int32_t v2, int32_t v3); + void addEdge(uint32_t index, int32_t tet, int32_t i, int32_t v0, int32_t v1); void addProbe(int32_t vertexIndex); void reorder(const Vec3 ¢er); void computeAdjacency(); @@ -159,6 +180,9 @@ class Delaunay { ccstd::vector _probes; ccstd::vector _tetrahedrons; + ccstd::vector _triangles; + ccstd::vector _edges; + CC_DISALLOW_COPY_MOVE_ASSIGN(Delaunay); }; diff --git a/native/cocos/gi/light-probe/LightProbe.cpp b/native/cocos/gi/light-probe/LightProbe.cpp index c78cae80336..de9102175d4 100644 --- a/native/cocos/gi/light-probe/LightProbe.cpp +++ b/native/cocos/gi/light-probe/LightProbe.cpp @@ -34,17 +34,26 @@ namespace cc { namespace gi { -void LightProbesData::build(const ccstd::vector &points) { - Delaunay delaunay; - delaunay.build(points); +void LightProbesData::updateProbes(ccstd::vector &points) { + _probes.clear(); + + auto pointCount = points.size(); + _probes.reserve(pointCount); + for (auto i = 0; i < pointCount; i++) { + _probes.emplace_back(points[i]); + } +} - _probes = delaunay.getProbes(); - _tetrahedrons = delaunay.getTetrahedrons(); +void LightProbesData::updateTetrahedrons() { + Delaunay delaunay; + _tetrahedrons = delaunay.build(_probes); } -int32_t LightProbesData::getInterpolationSHCoefficients(const Vec3 &position, int32_t tetIndex, ccstd::vector &coefficients) const { - Vec4 weights{0.0F, 0.0F, 0.0F, 0.0F}; - tetIndex = getInterpolationWeights(position, tetIndex, weights); +bool LightProbesData::getInterpolationSHCoefficients(int32_t tetIndex, const Vec4 &weights, ccstd::vector &coefficients) const { + if (!hasCoefficients()) { + return false; + } + const auto length = SH::getBasisCount(); coefficients.resize(length); @@ -65,7 +74,7 @@ int32_t LightProbesData::getInterpolationSHCoefficients(const Vec3 &position, in } } - return tetIndex; + return true; } int32_t LightProbesData::getInterpolationWeights(const Vec3 &position, int32_t tetIndex, Vec4 &weights) const { diff --git a/native/cocos/gi/light-probe/LightProbe.h b/native/cocos/gi/light-probe/LightProbe.h index 7ddf6f31d9c..ae8a41c85ce 100644 --- a/native/cocos/gi/light-probe/LightProbe.h +++ b/native/cocos/gi/light-probe/LightProbe.h @@ -49,12 +49,18 @@ class LightProbesData { inline void setTetrahedrons(const ccstd::vector &tetrahedrons) { _tetrahedrons = tetrahedrons; } inline bool empty() const { return _probes.empty() || _tetrahedrons.empty(); } - inline bool available() const { return !empty() && !_probes[0].coefficients.empty(); } - void build(const ccstd::vector &points); - int32_t getInterpolationSHCoefficients(const Vec3 &position, int32_t tetIndex, ccstd::vector &coefficients) const; + inline void reset() { + _probes.clear(); + _tetrahedrons.clear(); + } + void updateProbes(ccstd::vector &points); + void updateTetrahedrons(); -private: + bool getInterpolationSHCoefficients(int32_t tetIndex, const Vec4 &weights, ccstd::vector &coefficients) const; int32_t getInterpolationWeights(const Vec3 &position, int32_t tetIndex, Vec4 &weights) const; + +private: + inline bool hasCoefficients() const { return !empty() && !_probes[0].coefficients.empty(); } static Vec3 getTriangleBarycentricCoord(const Vec3 &p0, const Vec3 &p1, const Vec3 &p2, const Vec3 &position); void getBarycentricCoord(const Vec3 &position, const Tetrahedron &tetrahedron, Vec4 &weights) const; void getTetrahedronBarycentricCoord(const Vec3 &position, const Tetrahedron &tetrahedron, Vec4 &weights) const; @@ -72,12 +78,12 @@ class LightProbes final { void initialize(LightProbeInfo *info); - inline bool available() const { + inline bool empty() const { if (!_enabled) { - return false; + return true; } - return _data.available(); + return _data.empty(); } inline void setEnabled(bool val) { diff --git a/native/cocos/scene/Model.cpp b/native/cocos/scene/Model.cpp index f982eb1e5d7..988935e8619 100644 --- a/native/cocos/scene/Model.cpp +++ b/native/cocos/scene/Model.cpp @@ -325,7 +325,7 @@ bool Model::isLightProbeAvailable() const { const auto *pipeline = Root::getInstance()->getPipeline(); const auto *lightProbes = pipeline->getPipelineSceneData()->getLightProbes(); - if (!lightProbes->available()) { + if (!lightProbes || lightProbes->empty()) { return false; } @@ -349,13 +349,19 @@ void Model::updateSHUBOs() { #endif ccstd::vector coefficients; + Vec4 weights(0.0F, 0.0F, 0.0F, 0.0F); const auto *pipeline = Root::getInstance()->getPipeline(); const auto *lightProbes = pipeline->getPipelineSceneData()->getLightProbes(); - _tetrahedronIndex = lightProbes->getData().getInterpolationSHCoefficients(center, _tetrahedronIndex, coefficients); - gi::SH::reduceRinging(coefficients, lightProbes->getReduceRinging()); + _lastWorldBoundCenter.set(center); + _tetrahedronIndex = lightProbes->getData().getInterpolationWeights(center, _tetrahedronIndex, weights); + bool result = lightProbes->getData().getInterpolationSHCoefficients(_tetrahedronIndex, weights, coefficients); + if (!result) { + return; + } if (!_localSHData.empty() && _localSHBuffer) { + gi::SH::reduceRinging(coefficients, lightProbes->getReduceRinging()); gi::SH::updateUBOData(_localSHData, pipeline::UBOSH::SH_LINEAR_CONST_R_OFFSET, coefficients); _localSHBuffer->update(_localSHData.buffer()->getData()); } From 1aa9e1ee47201742d55752b8f29c1efec0232079 Mon Sep 17 00:00:00 2001 From: qinyuxiong Date: Thu, 27 Oct 2022 12:02:12 +0800 Subject: [PATCH 092/829] Fix crash if using cc.Line component (#13160) --- native/cocos/bindings/manual/jsb_scene_manual.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/native/cocos/bindings/manual/jsb_scene_manual.cpp b/native/cocos/bindings/manual/jsb_scene_manual.cpp index f4f352cdc0f..a554d7ace62 100644 --- a/native/cocos/bindings/manual/jsb_scene_manual.cpp +++ b/native/cocos/bindings/manual/jsb_scene_manual.cpp @@ -25,6 +25,7 @@ #include "jsb_scene_manual.h" #include "bindings/auto/jsb_scene_auto.h" +#include "bindings/auto/jsb_gfx_auto.h" #include "core/Root.h" #include "core/event/EventTypesToJS.h" #include "core/scene-graph/Node.h" From 0494e14e4d55e1e87ddf1431feb2f94a408a989f Mon Sep 17 00:00:00 2001 From: minggo Date: Thu, 27 Oct 2022 15:01:01 +0800 Subject: [PATCH 093/829] fix import path (#13161) --- cocos/scene-graph/scene.jsb.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cocos/scene-graph/scene.jsb.ts b/cocos/scene-graph/scene.jsb.ts index 9ecb43ac4db..a5a983bf981 100644 --- a/cocos/scene-graph/scene.jsb.ts +++ b/cocos/scene-graph/scene.jsb.ts @@ -23,7 +23,7 @@ import { ccclass, editable, serializable } from 'cc.decorator'; import { EDITOR, TEST } from "internal:constants"; import { legacyCC } from '../core/global-exports'; import { Node } from './node'; -import { applyTargetOverrides, expandNestedPrefabInstanceNode } from "../core/utils/prefab/utils"; +import { applyTargetOverrides, expandNestedPrefabInstanceNode } from "./prefab/utils"; import { assert } from "../core/platform/debug"; import { updateChildrenForDeserialize } from '../core/utils/jsb-utils'; From 120d7fe959f5d05c9013496e84855322755c3872 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E5=85=B5?= <49358166+xubing0906@users.noreply.github.com> Date: Thu, 27 Oct 2022 15:36:56 +0800 Subject: [PATCH 094/829] add reflection probe (#13155) --- @types/editor-extends.d.ts | 2 + cocos/3d/framework/mesh-renderer.ts | 125 ++++- cocos/misc/index.ts | 1 + cocos/misc/reflection-probe-component.ts | 365 +++++++++++++ cocos/render-scene/scene/camera.ts | 1 + cocos/render-scene/scene/index.ts | 1 + cocos/render-scene/scene/model.ts | 101 +++- cocos/render-scene/scene/reflection-probe.ts | 507 ++++++++++++++++++ .../custom/web-descriptor-hierarchy.ts | 4 + cocos/rendering/define.ts | 27 + cocos/rendering/forward/forward-pipeline.ts | 5 + cocos/rendering/index.ts | 3 + .../reflection-probe/reflection-probe-flow.ts | 102 ++++ .../reflection-probe-stage.ts | 128 +++++ cocos/rendering/reflectionProbeManager.ts | 256 +++++++++ .../render-reflection-probe-queue.ts | 148 +++++ cocos/rendering/scene-culling.ts | 28 + cocos/scene-graph/scene.ts | 14 + .../uniforms/cc-reflection-probe.chunk | 12 + .../uniforms/cc-reflection-probe.chunk.meta | 9 + .../chunks/legacy/shading-standard-base.chunk | 48 +- .../legacy/standard-surface-entry.chunk | 3 + .../main-functions/misc/sky-fs.chunk | 4 + .../chunks/surfaces/includes/common-fs.chunk | 1 + editor/assets/effects/pipeline/skybox.effect | 6 +- .../assets/effects/surfaces/standard.effect | 18 + .../effects/surfaces/standard.effect.meta | 1 + editor/inspector/components.js | 1 + .../inspector/components/reflection-probe.js | 28 + 29 files changed, 1937 insertions(+), 12 deletions(-) create mode 100644 cocos/misc/reflection-probe-component.ts create mode 100644 cocos/render-scene/scene/reflection-probe.ts create mode 100644 cocos/rendering/reflection-probe/reflection-probe-flow.ts create mode 100644 cocos/rendering/reflection-probe/reflection-probe-stage.ts create mode 100644 cocos/rendering/reflectionProbeManager.ts create mode 100644 cocos/rendering/render-reflection-probe-queue.ts create mode 100644 editor/assets/chunks/builtin/uniforms/cc-reflection-probe.chunk create mode 100644 editor/assets/chunks/builtin/uniforms/cc-reflection-probe.chunk.meta create mode 100644 editor/inspector/components/reflection-probe.js diff --git a/@types/editor-extends.d.ts b/@types/editor-extends.d.ts index 174adb210f2..48b89c7c219 100644 --- a/@types/editor-extends.d.ts +++ b/@types/editor-extends.d.ts @@ -51,6 +51,8 @@ interface EditorExtendsComponent { interface EditorExtendsAsset { queryAssetInfo(uuid: string, callback: Function): any; getAssetInfoFromUrl(url: string): EditorAssetInfo; + saveDataToImage(buffer: Uint8Array | null, width: number, height: number, sceneName: string, fileName: string): any; + bakeReflectionProbe(files: string[], isHDR: boolean, sceneName:string, probeID: number, callback: Function): any } interface EditorExtendsUuid { diff --git a/cocos/3d/framework/mesh-renderer.ts b/cocos/3d/framework/mesh-renderer.ts index 9bca2d4905a..e21d00001f4 100644 --- a/cocos/3d/framework/mesh-renderer.ts +++ b/cocos/3d/framework/mesh-renderer.ts @@ -26,7 +26,7 @@ import { ccclass, help, executeInEditMode, executionOrder, menu, tooltip, visible, type, formerlySerializedAs, serializable, editable, disallowAnimation } from 'cc.decorator'; import { JSB } from 'internal:constants'; -import { Texture2D } from '../../asset/assets'; +import { Texture2D, TextureCube } from '../../asset/assets'; import { Material } from '../../asset/assets/material'; import { Mesh } from '../assets/mesh'; import { Vec4, Enum, cclegacy, CCBoolean, CCFloat } from '../../core'; @@ -34,13 +34,15 @@ import { scene } from '../../render-scene'; import { MorphModel } from '../models/morph-model'; import { Root } from '../../root'; import { MobilityMode, TransformBit } from '../../scene-graph/node-enum'; -import { builtinResMgr } from '../../asset/asset-manager'; import { ModelRenderer } from '../../misc/model-renderer'; import { MorphRenderingInstance } from '../assets/morph-rendering'; import { assertIsTrue } from '../../core/data/utils/asserts'; import { property } from '../../core/data/class-decorator'; import { NodeEventType } from '../../scene-graph/node-event'; +import { Texture } from '../../gfx'; +import { builtinResMgr } from '../../asset/asset-manager/builtin-res-mgr'; +const USE_REFLECTION_PROBE = 'USE_REFLECTION_PROBE'; /** * @en Shadow projection mode. * @zh 阴影投射方式。 @@ -75,6 +77,28 @@ const ModelShadowReceivingMode = Enum({ ON: 1, }); +/** + * @en Reflection probe type + * @zh 反射探针类型。 + */ +export const ReflectionProbeType = Enum({ + /** + * @en Use the default skybox. + * @zh 使用默认天空盒 + */ + NONE: 0, + /** + * @en Cubemap generate by probe + * @zh Probe烘焙的cubemap + */ + BAKED_CUBEMAP: 1, + /** + * @en Realtime planar reflection + * @zh 实时平面反射 + */ + PLANAR_REFLECTION: 2, +}); + /** * @en Model's light map settings. * @zh 模型光照图设置 @@ -201,6 +225,17 @@ export class MeshRenderer extends ModelRenderer { @serializable protected _useLightProbe = false; + @serializable + protected _bakeToReflectionProbe = true; + + @serializable + protected _reflectionProbeType = ReflectionProbeType.NONE; + + @serializable + public _probeCubemap: TextureCube | null = null; + + protected _probePlanarmap: Texture | null = null; + // @serializable private _subMeshShapesWeights: number[][] = []; @@ -318,6 +353,45 @@ export class MeshRenderer extends ModelRenderer { this._updateUseLightProbe(); } + /** + * @en Whether the model can be render by the reflection probe + * @zh 模型是否能被反射探针渲染 + */ + @type(CCBoolean) + get bakeToReflectionProbe () { + return this._bakeToReflectionProbe; + } + + set bakeToReflectionProbe (val) { + this._bakeToReflectionProbe = val; + this._updateBakeToProbe(); + } + + /** + * @en Used to set whether to use the reflection probe or set probe's type. + * @zh 用于设置是否使用反射探针或者设置反射探针的类型。 + */ + @type(ReflectionProbeType) + get reflectionProbe () { + return this._reflectionProbeType; + } + + set reflectionProbe (val) { + this._reflectionProbeType = val; + for (let i = 0; i < this._materials.length; i++) { + const mat = this.getMaterialInstance(i)!; + mat.recompileShaders({ USE_REFLECTION_PROBE: this._reflectionProbeType }); + } + if (this._model) { + this._model.reflectionProbeType = this._reflectionProbeType; + if (this._reflectionProbeType === ReflectionProbeType.BAKED_CUBEMAP) { + this._model.updateReflctionProbeCubemap(this._probeCubemap!); + } else if (this._reflectionProbeType === ReflectionProbeType.PLANAR_REFLECTION) { + this._model.updateReflctionProbePlanarMap(this._probePlanarmap!); + } + } + } + /** * @en Gets the model in [[RenderScene]]. * @zh 获取渲染场景 [[RenderScene]] 中对应的模型。 @@ -373,6 +447,8 @@ export class MeshRenderer extends ModelRenderer { this._updateShadowBias(); this._updateShadowNormalBias(); this._updateUseLightProbe(); + this._updateBakeToProbe(); + this._updateReflectionProbeRenderInfo(); } // Redo, Undo, Prefab restore, etc. @@ -386,6 +462,8 @@ export class MeshRenderer extends ModelRenderer { this._updateShadowBias(); this._updateShadowNormalBias(); this._updateUseLightProbe(); + this._updateBakeToProbe(); + this._updateReflectionProbeRenderInfo(); } public onEnable () { @@ -398,6 +476,8 @@ export class MeshRenderer extends ModelRenderer { this._updateReceiveShadow(); this._updateShadowBias(); this._updateShadowNormalBias(); + this._updateBakeToProbe(); + this._updateReflectionProbeRenderInfo(); this._onUpdateLocalShadowBias(); this._updateUseLightProbe(); this._attachToScene(); @@ -528,6 +608,28 @@ export class MeshRenderer extends ModelRenderer { this._onUpdateLightingmap(); } + public updateProbeCubemap (cubeMap: TextureCube | null) { + this._probeCubemap = cubeMap; + if (this.model !== null) { + this.model.updateReflctionProbeCubemap(this._probeCubemap!); + } + } + public updateProbePlanarMap (planarMap: Texture | null) { + this._probePlanarmap = planarMap; + if (this.model !== null) { + this.model.updateReflctionProbePlanarMap(this._probePlanarmap!); + } + } + + protected _onUpdateReflectionProbeTexture () { + if (this.model === null) return; + if (this.reflectionProbe === ReflectionProbeType.BAKED_CUBEMAP) { + this.model.updateReflctionProbeCubemap(this._probeCubemap!); + } else if (this.reflectionProbe === ReflectionProbeType.PLANAR_REFLECTION) { + this.model.updateReflctionProbePlanarMap(this._probePlanarmap!); + } + } + protected _updateModels () { if (!this.enabledInHierarchy) { return; @@ -554,6 +656,7 @@ export class MeshRenderer extends ModelRenderer { this._updateModelParams(); this._onUpdateLightingmap(); this._onUpdateLocalShadowBias(); + this._onUpdateReflectionProbeTexture(); } } @@ -651,6 +754,7 @@ export class MeshRenderer extends ModelRenderer { this._model.setSubModelMaterial(idx, material); this._onUpdateLightingmap(); this._onUpdateLocalShadowBias(); + this._updateReflectionProbeRenderInfo(); } protected _onMeshChanged (old: Mesh | null) { @@ -732,6 +836,23 @@ export class MeshRenderer extends ModelRenderer { return false; } + protected _updateBakeToProbe () { + if (!this._model) { return; } + this._model.bakeToReflectionProbe = this._bakeToReflectionProbe; + } + + protected _updateReflectionProbeRenderInfo () { + if (this.reflectionProbe !== ReflectionProbeType.NONE) { + for (let i = 0; i < this._materials.length; i++) { + const mat = this.getMaterialInstance(i); + if (mat) { + mat.recompileShaders({ USE_REFLECTION_PROBE: this.reflectionProbe }); + } + } + } + this._onUpdateReflectionProbeTexture(); + } + private _watchMorphInMesh () { if (this._morphInstance) { this._morphInstance.destroy(); diff --git a/cocos/misc/index.ts b/cocos/misc/index.ts index ab0e35c6457..04b26fe8985 100644 --- a/cocos/misc/index.ts +++ b/cocos/misc/index.ts @@ -30,6 +30,7 @@ export { ModelRenderer } from './model-renderer'; export { Renderer } from './renderer'; export { MissingScript } from './missing-script'; export { PrefabLink } from './prefab-link'; +export { ReflectionProbe } from './reflection-probe-component'; /** deprecated */ export * from './deprecated'; export { LOD, LODGroup } from './lodgroup-component'; diff --git a/cocos/misc/reflection-probe-component.ts b/cocos/misc/reflection-probe-component.ts new file mode 100644 index 00000000000..7b9f6f15bbd --- /dev/null +++ b/cocos/misc/reflection-probe-component.ts @@ -0,0 +1,365 @@ +/* + Copyright (c) 2020 Xiamen Yaji Software Co., Ltd. + + https://www.cocos.com/ + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated engine source code (the "Software"), a limited, + worldwide, royalty-free, non-assignable, revocable and non-exclusive license + to use Cocos Creator solely to develop games on your target platforms. You shall + not use Cocos Creator software for developing other software or tools that's + used for developing games. You are not granted to publish, distribute, + sublicense, and/or sell copies of Cocos Creator. + + The software or tools in this License Agreement are licensed, not sold. + Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + */ +import { ccclass, executeInEditMode, menu, playOnFocus, readOnly, serializable, tooltip, type, visible } from 'cc.decorator'; +import { EDITOR } from 'internal:constants'; +import { CCBoolean, Color, Enum, Vec3 } from '../core'; +import { BufferTextureCopy } from '../gfx/base/define'; + +import { deviceManager } from '../gfx'; +import { Component } from '../scene-graph/component'; +import { CAMERA_DEFAULT_MASK } from '../rendering/define'; +import { RenderTexture, TextureCube } from '../asset/assets'; +import { ReflectionProbeManager } from '../rendering/reflectionProbeManager'; +import { Layers } from '../scene-graph/layers'; +import { legacyCC } from '../core/global-exports'; +import { Camera } from './camera-component'; +import { scene } from '../render-scene'; +import { ProbeClearFlag, ProbeType } from '../render-scene/scene/reflection-probe'; + +export const ProbeResolution = Enum({ + /** + * @zh 分辨率 128 * 128。 + * @en renderTexture resolution 128 * 128. + * @readonly + */ + Low_128x128: 128, + /** + * @zh 分辨率 256 * 256。 + * @en renderTexture resolution 256 * 256. + * @readonly + */ + Low_256x256: 256, + + /** + * @zh 分辨率 512 * 512。 + * @en renderTexture resolution 512 * 512. + * @readonly + */ + Medium_512x512: 512, + + /** + * @zh 分辨率 1024 * 1024。 + * @en renderTexture resolution 1024 * 1024. + * @readonly + */ + High_1024x1024: 1024, + + /** + * @zh 分辨率 2048 * 2048。 + * @en renderTexture resolution 2048 * 2048. + * @readonly + */ + Ultra_2048x2048: 2048, +}); +@ccclass('cc.ReflectionProbe') +@menu('Rendering/ReflectionProbe') +@executeInEditMode +@playOnFocus +export class ReflectionProbe extends Component { + @serializable + protected _resolution = 512; + @serializable + protected _clearFlag = ProbeClearFlag.SKYBOX; + + @serializable + protected _backgroundColor = new Color(0, 0, 0, 255); + + @serializable + protected _visibility = CAMERA_DEFAULT_MASK; + + @serializable + protected _probeType = ProbeType.CUBE; + + @serializable + protected _cubemap: TextureCube | null = null; + + @serializable + protected _size = new Vec3(); + + @serializable + protected _sourceCamera: Camera | null = null; + + @serializable + private _probeId = -1; + + protected _probe: scene.ReflectionProbe | null = null; + + /** + * @en + * Gets or sets the size of the box + * @zh + * 获取或设置包围盒的大小。 + */ + set size (value) { + this._size = value; + this.probe.size = this._size; + } + get size () { + return this._size; + } + + /** + * @en Environment reflection or plane reflection. + * @zh 设置探针类型,环境反射或者平面反射 + */ + @type(ProbeType) + set probeType (value: number) { + this._probeType = value; + this.probe.probeType = value; + + if (this._probeType === ProbeType.CUBE) { + this.probe.switchProbeType(value); + } else if (!this._sourceCamera) { + console.error('the reflection camera is invalid, please set the reflection camera'); + } else { + this.probe.switchProbeType(value, this._sourceCamera.camera); + } + } + get probeType () { + return this._probeType; + } + + /** + * @en set render texture size + * @zh 设置渲染纹理大小 + */ + @type(ProbeResolution) + set resolution (value: number) { + this._resolution = value; + this.probe.resolution = value; + } + get resolution () { + return this._resolution; + } + + /** + * @en Clearing flags of the camera, specifies which part of the framebuffer will be actually cleared every frame. + * @zh 相机的缓冲清除标志位,指定帧缓冲的哪部分要每帧清除。 + */ + @type(ProbeClearFlag) + set clearFlag (value: number) { + this._clearFlag = value; + this.probe.clearFlag = this._clearFlag; + } + get clearFlag () { + return this._clearFlag; + } + + /** + * @en Clearing color of the camera. + * @zh 相机的颜色缓冲默认值。 + */ + @visible(function (this: ReflectionProbe) { return this._clearFlag === ProbeClearFlag.SOLID_COLOR; }) + @type(Color) + set backgroundColor (val: Color) { + this._backgroundColor = val; + this.probe.backgroundColor = this._backgroundColor; + } + get backgroundColor () { + return this._backgroundColor; + } + + /** + * @en Visibility mask, declaring a set of node layers that will be visible to this camera. + * @zh 可见性掩码,声明在当前相机中可见的节点层级集合。 + */ + @type(Layers.BitMask) + @tooltip('i18n:camera.visibility') + get visibility () { + return this._visibility; + } + set visibility (val) { + this._visibility = val; + this.probe.visibility = this._visibility; + } + + /** + * @en The camera to render planar reflections, specified by the user + * @zh 需要渲染平面反射的相机,由用户指定 + */ + @visible(function (this: ReflectionProbe) { return this.probeType === ProbeType.PLANAR; }) + @type(Camera) + set sourceCamera (camera: Camera) { + this._sourceCamera = camera; + if (camera) { + this.visibility = camera.visibility; + this.clearFlag = camera.clearFlags; + this.backgroundColor = camera.clearColor; + if (this.probeType === ProbeType.PLANAR) { + this.probe.switchProbeType(this.probeType, camera.camera); + } + } + } + get sourceCamera () { + return this._sourceCamera!; + } + + set cubemap (val: TextureCube) { + this._cubemap = val; + this.probe.cubemap = val; + } + + get probe () { + return this._probe!; + } + + public onLoad () { + if (EDITOR || this.probeType === ProbeType.PLANAR) { + this._createProbe(); + } + } + + onEnable () { + if (EDITOR || this.probeType === ProbeType.PLANAR) { + ReflectionProbeManager.probeManager.register(this._probe!); + } + } + onDisable () { + if (EDITOR || this.probeType === ProbeType.PLANAR) { + ReflectionProbeManager.probeManager.unregister(this._probe!); + } + } + + public start () { + if (EDITOR) { + this.probe.initBakedTextures(); + } + if (this._sourceCamera && this.probeType === ProbeType.PLANAR) { + this.probe.switchProbeType(this.probeType, this.sourceCamera.camera); + } + } + + public onDestroy () { + this.probe.destroy(); + } + + public update (dt: number) { + if (!EDITOR && this.probeType === ProbeType.CUBE) return; + if (this.node.hasChangedFlags) { + this.probe.updateBoundingBox(); + ReflectionProbeManager.probeManager.updateModes(this.probe); + } + } + + public async bakeCubemap () { + if (this.probeType === ProbeType.CUBE) { + await this.captureCube(); + } + } + + /* eslint-disable no-await-in-loop */ + /** + * @en Render the six faces of the Probe and use the tool to generate a cubemap and save it to the asset directory. + * @zh 渲染Probe的6个面,并且使用工具生成cubemap保存至asset目录。 + */ + public async captureCube () { + await this.probe.captureCubemap(); + //Save rendertexture data to the resource directory + const caps = (legacyCC.director.root).device.capabilities; + const files: string[] = []; + for (let faceIdx = 0; faceIdx < 6; faceIdx++) { + const fileName = `capture_${faceIdx}.png`; + files.push(fileName); + let pixelData = this._readPixels(this.probe.bakedCubeTextures[faceIdx]); + if (caps.clipSpaceMinZ === -1) { + pixelData = this._flipImage(pixelData, this._resolution, this._resolution); + } + await EditorExtends.Asset.saveDataToImage(pixelData, this._resolution, this._resolution, this.node.scene.name, fileName); + } + //use the tool to generate a cubemap and save to asset directory + const isHDR = (legacyCC.director.root).pipeline.pipelineSceneData.isHDR; + await EditorExtends.Asset.bakeReflectionProbe(files, isHDR, this.node.scene.name, this.probe.getProbeId(), (assert: any) => { + this.cubemap = assert; + }); + if (this._cubemap) { + ReflectionProbeManager.probeManager.updateBakedCubemap(this.probe); + } + } + + private _createProbe () { + if (this._probeId < 0 || ReflectionProbeManager.probeManager.exists(this._probeId)) { + this._probeId = this.node.scene.getNewReflectionProbeId(); + } + this._probe = new scene.ReflectionProbe(this._probeId); + this._probe.initialize(this.node); + if (this.enabled) { + ReflectionProbeManager.probeManager.register(this._probe); + } + this._probe.resolution = this._resolution; + this._probe.clearFlag = this._clearFlag; + this._probe.backgroundColor = this._backgroundColor; + this._probe.visibility = this._visibility; + this._probe.probeType = this._probeType; + this._probe.size = this._size; + this._probe.cubemap = this._cubemap!; + } + + private _readPixels (rt: RenderTexture): Uint8Array | null { + const width = rt.width; + const height = rt.height; + + const needSize = 4 * width * height; + const buffer = new Uint8Array(needSize); + + const gfxTexture = rt.getGFXTexture(); + if (!gfxTexture) { + return null; + } + + const gfxDevice = deviceManager.gfxDevice; + + const bufferViews: ArrayBufferView[] = []; + const regions: BufferTextureCopy[] = []; + + const region0 = new BufferTextureCopy(); + region0.texOffset.x = 0; + region0.texOffset.y = 0; + region0.texExtent.width = rt.width; + region0.texExtent.height = rt.height; + regions.push(region0); + + bufferViews.push(buffer); + gfxDevice?.copyTextureToBuffers(gfxTexture, bufferViews, regions); + return buffer; + } + + private _flipImage (data: Uint8Array | null, width: number, height: number) { + if (!data) { + return null; + } + const newData = new Uint8Array(data.length); + for (let i = 0; i < height; i++) { + for (let j = 0; j < width; j++) { + const index = (width * i + j) * 4; + const newIndex = (width * (height - i - 1) + j) * 4; + newData[newIndex] = data[index]; + newData[newIndex + 1] = data[index + 1]; + newData[newIndex + 2] = data[index + 2]; + newData[newIndex + 3] = data[index + 3]; + } + } + return newData; + } +} diff --git a/cocos/render-scene/scene/camera.ts b/cocos/render-scene/scene/camera.ts index 8b8792661aa..781c8db4e80 100644 --- a/cocos/render-scene/scene/camera.ts +++ b/cocos/render-scene/scene/camera.ts @@ -99,6 +99,7 @@ export enum CameraType { LEFT_EYE = 0, RIGHT_EYE = 1, MAIN = 2, + REFLECTION_PROBE = 3, } export enum TrackingType { diff --git a/cocos/render-scene/scene/index.ts b/cocos/render-scene/scene/index.ts index 0471a8a9caa..9448301c51b 100644 --- a/cocos/render-scene/scene/index.ts +++ b/cocos/render-scene/scene/index.ts @@ -35,4 +35,5 @@ export * from './light'; export * from './directional-light'; export * from './sphere-light'; export * from './spot-light'; +export * from './reflection-probe'; export * from './lod-group'; diff --git a/cocos/render-scene/scene/model.ts b/cocos/render-scene/scene/model.ts index c21182c4d31..d9c5c9a42b9 100644 --- a/cocos/render-scene/scene/model.ts +++ b/cocos/render-scene/scene/model.ts @@ -37,10 +37,11 @@ import { SubModel } from './submodel'; import { IMacroPatch, BatchingSchemes } from '../core/pass'; import { Mat4, Vec3, Vec4 } from '../../core/math'; import { Attribute, DescriptorSet, Device, Buffer, BufferInfo, getTypedArrayConstructor, - BufferUsageBit, FormatInfos, MemoryUsageBit, Filter, Address, Feature, SamplerInfo, deviceManager } from '../../gfx'; -import { INST_MAT_WORLD, UBOLocal, UBOSH, UBOWorldBound, UNIFORM_LIGHTMAP_TEXTURE_BINDING } from '../../rendering/define'; + BufferUsageBit, FormatInfos, MemoryUsageBit, Filter, Address, Feature, SamplerInfo, deviceManager, Texture } from '../../gfx'; +import { INST_MAT_WORLD, UBOLocal, UBOSH, UBOWorldBound, UNIFORM_LIGHTMAP_TEXTURE_BINDING, UNIFORM_REFLECTION_PROBE_CUBEMAP_BINDING, UNIFORM_REFLECTION_PROBE_TEXTURE_BINDING } from '../../rendering/define'; import { Root } from '../../root'; import { legacyCC } from '../../core/global-exports'; +import { TextureCube } from '../../asset/assets'; const m4_1 = new Mat4(); @@ -297,6 +298,30 @@ export class Model { this._priority = val; } + /** + * @en Whether the model can be render by the reflection probe + * @zh 模型是否能被反射探针渲染 + */ + get bakeToReflectionProbe () { + return this._bakeToReflectionProbe; + } + + set bakeToReflectionProbe (val) { + this._bakeToReflectionProbe = val; + } + + /** + * @en Reflection probe type + * @zh 反射探针类型。 + */ + get reflectionProbeType () { + return this._reflectionProbeType; + } + + set reflectionProbeType (val) { + this._reflectionProbeType = val; + } + /** * @en The type of the model * @zh 模型类型 @@ -454,6 +479,18 @@ export class Model { protected _priority = 0; + /** + * @en Whether the model can be render by the reflection probe + * @zh 模型是否能被反射探针渲染 + */ + protected _bakeToReflectionProbe = true; + + /** + * @en Reflection probe type. + * @zh 反射探针类型。 + */ + protected _reflectionProbeType = 0; + /** * @internal * @en native object @@ -799,6 +836,66 @@ export class Model { } } + /** + * @en Update the cube map of the reflection probe + * @zh 更新反射探针的立方体贴图 + * @param texture probe cubemap + */ + public updateReflctionProbeCubemap (texture: TextureCube) { + this._localDataUpdated = true; + this.onMacroPatchesStateChanged(); + + if (!texture) { + texture = builtinResMgr.get('default-cube-texture'); + } + + const gfxTexture = texture.getGFXTexture(); + if (gfxTexture) { + const reflectionSampler = this._device.getSampler(texture.getSamplerInfo()); + const subModels = this._subModels; + for (let i = 0; i < subModels.length; i++) { + const { descriptorSet } = subModels[i]; + descriptorSet.bindSampler(UNIFORM_REFLECTION_PROBE_CUBEMAP_BINDING, reflectionSampler); + descriptorSet.bindTexture(UNIFORM_REFLECTION_PROBE_CUBEMAP_BINDING, gfxTexture); + descriptorSet.update(); + } + } + } + + /** + * @en Update the planar relflection map of the reflection probe + * @zh 更新反射探针的平面反射贴图 + * @param texture planar relflection map + */ + public updateReflctionProbePlanarMap (texture: Texture) { + this._localDataUpdated = true; + this.onMacroPatchesStateChanged(); + + const sampler = this._device.getSampler(new SamplerInfo( + Filter.LINEAR, + Filter.LINEAR, + Filter.NONE, + Address.CLAMP, + Address.CLAMP, + Address.CLAMP, + )); + let bindingTexture: Texture | null = null; + if (!texture) { + bindingTexture = builtinResMgr.get('empty-texture').getGFXTexture(); + } else { + bindingTexture = texture; + } + if (bindingTexture) { + const subModels = this._subModels; + for (let i = 0; i < subModels.length; i++) { + const { descriptorSet } = subModels[i]; + descriptorSet.bindTexture(UNIFORM_REFLECTION_PROBE_TEXTURE_BINDING, bindingTexture); + descriptorSet.bindSampler(UNIFORM_REFLECTION_PROBE_TEXTURE_BINDING, sampler); + descriptorSet.update(); + } + } + } + /** * @en Update the shadow bias * @zh 更新阴影偏移 diff --git a/cocos/render-scene/scene/reflection-probe.ts b/cocos/render-scene/scene/reflection-probe.ts new file mode 100644 index 00000000000..d8566e2f8c8 --- /dev/null +++ b/cocos/render-scene/scene/reflection-probe.ts @@ -0,0 +1,507 @@ +/* + Copyright (c) 2020 Xiamen Yaji Software Co., Ltd. + + https://www.cocos.com/ + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated engine source code (the "Software"), a limited, + worldwide, royalty-free, non-assignable, revocable and non-exclusive license + to use Cocos Creator solely to develop games on your target platforms. You shall + not use Cocos Creator software for developing other software or tools that's + used for developing games. You are not granted to publish, distribute, + sublicense, and/or sell copies of Cocos Creator. + + The software or tools in this License Agreement are licensed, not sold. + Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + */ +import { EDITOR } from 'internal:constants'; +import { Camera, CameraAperture, CameraFOVAxis, CameraISO, CameraProjection, CameraShutter, CameraType, SKYBOX_FLAG, TrackingType } from './camera'; +import { Node } from '../../scene-graph/node'; +import { CCObject, Color, Enum, Quat, Rect, toRadian, Vec2, Vec3 } from '../../core'; +import { CAMERA_DEFAULT_MASK, IRenderObject } from '../../rendering/define'; +import { AABB } from '../../core/geometry/aabb'; +import { legacyCC } from '../../core/global-exports'; +import { ClearFlagBit } from '../../gfx'; +import { TextureCube } from '../../asset/assets/texture-cube'; +import { RenderTexture } from '../../asset/assets/render-texture'; + +export const ProbeClearFlag = Enum({ + SKYBOX: SKYBOX_FLAG | ClearFlagBit.DEPTH_STENCIL, + SOLID_COLOR: ClearFlagBit.ALL, +}); +export const ProbeType = Enum({ + CUBE: 0, + PLANAR: 1, +}); +const cameraDir: Vec3[] = [ + new Vec3(0, -90, 0), + new Vec3(0, 90, 0), + new Vec3(90, 0, 0), + new Vec3(-90, 0, 0), + new Vec3(0, 0, 0), + new Vec3(0, 180, 0), +]; +enum ProbeFaceIndex { + right = 0, + left = 1, + top = 2, + bottom = 3, + front = 4, + back = 5, +} + +export class ReflectionProbe { + public static probeFaceIndex = ProbeFaceIndex; + + public bakedCubeTextures: RenderTexture[] = []; + + public realtimePlanarTexture: RenderTexture | null = null; + + protected _resolution = 512; + protected _clearFlag = ProbeClearFlag.SKYBOX; + protected _backgroundColor = new Color(0, 0, 0, 255); + protected _visibility = CAMERA_DEFAULT_MASK; + protected _probeType = ProbeType.CUBE; + protected _cubemap: TextureCube | null = null; + protected _size = new Vec3(); + /** + * @en Objects inside bouding box. + * @zh 包围盒范围内的物体 + */ + private _renderObjects: IRenderObject[] = []; + + /** + * @en Render cubemap's camera + * @zh 渲染cubemap的相机 + */ + private _camera: Camera | null = null; + + /** + * @en Unique id of probe. + * @zh probe的唯一id + */ + private _probeId = 0; + + private _needRefresh = false; + + private _needRender = false; + + private _node: Node | null = null; + + private _cameraNode: Node | null = null; + + /** + * @en The AABB bounding box and probe only render the objects inside the bounding box. + * @zh AABB包围盒,probe只渲染包围盒内的物体 + */ + private _boundingBox: AABB | null = null; + + /** + * @en The position of the camera in world space. + * @zh 世界空间相机的位置 + */ + private _cameraWorldPos = new Vec3(); + + /** + * @en The rotation of the camera in world space. + * @zh 世界空间相机的旋转 + */ + private _cameraWorldRotation = new Quat(); + + /** + * @en The forward direction vertor of the camera in world space. + * @zh 世界空间相机朝前的方向向量 + */ + private _forward = new Vec3(); + /** + * @en The up direction vertor of the camera in world space. + * @zh 世界空间相机朝上的方向向量 + */ + private _up = new Vec3(); + + /** + * @en Set probe type,cube or planar. + * @zh 设置探针类型,cube或者planar + */ + set probeType (value: number) { + this._probeType = value; + } + get probeType () { + return this._probeType; + } + + /** + * @en set render texture size + * @zh 设置渲染纹理大小 + */ + set resolution (value: number) { + if (value !== this._resolution) { + this.bakedCubeTextures.forEach((rt, idx) => { + rt.resize(value, value); + }); + } + this._resolution = value; + } + get resolution () { + return this._resolution; + } + + /** + * @en Clearing flags of the camera, specifies which part of the framebuffer will be actually cleared every frame. + * @zh 相机的缓冲清除标志位,指定帧缓冲的哪部分要每帧清除。 + */ + set clearFlag (value: number) { + this._clearFlag = value; + this.camera.clearFlag = this._clearFlag; + } + get clearFlag () { + return this._clearFlag; + } + + /** + * @en Clearing color of the camera. + * @zh 相机的颜色缓冲默认值。 + */ + set backgroundColor (val: Color) { + this._backgroundColor = val; + this.camera.clearColor = this._backgroundColor; + } + get backgroundColor () { + return this._backgroundColor; + } + /** + * @en Visibility mask, declaring a set of node layers that will be visible to this camera. + * @zh 可见性掩码,声明在当前相机中可见的节点层级集合。 + */ + get visibility () { + return this._visibility; + } + set visibility (val) { + this._visibility = val; + this._camera!.visibility = this._visibility; + } + + /** + * @en Gets or sets the size of the box, in local space. + * @zh 获取或设置盒的大小。 + */ + set size (value) { + this._size = value; + + const pos = this.node.getWorldPosition(); + AABB.set(this._boundingBox!, pos.x, pos.y, pos.z, this._size.x, this._size.y, this._size.z); + } + get size () { + return this._size; + } + + set cubemap (val: TextureCube) { + this._cubemap = val; + } + + get cubemap () { + return this._cubemap!; + } + + /** + * @en Object to be render by probe + * @zh probe需要渲染的物体。 + */ + set renderObjects (val) { + this._renderObjects = val; + } + + get renderObjects () { + return this._renderObjects; + } + + /** + * @en The node of the probe. + * @zh probe绑定的节点 + */ + get node () { + return this._node!; + } + + get camera () { + return this._camera!; + } + + /** + * @en Refresh the objects that use this probe. + * @zh 刷新使用该probe的物体 + */ + set needRefresh (value: boolean) { + this._needRefresh = value; + } + + get needRefresh () { + return this._needRefresh; + } + + get needRender () { + return this._needRender; + } + + get boundingBox () { + return this._boundingBox!; + } + + get cameraNode () { + return this._cameraNode!; + } + + constructor (id: number) { + this._probeId = id; + } + + public initialize (node: Node) { + this._node = node; + this._cameraNode = new Node('ReflectionProbeCamera'); + this._cameraNode.hideFlags |= CCObject.Flags.DontSave | CCObject.Flags.HideInHierarchy; + node.scene.addChild(this._cameraNode); + + const pos = this.node.getWorldPosition(); + this._boundingBox = AABB.create(pos.x, pos.y, pos.z, this._size.x, this._size.y, this._size.z); + this._createCamera(); + } + + public initBakedTextures () { + //wait for scene data initialize, so create rendertexture in the start function + if (this.bakedCubeTextures.length === 0) { + for (let i = 0; i < 6; i++) { + const renderTexture = this._createTargetTexture(this._resolution, this._resolution); + this.bakedCubeTextures.push(renderTexture); + } + } + } + + public async captureCubemap () { + this._renderObjects = []; + this._resetCameraParams(); + await this._renderCubemap(); + } + + /** + * @en Render real-time planar reflection textures + * @zh 渲染实时平面反射贴图 + * @param sourceCamera render planar reflection for this camera + */ + public renderPlanarReflection (sourceCamera: Camera) { + if (!sourceCamera) return; + if (!this.realtimePlanarTexture) { + const canvasSize = legacyCC.view.getDesignResolutionSize(); + this.realtimePlanarTexture = this._createTargetTexture(canvasSize.width, canvasSize.height); + } + this._syncCameraParams(sourceCamera); + this._transformReflectionCamera(sourceCamera); + this._attachCameraToScene(); + this._needRender = true; + } + + public switchProbeType (type: number, sourceCamera?: Camera) { + if (type === ProbeType.CUBE) { + this._needRender = false; + this._detachCameraFromScene(); + } else if (sourceCamera !== undefined) { + this.renderPlanarReflection(sourceCamera); + } + } + + public setTargetTexture (rt: RenderTexture | null = null) { + if (!this.camera) return; + if (rt) { + const window = rt.window!; + this.camera.changeTargetWindow(window); + this.camera.setFixedSize(window.width, window.height); + this.camera.update(); + } else { + this.camera.changeTargetWindow(EDITOR ? legacyCC.director.root.tempWindow : null); + this.camera.isWindowSize = true; + } + } + + public getProbeId () { + return this._probeId; + } + + public async waitForNextFrame () { + return new Promise((resolve, reject) => { + legacyCC.director.once(legacyCC.Director.EVENT_END_FRAME, () => { + resolve(); + }); + }); + } + + public renderArea (): Vec2 { + if (this._probeType === ProbeType.PLANAR) { + return new Vec2(this.realtimePlanarTexture!.width, this.realtimePlanarTexture!.height); + } else { + return new Vec2(this.resolution, this.resolution); + } + } + + public isFinishedRendering () { + return true; + } + + public validate () { + return this.cubemap !== null; + } + + public destroy () { + if (this._camera) { + this._camera.destroy(); + this._camera = null; + } + for (let i = 0; i < this.bakedCubeTextures.length; i++) { + this.bakedCubeTextures[i].destroy(); + } + this.bakedCubeTextures = []; + + if (this.realtimePlanarTexture) { + this.realtimePlanarTexture.destroy(); + this.realtimePlanarTexture = null; + } + } + + public updateCameraDir (faceIdx: number) { + this.cameraNode.setRotationFromEuler(cameraDir[faceIdx]); + this.camera.update(true); + } + + public _syncCameraParams (camera: Camera) { + this.camera.projectionType = camera.projectionType; + this.camera.orthoHeight = camera.orthoHeight; + this.camera.nearClip = camera.nearClip; + this.camera.farClip = camera.farClip; + this.camera.fov = camera.fov; + this.camera.visibility = camera.visibility; + this.camera.clearFlag = camera.clearFlag; + this.camera.clearColor = camera.clearColor; + this.camera.priority = camera.priority - 1; + } + + public updateBoundingBox () { + if (this.node) { + const pos = this.node.getWorldPosition(); + AABB.set(this._boundingBox!, pos.x, pos.y, pos.z, this._size.x, this._size.y, this._size.z); + } + } + + private async _renderCubemap () { + this._attachCameraToScene(); + this._needRender = true; + await this.waitForNextFrame(); + this._needRender = false; + this._detachCameraFromScene(); + } + + private _createCamera () { + const root = legacyCC.director.root; + if (!this._camera) { + this._camera = (legacyCC.director.root).createCamera(); + if (!this._camera) return null; + this._camera.initialize({ + name: this.cameraNode.name, + node: this.cameraNode, + projection: CameraProjection.PERSPECTIVE, + window: EDITOR ? legacyCC.director.root && legacyCC.director.root.mainWindow + : legacyCC.director.root && legacyCC.director.root.tempWindow, + priority: 0, + cameraType: CameraType.REFLECTION_PROBE, + trackingType: TrackingType.NO_TRACKING, + }); + } + this._camera.setViewportInOrientedSpace(new Rect(0, 0, 1, 1)); + this._camera.fovAxis = CameraFOVAxis.VERTICAL; + this._camera.fov = toRadian(90); + this._camera.orthoHeight = 10; + this._camera.nearClip = 1; + this._camera.farClip = 1000; + this._camera.clearColor = this._backgroundColor; + this._camera.clearDepth = 1.0; + this._camera.clearStencil = 0.0; + this._camera.clearFlag = this._clearFlag; + this._camera.visibility = this._visibility; + this._camera.aperture = CameraAperture.F16_0; + this._camera.shutter = CameraShutter.D125; + this._camera.iso = CameraISO.ISO100; + return this._camera; + } + + private _resetCameraParams () { + this.camera.projectionType = CameraProjection.PERSPECTIVE; + this.camera.orthoHeight = 10; + this.camera.nearClip = 1; + this.camera.farClip = 1000; + this.camera.fov = toRadian(90); + this.camera.priority = 0; + + this.camera.visibility = this._visibility; + this.camera.clearFlag = this._clearFlag; + this.camera.clearColor = this._backgroundColor; + + this.cameraNode.worldPosition = this.node.worldPosition; + this.cameraNode.worldRotation = this.node.worldRotation; + this.camera.update(true); + } + + private _createTargetTexture (width: number, height: number) { + const rt = new RenderTexture(); + rt.reset({ width, height }); + return rt; + } + + private _attachCameraToScene () { + if (!this.node.scene || !this.camera) { + return; + } + const rs = this.node.scene.renderScene; + rs!.addCamera(this.camera); + } + + private _detachCameraFromScene () { + if (this.camera && this.camera.scene) { + this.camera.scene.removeCamera(this.camera); + } + } + + private _transformReflectionCamera (sourceCamera: Camera) { + const offset = Vec3.dot(this.node.worldPosition, Vec3.UP); + this._reflect(this._cameraWorldPos, sourceCamera.node.worldPosition, Vec3.UP, offset); + this.cameraNode.worldPosition = this._cameraWorldPos; + + Vec3.transformQuat(this._forward, Vec3.FORWARD, sourceCamera.node.worldRotation); + this._reflect(this._forward, this._forward, Vec3.UP, 0); + this._forward.normalize(); + this._forward.negative(); + + const up = new Vec3(); + Vec3.transformQuat(up, Vec3.UP, sourceCamera.node.worldRotation); + this._reflect(this._up, up, Vec3.UP, 0); + this._up.normalize(); + + Quat.fromViewUp(this._cameraWorldRotation, this._forward, this._up); + + this.cameraNode.worldRotation = this._cameraWorldRotation; + + this.camera.update(true); + } + private _reflect (out: Vec3, point: Vec3, normal: Vec3, offset: number) { + const n = Vec3.clone(normal); + n.normalize(); + const dist = Vec3.dot(n, point) - offset; + n.multiplyScalar(2.0 * dist); + Vec3.subtract(out, point, n); + return out; + } +} diff --git a/cocos/rendering/custom/web-descriptor-hierarchy.ts b/cocos/rendering/custom/web-descriptor-hierarchy.ts index 22848ea79ea..a0a8e334742 100644 --- a/cocos/rendering/custom/web-descriptor-hierarchy.ts +++ b/cocos/rendering/custom/web-descriptor-hierarchy.ts @@ -305,6 +305,10 @@ export class WebDescriptorHierarchy { this.setDescriptor(localSamplerFragTarget, 'cc_spriteTexture', Type.SAMPLER2D); } else if (samplerName === 'cc_reflectionTexture') { this.setDescriptor(localSamplerFragTarget, 'cc_reflectionTexture', Type.SAMPLER2D); + } else if (samplerName === 'cc_reflectionProbeCubemap') { + this.setDescriptor(localSamplerFragTarget, 'cc_reflectionProbeCubemap', Type.SAMPLER_CUBE); + } else if (samplerName === 'cc_reflectionProbePlanarMap') { + this.setDescriptor(localSamplerFragTarget, 'cc_reflectionProbePlanarMap', Type.SAMPLER2D); } } diff --git a/cocos/rendering/define.ts b/cocos/rendering/define.ts index 165b316d527..8c249649c8d 100644 --- a/cocos/rendering/define.ts +++ b/cocos/rendering/define.ts @@ -145,6 +145,9 @@ export enum ModelLocalBindings { STORAGE_REFLECTION, + SAMPLER_REFLECTION_PROBE_CUBE, + SAMPLER_REFLECTION_PROBE_PLANAR, + COUNT, } const LOCAL_UBO_COUNT = ModelLocalBindings.SAMPLER_JOINTS; @@ -701,6 +704,30 @@ const UNIFORM_REFLECTION_STORAGE_LAYOUT = new UniformStorageImage(SetIndex.LOCAL localDescriptorSetLayout.layouts[UNIFORM_REFLECTION_STORAGE_NAME] = UNIFORM_REFLECTION_STORAGE_LAYOUT; localDescriptorSetLayout.bindings[UNIFORM_REFLECTION_STORAGE_BINDING] = UNIFORM_REFLECTION_STORAGE_DESCRIPTOR; +/** + * @en The sampler for reflection probe cubemap + * @zh 反射探针立方体贴图纹理采样器。 + */ +const UNIFORM_REFLECTION_PROBE_CUBEMAP_NAME = 'cc_reflectionProbeCubemap'; +export const UNIFORM_REFLECTION_PROBE_CUBEMAP_BINDING = ModelLocalBindings.SAMPLER_REFLECTION_PROBE_CUBE; +const UNIFORM_REFLECTION_PROBE_CUBEMAP_DESCRIPTOR = new DescriptorSetLayoutBinding(UNIFORM_REFLECTION_PROBE_CUBEMAP_BINDING, DescriptorType.SAMPLER_TEXTURE, 1, ShaderStageFlagBit.FRAGMENT); +const UNIFORM_REFLECTION_PROBE_CUBEMAP_LAYOUT = new UniformSamplerTexture(SetIndex.LOCAL, UNIFORM_REFLECTION_PROBE_CUBEMAP_BINDING, + UNIFORM_REFLECTION_PROBE_CUBEMAP_NAME, Type.SAMPLER_CUBE, 1); +localDescriptorSetLayout.layouts[UNIFORM_REFLECTION_PROBE_CUBEMAP_NAME] = UNIFORM_REFLECTION_PROBE_CUBEMAP_LAYOUT; +localDescriptorSetLayout.bindings[UNIFORM_REFLECTION_PROBE_CUBEMAP_BINDING] = UNIFORM_REFLECTION_PROBE_CUBEMAP_DESCRIPTOR; + +/** + * @en The sampler for reflection probe planar reflection + * @zh 反射探针平面反射贴图纹理采样器。 + */ +const UNIFORM_REFLECTION_PROBE_TEXTURE_NAME = 'cc_reflectionProbePlanarMap'; +export const UNIFORM_REFLECTION_PROBE_TEXTURE_BINDING = ModelLocalBindings.SAMPLER_REFLECTION_PROBE_PLANAR; +const UNIFORM_REFLECTION_PROBE_TEXTURE_DESCRIPTOR = new DescriptorSetLayoutBinding(UNIFORM_REFLECTION_PROBE_TEXTURE_BINDING, DescriptorType.SAMPLER_TEXTURE, 1, ShaderStageFlagBit.FRAGMENT); +const UNIFORM_REFLECTION_PROBE_TEXTURE_LAYOUT = new UniformSamplerTexture(SetIndex.LOCAL, UNIFORM_REFLECTION_PROBE_TEXTURE_BINDING, + UNIFORM_REFLECTION_PROBE_TEXTURE_NAME, Type.SAMPLER2D, 1); +localDescriptorSetLayout.layouts[UNIFORM_REFLECTION_PROBE_TEXTURE_NAME] = UNIFORM_REFLECTION_PROBE_TEXTURE_LAYOUT; +localDescriptorSetLayout.bindings[UNIFORM_REFLECTION_PROBE_TEXTURE_BINDING] = UNIFORM_REFLECTION_PROBE_TEXTURE_DESCRIPTOR; + export const CAMERA_DEFAULT_MASK = Layers.makeMaskExclude([Layers.BitMask.UI_2D, Layers.BitMask.GIZMOS, Layers.BitMask.EDITOR, Layers.BitMask.SCENE_GIZMO, Layers.BitMask.PROFILER]); diff --git a/cocos/rendering/forward/forward-pipeline.ts b/cocos/rendering/forward/forward-pipeline.ts index 7cd79bccf76..5da0e030e19 100644 --- a/cocos/rendering/forward/forward-pipeline.ts +++ b/cocos/rendering/forward/forward-pipeline.ts @@ -36,6 +36,7 @@ import { Texture2D } from '../../asset/assets/texture-2d'; import { Camera } from '../../render-scene/scene'; import { errorID } from '../../core/platform/debug'; import { PipelineSceneData } from '../pipeline-scene-data'; +import { ReflectionProbeFlow } from '../reflection-probe/reflection-probe-flow'; const PIPELINE_TYPE = 0; @@ -64,6 +65,10 @@ export class ForwardPipeline extends RenderPipeline { shadowFlow.initialize(ShadowFlow.initInfo); this._flows.push(shadowFlow); + const reflectionFlow = new ReflectionProbeFlow(); + reflectionFlow.initialize(ReflectionProbeFlow.initInfo); + this._flows.push(reflectionFlow); + const forwardFlow = new ForwardFlow(); forwardFlow.initialize(ForwardFlow.initInfo); this._flows.push(forwardFlow); diff --git a/cocos/rendering/index.ts b/cocos/rendering/index.ts index 63743e5d30a..104cfaec0f6 100644 --- a/cocos/rendering/index.ts +++ b/cocos/rendering/index.ts @@ -54,6 +54,9 @@ export { PipelineStateManager } from './pipeline-state-manager'; export { PipelineEventProcessor, PipelineEventType } from './pipeline-event'; export { DebugView } from './debug-view'; +export { ReflectionProbeFlow } from './reflection-probe/reflection-probe-flow'; +export { ReflectionProbeStage } from './reflection-probe/reflection-probe-stage'; + export function createDefaultPipeline () { const rppl = new ForwardPipeline(); rppl.initialize({ flows: [] }); diff --git a/cocos/rendering/reflection-probe/reflection-probe-flow.ts b/cocos/rendering/reflection-probe/reflection-probe-flow.ts new file mode 100644 index 00000000000..4a112ad89a5 --- /dev/null +++ b/cocos/rendering/reflection-probe/reflection-probe-flow.ts @@ -0,0 +1,102 @@ +/* + Copyright (c) 2020 Xiamen Yaji Software Co., Ltd. + + https://www.cocos.com/ + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated engine source code (the "Software"), a limited, + worldwide, royalty-free, non-assignable, revocable and non-exclusive license + to use Cocos Creator solely to develop games on your target platforms. You shall + not use Cocos Creator software for developing other software or tools that's + used for developing games. You are not granted to publish, distribute, + sublicense, and/or sell copies of Cocos Creator. + + The software or tools in this License Agreement are licensed, not sold. + Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + */ +import { EDITOR } from 'internal:constants'; +import { ccclass } from 'cc.decorator'; +import { IRenderFlowInfo, RenderFlow } from '../render-flow'; +import { ReflectionProbeStage } from './reflection-probe-stage'; +import { RenderFlowTag } from '../pipeline-serialization'; +import { RenderPipeline } from '..'; +import { Camera, CameraType, ProbeType, ReflectionProbe } from '../../render-scene/scene'; +import { ReflectionProbeManager } from '../reflectionProbeManager'; + +/** + * @en reflection probe render flow + * @zh 反射探针rendertexture绘制流程 + */ +@ccclass('ReflectionProbeFlow') +export class ReflectionProbeFlow extends RenderFlow { + public static initInfo: IRenderFlowInfo = { + name: 'PIPELINE_FLOW_RELECTION_PROBE', + priority: 0, + tag: RenderFlowTag.SCENE, + stages: [], + }; + + public initialize (info: IRenderFlowInfo): boolean { + super.initialize(info); + if (this._stages.length === 0) { + const probeStage = new ReflectionProbeStage(); + probeStage.initialize(ReflectionProbeStage.initInfo); + this._stages.push(probeStage); + } + return true; + } + + public activate (pipeline: RenderPipeline) { + super.activate(pipeline); + } + + public render (camera: Camera) { + if (camera.cameraType !== CameraType.REFLECTION_PROBE) { + return; + } + const probes = ReflectionProbeManager.probeManager.getProbes(); + for (let i = 0; i < probes.length; i++) { + const probe = probes[i]; + if (probe.needRender) { + if (EDITOR || probe.probeType === ProbeType.PLANAR) { + this._renderStage(probe); + } + } + } + } + + public destroy () { + super.destroy(); + } + private _renderStage (probe: ReflectionProbe) { + for (let i = 0; i < this._stages.length; i++) { + const probeStage = this._stages[i] as ReflectionProbeStage; + if (probe.probeType === ProbeType.PLANAR) { + probe.setTargetTexture(probe.realtimePlanarTexture); + ReflectionProbeManager.probeManager.unbindingPlanarMap(probe); + probeStage.setUsageInfo(probe, probe.realtimePlanarTexture!.window!.framebuffer); + probeStage.render(probe.camera); + ReflectionProbeManager.probeManager.updatePlanarMap(probe); + probe.setTargetTexture(null); + } else { + for (let faceIdx = 0; faceIdx < 6; faceIdx++) { + //update camera dirction + probe.updateCameraDir(faceIdx); + const renderTexture = probe.bakedCubeTextures[faceIdx]; + probe.setTargetTexture(renderTexture); + probeStage.setUsageInfo(probe, renderTexture.window!.framebuffer); + probeStage.render(probe.camera); + } + probe.setTargetTexture(null); + } + } + } +} diff --git a/cocos/rendering/reflection-probe/reflection-probe-stage.ts b/cocos/rendering/reflection-probe/reflection-probe-stage.ts new file mode 100644 index 00000000000..846df1ec0a3 --- /dev/null +++ b/cocos/rendering/reflection-probe/reflection-probe-stage.ts @@ -0,0 +1,128 @@ +/* + Copyright (c) 2020 Xiamen Yaji Software Co., Ltd. + + https://www.cocos.com/ + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated engine source code (the "Software"), a limited, + worldwide, royalty-free, non-assignable, revocable and non-exclusive license + to use Cocos Creator solely to develop games on your target platforms. You shall + not use Cocos Creator software for developing other software or tools that's + used for developing games. You are not granted to publish, distribute, + sublicense, and/or sell copies of Cocos Creator. + + The software or tools in this License Agreement are licensed, not sold. + Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + */ + +import { ccclass } from 'cc.decorator'; +import { Color, Rect, Framebuffer, ClearFlagBit } from '../../gfx'; +import { IRenderStageInfo, RenderStage } from '../render-stage'; +import { ForwardStagePriority } from '../enum'; +import { ForwardPipeline } from '../forward/forward-pipeline'; +import { SetIndex } from '../define'; +import { ReflectionProbeFlow } from './reflection-probe-flow'; +import { Camera, ReflectionProbe } from '../../render-scene/scene'; +import { RenderReflectionProbeQueue } from '../render-reflection-probe-queue'; + +const colors: Color[] = [new Color(1, 1, 1, 1)]; + +/** + * @en reflection probe render stage + * @zh 反射探针渲染阶段。 + */ +@ccclass('ReflectionProbeStage') +export class ReflectionProbeStage extends RenderStage { + /** + * @en A common initialization info for reflection probe render stage + * @zh 一个通用的 reflection probe stage 的初始化信息对象 + */ + public static initInfo: IRenderStageInfo = { + name: 'ReflectionProbeStage', + priority: ForwardStagePriority.FORWARD, + tag: 0, + }; + + private _frameBuffer: Framebuffer | null = null; + private _renderArea = new Rect(); + private _probe: ReflectionProbe | null = null; + private _probeRenderQueue!: RenderReflectionProbeQueue; + + /** + * @en Sets the probe info + * @zh 设置probe信息 + * @param probe + * @param frameBuffer + */ + public setUsageInfo (probe: ReflectionProbe, frameBuffer: Framebuffer) { + this._probe = probe; + this._frameBuffer = frameBuffer; + } + + public destroy () { + this._frameBuffer = null; + this._probeRenderQueue?.clear(); + } + + public clearFramebuffer (camera: Camera) { + if (!this._frameBuffer) { return; } + + colors[0].w = camera.clearColor.w; + const pipeline = this._pipeline as ForwardPipeline; + const pipelineSceneData = pipeline.pipelineSceneData; + const shadingScale = pipelineSceneData.shadingScale; + const vp = camera.viewport; + const size = this._probe!.resolution; + this._renderArea.x = vp.x * size; + this._renderArea.y = vp.y * size; + this._renderArea.width = vp.width * size * shadingScale; + this._renderArea.height = vp.height * size * shadingScale; + const cmdBuff = pipeline.commandBuffers[0]; + const renderPass = this._frameBuffer.renderPass; + + cmdBuff.beginRenderPass(renderPass, this._frameBuffer, this._renderArea, + colors, camera.clearDepth, camera.clearStencil); + cmdBuff.endRenderPass(); + } + + public render (camera: Camera) { + const pipeline = this._pipeline; + const cmdBuff = pipeline.commandBuffers[0]; + this._probeRenderQueue.gatherRenderObjects(camera); + pipeline.pipelineUBO.updateCameraUBO(camera); + + this._renderArea.x = 0; + this._renderArea.y = 0; + this._renderArea.width = this._probe!.renderArea().x; + this._renderArea.height = this._probe!.renderArea().y; + + const renderPass = this._frameBuffer!.renderPass; + + if (camera.clearFlag & ClearFlagBit.COLOR) { + colors[0].x = camera.clearColor.x; + colors[0].y = camera.clearColor.y; + colors[0].z = camera.clearColor.z; + } + const device = pipeline.device; + cmdBuff.beginRenderPass(renderPass, this._frameBuffer!, this._renderArea, + colors, camera.clearDepth, camera.clearStencil); + cmdBuff.bindDescriptorSet(SetIndex.GLOBAL, pipeline.descriptorSet); + + this._probeRenderQueue.recordCommandBuffer(device, renderPass, cmdBuff); + cmdBuff.endRenderPass(); + this._probeRenderQueue.resetMacro(); + } + + public activate (pipeline: ForwardPipeline, flow: ReflectionProbeFlow) { + super.activate(pipeline, flow); + this._probeRenderQueue = new RenderReflectionProbeQueue(pipeline); + } +} diff --git a/cocos/rendering/reflectionProbeManager.ts b/cocos/rendering/reflectionProbeManager.ts new file mode 100644 index 00000000000..a97a71b21fa --- /dev/null +++ b/cocos/rendering/reflectionProbeManager.ts @@ -0,0 +1,256 @@ +/* + Copyright (c) 2017-2020 Xiamen Yaji Software Co., Ltd. + + https://www.cocos.com/ + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated engine source code (the "Software"), a limited, + worldwide, royalty-free, non-assignable, revocable and non-exclusive license + to use Cocos Creator solely to develop games on your target platforms. You shall + not use Cocos Creator software for developing other software or tools that's + used for developing games. You are not granted to publish, distribute, + sublicense, and/or sell copies of Cocos Creator. + + The software or tools in this License Agreement are licensed, not sold. + Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + */ + +import { MeshRenderer } from '../3d/framework/mesh-renderer'; +import { Vec3 } from '../core'; +import intersect from '../core/geometry/intersect'; +import { Camera, Model } from '../render-scene/scene'; +import { ReflectionProbe } from '../render-scene/scene/reflection-probe'; +import { IRenderObject } from './define'; + +export class ReflectionProbeManager { + public static probeManager: ReflectionProbeManager; + private _probes: ReflectionProbe[] = []; + /** + * @en + * All models in the scene that use reflection probes. + * @zh + * 场景中所有使用反射探针的模型 + */ + private _models = new Map(); + + public register (probe: ReflectionProbe) { + const index = this._probes.indexOf(probe); + if (index === -1) { + this._probes.push(probe); + } + } + + public unregister (probe: ReflectionProbe) { + for (let i = 0; i < this._probes.length; i++) { + if (this._probes[i] === probe) { + const del = this._probes.splice(i, 1); + if (del[0]) { + this._removeDependentModels(del[0]); + } + break; + } + } + console.log(`probe length = ${this._probes.length}`); + } + + public exists (probeId: number): boolean { + for (let i = 0; i < this._probes.length; i++) { + if (this._probes[i].getProbeId() === probeId) { + return true; + } + } + return false; + } + + public getProbes (): ReflectionProbe[] { + return this._probes; + } + + public clearAll () { + this._probes = []; + } + + public getProbeByCamera (camera: Camera) { + for (let i = 0; i < this._probes.length; i++) { + if (this._probes[i].camera === camera) { + return this._probes[i]; + } + } + return null; + } + + /** + * @en + * Render objects to the probe. + * @zh + * 渲染至probe的物体。 + */ + public addRenderObject (camera: Camera, obj: IRenderObject, bSkybox?: boolean) { + const probe = this.getProbeByCamera(camera); + if (!probe) return; + if ((obj.model.worldBounds && intersect.aabbWithAABB(obj.model.worldBounds, probe.boundingBox)) || bSkybox) { + probe.renderObjects.push(obj); + } + } + + public clearRenderObject (camera: Camera) { + const probe = this.getProbeByCamera(camera); + if (probe) { + probe.renderObjects = []; + } + } + + public getRenderObjects (camera: Camera): readonly IRenderObject[] { + const probe = this.getProbeByCamera(camera); + if (probe) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return probe.renderObjects; + } + return []; + } + + /** + * @en Update the cubemap captured by the reflection probe. + * @zh 更新反射探针捕获的cubemap + * @param probe update the texture for this probe + */ + public updateBakedCubemap (probe: ReflectionProbe) { + const models = this._getModelsByProbe(probe); + if (!probe.cubemap) return; + for (let i = 0; i < models.length; i++) { + const model = models[i]; + const meshRender = model.node.getComponent(MeshRenderer); + if (meshRender) { + meshRender.updateProbeCubemap(probe.cubemap); + } + } + probe.needRefresh = false; + } + + /** + * @en Update the plane reflection map for reflection probe render. + * @zh 更新反射探针渲染的平面反射贴图 + * @param probe update the texture for this probe + */ + public updatePlanarMap (probe: ReflectionProbe) { + const models = this._getModelsByProbe(probe); + if (!probe.realtimePlanarTexture) return; + for (let i = 0; i < models.length; i++) { + const model = models[i]; + const meshRender = model.node.getComponent(MeshRenderer); + if (meshRender) { + meshRender.updateProbePlanarMap(probe.realtimePlanarTexture.getGFXTexture()); + } + } + } + + /** + * @en Unbind planar reflection map + * @zh 解除绑定的平面反射贴图 + * @param probe unbind the texture for this probe + */ + public unbindingPlanarMap (probe: ReflectionProbe) { + const models = this._getModelsByProbe(probe); + if (!probe.realtimePlanarTexture) return; + for (let i = 0; i < models.length; i++) { + const model = models[i]; + const meshRender = model.node.getComponent(MeshRenderer); + if (meshRender) { + meshRender.updateProbePlanarMap(null); + } + } + } + + /** + * @en This function is called when the transform of the reflection probe changes, to update the object using this reflection probe. + * @zh 反射探针的transform变化时,会调用此函数来更新使用此反射探针的物体。 + * @param probe update the object for this probe + */ + public updateModes (probe: ReflectionProbe) { + const scene = probe.node.scene.renderScene; + if (!scene) return; + const models = scene.models; + for (let i = 0; i < models.length; i++) { + const model = models[i]; + if (model.node && model.worldBounds) { + const nearest = this._getNearestProbe(model); + if (!nearest) continue; + + if (this._models.has(model)) { + const old = this._models.get(model); + if (old === nearest) { + continue; + } + } + this._models.set(model, nearest); + nearest.needRefresh = true; + } + } + + for (let i = 0; i < this._probes.length; i++) { + if (this._probes[i].needRefresh) { + this.updateBakedCubemap(this._probes[i]); + } + } + } + + /** + * @en + * select the probe with the nearest distance. + * @zh + * 选择距离最近的probe。 + * @param model select the probe for this model + */ + private _getNearestProbe (model: Model): ReflectionProbe | null { + if (this._probes.length === 0) return null; + if (!model.node || !model.worldBounds) return null; + + let distance = 0; + let idx = 0; + + for (let i = 0; i < this._probes.length; i++) { + if (!this._probes[i].validate() || !intersect.aabbWithAABB(model.worldBounds, this._probes[i].boundingBox)) { + continue; + } + if (i === 0) { + distance = Vec3.distance(model.node.position, this._probes[i].node.position); + } else { + const d = Vec3.distance(model.node.position, this._probes[i].node.position); + if (d < distance) { + distance = d; + idx = i; + } + } + } + return this._probes[idx]; + } + + private _getModelsByProbe (probe: ReflectionProbe) { + const models: Model[] = []; + for (const entry of this._models.entries()) { + if (entry[1] === probe) { + models.push(entry[0]); + } + } + return models; + } + + private _removeDependentModels (probe: ReflectionProbe) { + for (const key of this._models.keys()) { + const p = this._models.get(key); + if (p !== undefined && p === probe) { + this._models.delete(key); + } + } + } +} + +ReflectionProbeManager.probeManager = new ReflectionProbeManager(); diff --git a/cocos/rendering/render-reflection-probe-queue.ts b/cocos/rendering/render-reflection-probe-queue.ts new file mode 100644 index 00000000000..73355205e82 --- /dev/null +++ b/cocos/rendering/render-reflection-probe-queue.ts @@ -0,0 +1,148 @@ +/* + Copyright (c) 2020 Xiamen Yaji Software Co., Ltd. + + https://www.cocos.com/ + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated engine source code (the "Software"), a limited, + worldwide, royalty-free, non-assignable, revocable and non-exclusive license + to use Cocos Creator solely to develop games on your target platforms. You shall + not use Cocos Creator software for developing other software or tools that's + used for developing games. You are not granted to publish, distribute, + sublicense, and/or sell copies of Cocos Creator. + + The software or tools in this License Agreement are licensed, not sold. + Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + */ + +import { SubModel } from '../render-scene/scene/submodel'; +import { SetIndex } from './define'; +import { Device, RenderPass, Shader, CommandBuffer } from '../gfx'; +import { getPhaseID } from './pass-phase'; +import { PipelineStateManager } from './pipeline-state-manager'; +import { Pass } from '../render-scene/core/pass'; +import { Model } from '../render-scene/scene/model'; +import { Camera } from '../render-scene/scene'; +import { PipelineRuntime } from './custom/pipeline'; +import { reflectionProbeCulling } from './scene-culling'; +import { ReflectionProbeManager } from './reflectionProbeManager'; + +const CC_USE_RGBE_OUTPUT = 'CC_USE_RGBE_OUTPUT'; +const _phaseID = getPhaseID('default'); +const _phaseReflectMapID = getPhaseID('reflect-map'); +function getPassIndex (subModel: SubModel): number { + const passes = subModel.passes; + for (let k = 0; k < passes.length; k++) { + if (passes[k].phase === _phaseID) { + return k; + } + } + return -1; +} + +function getReflectMapPassIndex (subModel: SubModel): number { + const passes = subModel.passes; + for (let k = 0; k < passes.length; k++) { + if (passes[k].phase === _phaseReflectMapID) { + return k; + } + } + return -1; +} + +/** + * @zh + * 反射探针渲染队列 + */ +export class RenderReflectionProbeQueue { + private _pipeline: PipelineRuntime; + private _subModelsArray: SubModel[] = []; + private _passArray: Pass[] = []; + private _shaderArray: Shader[] = []; + + public constructor (pipeline: PipelineRuntime) { + this._pipeline = pipeline; + } + + public gatherRenderObjects (camera: Camera) { + this.clear(); + const sceneData = this._pipeline.pipelineSceneData; + reflectionProbeCulling(sceneData, camera); + const renderObjects = ReflectionProbeManager.probeManager.getRenderObjects(camera); + if (renderObjects === undefined) { + return; + } + for (let i = 0; i < renderObjects.length; i++) { + const ro = renderObjects[i]; + const model = ro.model; + this.add(model); + } + } + + public clear () { + this._subModelsArray.length = 0; + this._shaderArray.length = 0; + this._passArray.length = 0; + } + + public add (model: Model) { + const subModels = model.subModels; + for (let j = 0; j < subModels.length; j++) { + const subModel = subModels[j]; + + let passIdx = getReflectMapPassIndex(subModel); + let bUseReflectPass = true; + if (passIdx < 0) { + passIdx = getPassIndex(subModel); + bUseReflectPass = false; + } + if (passIdx < 0) { continue; } + const pass = subModel.passes[passIdx]; + if (!bUseReflectPass) { + pass.defines[CC_USE_RGBE_OUTPUT] = true; + subModel.onPipelineStateChanged(); + } + const shader = subModel.shaders[passIdx]; + this._subModelsArray.push(subModel); + if (shader) this._shaderArray.push(shader); + this._passArray.push(pass); + } + } + + /** + * @zh + * record CommandBuffer + */ + public recordCommandBuffer (device: Device, renderPass: RenderPass, cmdBuff: CommandBuffer) { + for (let i = 0; i < this._subModelsArray.length; ++i) { + const subModel = this._subModelsArray[i]; + const shader = this._shaderArray[i]; + const pass = this._passArray[i]; + const ia = subModel.inputAssembler; + const pso = PipelineStateManager.getOrCreatePipelineState(device, pass, shader, renderPass, ia); + const descriptorSet = pass.descriptorSet; + + cmdBuff.bindPipelineState(pso); + cmdBuff.bindDescriptorSet(SetIndex.MATERIAL, descriptorSet); + cmdBuff.bindDescriptorSet(SetIndex.LOCAL, subModel.descriptorSet); + cmdBuff.bindInputAssembler(ia); + cmdBuff.draw(ia); + } + } + public resetMacro () { + for (let i = 0; i < this._subModelsArray.length; ++i) { + const subModel = this._subModelsArray[i]; + const pass = this._passArray[i]; + pass.defines[CC_USE_RGBE_OUTPUT] = false; + subModel.onPipelineStateChanged(); + } + } +} diff --git a/cocos/rendering/scene-culling.ts b/cocos/rendering/scene-culling.ts index 7a312794ca2..b8e450438d6 100644 --- a/cocos/rendering/scene-culling.ts +++ b/cocos/rendering/scene-culling.ts @@ -33,6 +33,7 @@ import { ShadowType, CSMOptimizationMode } from '../render-scene/scene/shadows'; import { PipelineSceneData } from './pipeline-scene-data'; import { ShadowLayerVolume } from './shadow/csm-layers'; import { warnID } from '../core/platform'; +import { ReflectionProbeManager } from './reflectionProbeManager'; import { LODModesCachedUtils } from './lod-models-utils'; const _tempVec3 = new Vec3(); @@ -187,3 +188,30 @@ export function sceneCulling (pipeline: RenderPipeline, camera: Camera) { } LODModesCachedUtils.clearCachedLODModels(); } + +export function reflectionProbeCulling (sceneData: PipelineSceneData, camera: Camera) { + const scene = camera.scene!; + const skybox = sceneData.skybox; + + ReflectionProbeManager.probeManager.clearRenderObject(camera); + + if (skybox.enabled && skybox.model && (camera.clearFlag & SKYBOX_FLAG)) { + ReflectionProbeManager.probeManager.addRenderObject(camera, getRenderObject(skybox.model, camera), true); + } + + const models = scene.models; + const visibility = camera.visibility; + + for (let i = 0; i < models.length; i++) { + const model = models[i]; + // filter model by view visibility + if (model.enabled) { + if (model.node && ((visibility & model.node.layer) === model.node.layer) + || (visibility & model.visFlags)) { + if (model.bakeToReflectionProbe) { + ReflectionProbeManager.probeManager.addRenderObject(camera, getRenderObject(model, camera)); + } + } + } + } +} diff --git a/cocos/scene-graph/scene.ts b/cocos/scene-graph/scene.ts index 02aa59c2461..63ac4fdb3a7 100644 --- a/cocos/scene-graph/scene.ts +++ b/cocos/scene-graph/scene.ts @@ -74,6 +74,20 @@ export class Scene extends Node { @serializable public _globals = new SceneGlobals(); + /** + * @en The id of the reflection probe is not duplicated. + * @zh 反射探针的id,同一个场景id不会重复 + */ + @serializable + private _reflectionProbeId = 0; + /** + * @en When a new reflection probe is added to the scene, a probe id needs to be generated. + * @zh 场景添加新的反射探针时,需要生成一个探针id + */ + public getNewReflectionProbeId (): number { + return this._reflectionProbeId++; + } + public dependAssets = null; // cache all depend assets for auto release protected _renderScene: RenderScene | null = null; diff --git a/editor/assets/chunks/builtin/uniforms/cc-reflection-probe.chunk b/editor/assets/chunks/builtin/uniforms/cc-reflection-probe.chunk new file mode 100644 index 00000000000..e189a8501d7 --- /dev/null +++ b/editor/assets/chunks/builtin/uniforms/cc-reflection-probe.chunk @@ -0,0 +1,12 @@ +// Copyright (c) 2017-2020 Xiamen Yaji Software Co., Ltd. + +#pragma define-meta USE_REFLECTION_PROBE range([0, 2]) +#pragma define REFLECTION_PROBE_NONE 0 +#pragma define REFLECTION_PROBE_CUBE 1 +#pragma define REFLECTION_PROBE_PLANAR 2 + +#pragma builtin(local) +layout(set = 2, binding = 14) uniform samplerCube cc_reflectionProbeCubemap; + +#pragma builtin(local) +layout(set = 2, binding = 15) uniform sampler2D cc_reflectionProbePlanarMap; diff --git a/editor/assets/chunks/builtin/uniforms/cc-reflection-probe.chunk.meta b/editor/assets/chunks/builtin/uniforms/cc-reflection-probe.chunk.meta new file mode 100644 index 00000000000..e5b9603c088 --- /dev/null +++ b/editor/assets/chunks/builtin/uniforms/cc-reflection-probe.chunk.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.0.7", + "importer": "effect-header", + "imported": true, + "uuid": "960cff1c-912a-47d1-a3d9-9a25a9568508", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/editor/assets/chunks/legacy/shading-standard-base.chunk b/editor/assets/chunks/legacy/shading-standard-base.chunk index 2de3871eb14..f394b8a5a62 100644 --- a/editor/assets/chunks/legacy/shading-standard-base.chunk +++ b/editor/assets/chunks/legacy/shading-standard-base.chunk @@ -8,6 +8,7 @@ #if CC_USE_IBL #include + #include #include #include @@ -43,18 +44,36 @@ vec3 BRDFApprox (vec3 specular, float roughness, float NoV) { return specular * AB.x + AB.y; } +vec2 getScreenUV(vec3 worldPos) +{ + vec4 clipPos = cc_matViewProj * vec4(worldPos, 1.0); + vec2 screenUV = clipPos.xy / clipPos.w * 0.5 + 0.5; + screenUV = vec2(1.0 - screenUV.x, 1.0 - screenUV.y); + screenUV = cc_cameraPos.w > 1.0 ? vec2(screenUV.x, 1.0 - screenUV.y) : screenUV; + return screenUV; +} + #if USE_REFLECTION_DENOISE #pragma extension([GL_OES_standard_derivatives, __VERSION__ < 110]) - vec3 GetEnvReflectionWithMipFiltering(vec3 R, float roughness, float mipCount, float denoiseIntensity) { + vec3 GetEnvReflectionWithMipFiltering(vec3 R, float roughness, float mipCount, float denoiseIntensity, vec2 screenUV) { #if CC_USE_IBL float mip = roughness * (mipCount - 1.0); float delta = (dot(dFdx(R), dFdy(R))) * 1000.0; float mipBias = mix(0.0, 5.0, clamp(delta, 0.0, 1.0)); - vec4 biased = fragTextureLod(cc_environment, R, mip + mipBias); - vec4 filtered = texture(cc_environment, R); - #if CC_USE_IBL == IBL_RGBE + #if USE_REFLECTION_PROBE == REFLECTION_PROBE_CUBE + vec4 biased = fragTextureLod(cc_reflectionProbeCubemap, R, mip + mipBias); + vec4 filtered = texture(cc_reflectionProbeCubemap, R); + #elif USE_REFLECTION_PROBE == REFLECTION_PROBE_PLANAR + vec4 biased = fragTextureLod(cc_reflectionProbePlanarMap, screenUV, mip + mipBias); + vec4 filtered = texture(cc_reflectionProbePlanarMap, screenUV); + #else + vec4 biased = fragTextureLod(cc_environment, R, mip + mipBias); + vec4 filtered = texture(cc_environment, R); + #endif + + #if CC_USE_IBL == IBL_RGBE || USE_REFLECTION_PROBE != REFLECTION_PROBE_NONE biased.rgb = unpackRGBE(biased); filtered.rgb = unpackRGBE(filtered); #else @@ -165,11 +184,26 @@ vec4 CCStandardShadingBase (StandardSurface s, vec4 shadowPos) { vec3 rotationDir = RotationVecFromAxisY(R.xyz, cc_surfaceTransform.z, cc_surfaceTransform.w); #if USE_REFLECTION_DENOISE && !CC_IBL_CONVOLUTED - vec3 env = GetEnvReflectionWithMipFiltering(rotationDir, s.roughness, cc_ambientGround.w, 0.6); + #if USE_REFLECTION_PROBE == REFLECTION_PROBE_CUBE + vec3 env = GetEnvReflectionWithMipFiltering(R, s.roughness, cc_ambientGround.w, 0.6, vec2(0.0)); + #elif USE_REFLECTION_PROBE == REFLECTION_PROBE_PLANAR + vec2 screenUV = getScreenUV(s.position); + vec3 env = GetEnvReflectionWithMipFiltering(R, s.roughness, cc_ambientGround.w, 0.6, screenUV); + #else + vec3 env = GetEnvReflectionWithMipFiltering(rotationDir, s.roughness, cc_ambientGround.w, 0.6, vec2(0.0)); + #endif #else - vec4 envmap = fragTextureLod(cc_environment, rotationDir, s.roughness * (cc_ambientGround.w - 1.0)); + #if USE_REFLECTION_PROBE == REFLECTION_PROBE_CUBE + vec4 envmap = fragTextureLod(cc_reflectionProbeCubemap, R, s.roughness * (cc_ambientGround.w - 1.0)); + #elif USE_REFLECTION_PROBE == REFLECTION_PROBE_PLANAR + vec2 screenUV = getScreenUV(s.position); + vec4 envmap = texture(cc_reflectionProbePlanarMap, screenUV); + #else + vec4 envmap = fragTextureLod(cc_environment, rotationDir, s.roughness * (cc_ambientGround.w - 1.0)); + #endif + - #if CC_USE_IBL == IBL_RGBE + #if CC_USE_IBL == IBL_RGBE || USE_REFLECTION_PROBE != NONE vec3 env = unpackRGBE(envmap); #else vec3 env = SRGBToLinear(envmap.rgb); diff --git a/editor/assets/chunks/legacy/standard-surface-entry.chunk b/editor/assets/chunks/legacy/standard-surface-entry.chunk index 78f968872df..b42a39c4596 100644 --- a/editor/assets/chunks/legacy/standard-surface-entry.chunk +++ b/editor/assets/chunks/legacy/standard-surface-entry.chunk @@ -35,6 +35,9 @@ #if CC_USE_FOG != CC_FOG_NONE \ CC_APPLY_FOG(color, s.position.xyz); \ #endif \ + #if CC_USE_RGBE_OUTPUT \ + color = packRGBE(color.rgb); \ + #endif \ fragColorX = color; \ } \ \ diff --git a/editor/assets/chunks/shading-entries/main-functions/misc/sky-fs.chunk b/editor/assets/chunks/shading-entries/main-functions/misc/sky-fs.chunk index ed9e54a4f8c..baeb8b05393 100644 --- a/editor/assets/chunks/shading-entries/main-functions/misc/sky-fs.chunk +++ b/editor/assets/chunks/shading-entries/main-functions/misc/sky-fs.chunk @@ -26,5 +26,9 @@ void main() { #endif color.rgb = LinearToSRGB(color.rgb); + #if CC_USE_RGBE_OUTPUT + color = packRGBE(color.rgb); + #endif + fragColorX = color; } diff --git a/editor/assets/chunks/surfaces/includes/common-fs.chunk b/editor/assets/chunks/surfaces/includes/common-fs.chunk index 2d967c0cec4..41bcaac578c 100644 --- a/editor/assets/chunks/surfaces/includes/common-fs.chunk +++ b/editor/assets/chunks/surfaces/includes/common-fs.chunk @@ -28,6 +28,7 @@ #endif #if CC_USE_IBL #include + #include #if CC_USE_DIFFUSEMAP #include #endif diff --git a/editor/assets/effects/pipeline/skybox.effect b/editor/assets/effects/pipeline/skybox.effect index 2f94ab40b11..8f6acbd3e68 100644 --- a/editor/assets/effects/pipeline/skybox.effect +++ b/editor/assets/effects/pipeline/skybox.effect @@ -68,6 +68,10 @@ CCProgram sky-fs %{ #else vec3 c = SRGBToLinear(fragTextureLod(environmentMap, rotationDir.xyz, 0.0).rgb); #endif - return CCFragOutput(vec4(c * cc_ambientSky.w, 1.0)); + vec4 color = CCFragOutput(vec4(c * cc_ambientSky.w, 1.0)); + #if CC_USE_RGBE_OUTPUT + color = packRGBE(color.rgb); + #endif + return color; } }% diff --git a/editor/assets/effects/surfaces/standard.effect b/editor/assets/effects/surfaces/standard.effect index 4d8c94aac5b..66eecbe8050 100644 --- a/editor/assets/effects/surfaces/standard.effect +++ b/editor/assets/effects/surfaces/standard.effect @@ -58,6 +58,11 @@ CCEffect %{ albedoScale: { value: [1.0, 1.0, 1.0], target: albedoScaleAndCutoff.xyz } alphaThreshold: { value: 0.5, target: albedoScaleAndCutoff.w, editor: { parent: USE_ALPHA_TEST } } mainTexture: { value: grey, target: albedoMap, editor: { displayName: AlbedoMap } } + - &reflect-map + vert: standard-vs + frag: reflect-map-fs + phase: reflect-map + propertyIndex: 0 - name: transparent passes: - vert: standard-vs @@ -363,3 +368,16 @@ CCProgram shadow-caster-fs %{ #include #include }% + + +CCProgram reflect-map-fs %{ + precision highp float; + #include + #include + #include + #include + #include + #include + #include + #include +}% diff --git a/editor/assets/effects/surfaces/standard.effect.meta b/editor/assets/effects/surfaces/standard.effect.meta index 1bdb51d35b1..5b30640057c 100644 --- a/editor/assets/effects/surfaces/standard.effect.meta +++ b/editor/assets/effects/surfaces/standard.effect.meta @@ -9,6 +9,7 @@ "subMetas": {}, "userData": { "combinations": [ + {}, {}, {} ] diff --git a/editor/inspector/components.js b/editor/inspector/components.js index 0ac285836d1..3b44751c1ec 100644 --- a/editor/inspector/components.js +++ b/editor/inspector/components.js @@ -20,5 +20,6 @@ module.exports = { 'cc.WebView': join(__dirname, './components/webview.js'), 'cc.Widget': join(__dirname, './components/widget.js'), 'cc.Class': join(__dirname, './components/class.js'), + 'cc.ReflectionProbe': join(__dirname, './components/reflection-probe.js'), 'cc.LODGroup': join(__dirname, './components/lodGroup/index.js'), }; diff --git a/editor/inspector/components/reflection-probe.js b/editor/inspector/components/reflection-probe.js new file mode 100644 index 00000000000..ae40d1e60da --- /dev/null +++ b/editor/inspector/components/reflection-probe.js @@ -0,0 +1,28 @@ +const { template, $, update } = require('./base'); +const MARGIN = '4PX'; + +exports.template = template; +exports.$ = $; +exports.update = update; + +exports.ready = function() { + const $prop = document.createElement('ui-prop'); + this.$.componentContainer.before($prop); + + const $label = document.createElement('ui-label'); + $label.setAttribute('slot', 'label'); + $label.value = 'Generate'; + $prop.appendChild($label); + + const $button = document.createElement('ui-button'); + $button.setAttribute('slot', 'content'); + $button.setAttribute('class', 'blue'); + $button.innerText = 'Generate'; + $prop.appendChild($button); + + $button.addEventListener('confirm', async () => { + // Call the bakeCubemap function in the Reflection Probe component + }); +}; + + From 6e0bd997f89d2d38212c95d58e57afa91a59f18a Mon Sep 17 00:00:00 2001 From: lealzhan Date: Thu, 27 Oct 2022 16:06:05 +0800 Subject: [PATCH 095/829] [fix] builtin-2d-physics removeShape() slow #12843 --- cocos/physics-2d/builtin/builtin-world.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cocos/physics-2d/builtin/builtin-world.ts b/cocos/physics-2d/builtin/builtin-world.ts index ac36d4364b0..419f4281191 100644 --- a/cocos/physics-2d/builtin/builtin-world.ts +++ b/cocos/physics-2d/builtin/builtin-world.ts @@ -13,6 +13,7 @@ import { BuiltinContact } from './builtin-contact'; import { legacyCC } from '../../core/global-exports'; import { Node, find } from '../../scene-graph'; import { director } from '../../game'; +import { fastRemoveAt } from '../../core/utils/array'; const contactResults: BuiltinContact[] = []; const testIntersectResults: Collider2D[] = []; @@ -59,8 +60,7 @@ export class BuiltinPhysicsWorld implements IPhysicsWorld { const shapes = this._shapes; const index = shapes.indexOf(shape); if (index >= 0) { - shapes.splice(index, 1); - + fastRemoveAt(shapes, index); const contacts = this._contacts; for (let i = contacts.length - 1; i >= 0; i--) { const contact = contacts[i]; @@ -69,7 +69,7 @@ export class BuiltinPhysicsWorld implements IPhysicsWorld { this._emitCollide(contact, Contact2DType.END_CONTACT); } - contacts.splice(i, 1); + fastRemoveAt(contacts, i); } } } From 4b37b9999c79852e1e88a2a72eded79ff78e56d0 Mon Sep 17 00:00:00 2001 From: lealzhan Date: Thu, 27 Oct 2022 17:34:06 +0800 Subject: [PATCH 096/829] [fix] builtin-2d-physics removeShape() slow #12843 --- cocos/physics-2d/builtin/builtin-world.ts | 26 ++++++++++++++++----- cocos/physics-2d/builtin/shapes/shape-2d.ts | 3 +++ 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/cocos/physics-2d/builtin/builtin-world.ts b/cocos/physics-2d/builtin/builtin-world.ts index 419f4281191..5c978ee6725 100644 --- a/cocos/physics-2d/builtin/builtin-world.ts +++ b/cocos/physics-2d/builtin/builtin-world.ts @@ -49,6 +49,8 @@ export class BuiltinPhysicsWorld implements IPhysicsWorld { if (this.shouldCollide(shape, other)) { const contact = new BuiltinContact(shape, other); this._contacts.push(contact); + if (shape._contacts.indexOf(contact) === -1) { shape._contacts.push(contact); } + if (other._contacts.indexOf(contact) === -1) { other._contacts.push(contact); } } } @@ -61,15 +63,27 @@ export class BuiltinPhysicsWorld implements IPhysicsWorld { const index = shapes.indexOf(shape); if (index >= 0) { fastRemoveAt(shapes, index); - const contacts = this._contacts; - for (let i = contacts.length - 1; i >= 0; i--) { - const contact = contacts[i]; - if (contact.shape1 === shape || contact.shape2 === shape) { + + for (let i = 0; i < shape._contacts.length; i++) { + const contact = shape._contacts[i]; + const cIndex = this._contacts.indexOf(contact); + if (cIndex >= 0) { + //remove corresponding contact from another shape + let otherShape; + if (contact.shape1 === shape) { + otherShape = contact.shape2; + } else { + otherShape = contact.shape1; + } + const cIndex1 = otherShape._contacts.indexOf(contact); + if (cIndex1 > 0) { + fastRemoveAt(otherShape._contacts, cIndex1); + } + if (contact.touching) { this._emitCollide(contact, Contact2DType.END_CONTACT); } - - fastRemoveAt(contacts, i); + fastRemoveAt(this._contacts, cIndex); } } } diff --git a/cocos/physics-2d/builtin/shapes/shape-2d.ts b/cocos/physics-2d/builtin/shapes/shape-2d.ts index 8a4e106a760..6684e1b777e 100644 --- a/cocos/physics-2d/builtin/shapes/shape-2d.ts +++ b/cocos/physics-2d/builtin/shapes/shape-2d.ts @@ -2,11 +2,14 @@ import { IBaseShape } from '../../spec/i-physics-shape'; import { Collider2D, PhysicsSystem2D } from '../../../../exports/physics-2d-framework'; import { Rect, Vec2 } from '../../../core'; import { BuiltinPhysicsWorld } from '../builtin-world'; +import { BuiltinContact } from '../builtin-contact'; export class BuiltinShape2D implements IBaseShape { protected _collider: Collider2D | null = null; protected _worldAabb = new Rect(); + //contacts contain this Shape + public _contacts: BuiltinContact[] = []; get impl () { return null; From e43f18d764d7e232362f53ca5cd5bf3bb636955c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=90=89=E6=9E=97?= <798080536@qq.com> Date: Thu, 27 Oct 2022 22:05:22 +0800 Subject: [PATCH 097/829] add light probe bake setting (#13169) * add light probe bake setting --- cocos/3d/framework/mesh-renderer.ts | 32 +- cocos/gi/light-probe/light-probe-group.ts | 2 +- cocos/gi/light-probe/light-probe.ts | 39 ++ cocos/gi/light-probe/sh.ts | 9 +- cocos/scene-graph/scene-globals.jsb.ts | 12 + cocos/scene-graph/scene-globals.ts | 65 +++ editor/i18n/en/localization.js | 3 + editor/i18n/zh/localization.js | 3 + native/cocos/bindings/auto/jsb_gi_auto.cpp | 534 ++++++++++++++++++++- native/cocos/gi/light-probe/LightProbe.cpp | 3 + native/cocos/gi/light-probe/LightProbe.h | 51 ++ native/cocos/gi/light-probe/SH.cpp | 7 +- native/cocos/gi/light-probe/SH.h | 2 +- native/tools/swig-config/gi.i | 10 +- 14 files changed, 731 insertions(+), 41 deletions(-) diff --git a/cocos/3d/framework/mesh-renderer.ts b/cocos/3d/framework/mesh-renderer.ts index e21d00001f4..b59ae4948ba 100644 --- a/cocos/3d/framework/mesh-renderer.ts +++ b/cocos/3d/framework/mesh-renderer.ts @@ -309,22 +309,6 @@ export class MeshRenderer extends ModelRenderer { this._updateReceiveShadow(); } - /** - * @en Whether to use light probe which provides indirect light to dynamic objects. - * @zh 模型是否使用光照探针,光照探针为动态物体提供间接光。 - */ - @type(CCBoolean) - // eslint-disable-next-line func-names - @visible(function (this: MeshRenderer) { return !!(this.node && this.node.mobility === MobilityMode.Movable); }) - get useLightProbe () { - return this._useLightProbe; - } - - set useLightProbe (val) { - this._useLightProbe = val; - this._updateUseLightProbe(); - } - /** * @en Gets or sets the mesh of the model. * Note, when set, all morph targets' weights would be reset to zero. @@ -353,6 +337,22 @@ export class MeshRenderer extends ModelRenderer { this._updateUseLightProbe(); } + /** + * @en Whether to use light probe which provides indirect light to dynamic objects. + * @zh 模型是否使用光照探针,光照探针为动态物体提供间接光。 + */ + @type(CCBoolean) + // eslint-disable-next-line func-names + @visible(function (this: MeshRenderer) { return !!(this.node && this.node.mobility === MobilityMode.Movable); }) + get useLightProbe () { + return this._useLightProbe; + } + + set useLightProbe (val) { + this._useLightProbe = val; + this._updateUseLightProbe(); + } + /** * @en Whether the model can be render by the reflection probe * @zh 模型是否能被反射探针渲染 diff --git a/cocos/gi/light-probe/light-probe-group.ts b/cocos/gi/light-probe/light-probe-group.ts index ee2d9b8bf64..3319ffa9c3d 100644 --- a/cocos/gi/light-probe/light-probe-group.ts +++ b/cocos/gi/light-probe/light-probe-group.ts @@ -35,7 +35,7 @@ import { AutoPlacement, PlaceMethod } from './auto-placement'; * @zh 光照探针组组件。 */ @ccclass('cc.LightProbeGroup') -@menu('GI/LightProbeGroup') +@menu('Rendering/LightProbeGroup') @disallowMultiple @executeInEditMode export class LightProbeGroup extends Component { diff --git a/cocos/gi/light-probe/light-probe.ts b/cocos/gi/light-probe/light-probe.ts index f9f781e4031..a2c67f5c6af 100644 --- a/cocos/gi/light-probe/light-probe.ts +++ b/cocos/gi/light-probe/light-probe.ts @@ -266,6 +266,39 @@ export class LightProbes { return this._enabled; } + /** + * @en GI multiplier + * @zh GI乘数 + */ + set giScale (val: number) { + this._giScale = val; + } + get giScale (): number { + return this._giScale; + } + + /** + * @en GI sample counts + * @zh GI 采样数量 + */ + set giSamples (val: number) { + this._giSamples = val; + } + get giSamples (): number { + return this._giSamples; + } + + /** + * @en light bounces + * @zh 光照反弹次数 + */ + set bounces (val: number) { + this._bounces = val; + } + get bounces (): number { + return this._bounces; + } + /** * @en Reduce ringing of light probe * @zh 减少光照探针的振铃效果 @@ -322,6 +355,9 @@ export class LightProbes { } protected _enabled = false; + protected _giScale = 1.0; + protected _giSamples = 1024; + protected _bounces = 2; protected _reduceRinging = 0.0; protected _showProbe = true; protected _showWireframe = true; @@ -330,6 +366,9 @@ export class LightProbes { public initialize (info: LightProbeInfo) { this._enabled = info.enabled; + this._giScale = info.giScale; + this._giSamples = info.giSamples; + this._bounces = info.bounces; this._reduceRinging = info.reduceRinging; this._showProbe = info.showProbe; this._showWireframe = info.showWireframe; diff --git a/cocos/gi/light-probe/sh.ts b/cocos/gi/light-probe/sh.ts index 15dcfc6325c..4bfc9eea80f 100644 --- a/cocos/gi/light-probe/sh.ts +++ b/cocos/gi/light-probe/sh.ts @@ -46,8 +46,11 @@ export class LightProbeSampler { /** * generate ucount1 * ucount2 samples from sphere uniformly */ - public static uniformSamplesSphereAll (uCount1: number, uCount2: number) { - assertIsTrue(uCount1 > 0 && uCount2 > 0); + public static uniformSampleSphereAll (sampleCount: number) { + assertIsTrue(sampleCount > 0); + + const uCount1 = Math.floor(Math.sqrt(sampleCount)); + const uCount2 = uCount1; const samples: Vec3[] = []; const uDelta1 = 1.0 / uCount1; @@ -324,4 +327,4 @@ export class SH { return l * l + l + m; } } -cclegacy.internal.SH = SH; \ No newline at end of file +cclegacy.internal.SH = SH; diff --git a/cocos/scene-graph/scene-globals.jsb.ts b/cocos/scene-graph/scene-globals.jsb.ts index 3c481838f34..a15cbe88328 100644 --- a/cocos/scene-graph/scene-globals.jsb.ts +++ b/cocos/scene-graph/scene-globals.jsb.ts @@ -478,6 +478,9 @@ ccclass('cc.AmbientInfo')(AmbientInfo); const LightProbeInfoProto = LightProbeInfo.prototype; serializable(LightProbeInfoProto, '_enabled'); +serializable(LightProbeInfoProto, '_giScale'); +serializable(LightProbeInfoProto, '_giSamples'); +serializable(LightProbeInfoProto, '_bounces'); serializable(LightProbeInfoProto, '_reduceRinging'); serializable(LightProbeInfoProto, '_showProbe'); serializable(LightProbeInfoProto, '_showWireframe'); @@ -486,6 +489,15 @@ serializable(LightProbeInfoProto, '_data'); const lightProbeEnabledDescriptor = Object.getOwnPropertyDescriptor(LightProbeInfo, 'enabled'); tooltip('i18n:light_probe.enabled')(LightProbeInfo, 'enabled', lightProbeEnabledDescriptor); editable(LightProbeInfo, 'enabled', lightProbeEnabledDescriptor); +const lightProbeGIScaleRingingDescriptor = Object.getOwnPropertyDescriptor(LightProbeInfo, 'giScale'); +tooltip('i18n:light_probe.giScale')(LightProbeInfo, 'giScale', lightProbeGIScaleRingingDescriptor); +editable(LightProbeInfo, 'giScale', lightProbeGIScaleRingingDescriptor); +const lightProbeGISamplesRingingDescriptor = Object.getOwnPropertyDescriptor(LightProbeInfo, 'giSamples'); +tooltip('i18n:light_probe.giSamples')(LightProbeInfo, 'giSamples', lightProbeGISamplesRingingDescriptor); +editable(LightProbeInfo, 'giSamples', lightProbeGISamplesRingingDescriptor); +const lightProbeBouncesRingingDescriptor = Object.getOwnPropertyDescriptor(LightProbeInfo, 'bounces'); +tooltip('i18n:light_probe.bounces')(LightProbeInfo, 'bounces', lightProbeBouncesRingingDescriptor); +editable(LightProbeInfo, 'bounces', lightProbeBouncesRingingDescriptor); const lightProbeReduceRingingDescriptor = Object.getOwnPropertyDescriptor(LightProbeInfo, 'reduceRinging'); tooltip('i18n:light_probe.reduceRinging')(LightProbeInfo, 'reduceRinging', lightProbeReduceRingingDescriptor); editable(LightProbeInfo, 'reduceRinging', lightProbeReduceRingingDescriptor); diff --git a/cocos/scene-graph/scene-globals.ts b/cocos/scene-graph/scene-globals.ts index 1c85372f4d8..9f4119366d0 100644 --- a/cocos/scene-graph/scene-globals.ts +++ b/cocos/scene-graph/scene-globals.ts @@ -1078,6 +1078,65 @@ export class LightProbeInfo { return this._enabled; } + /** + * @en GI multiplier + * @zh GI乘数 + */ + @editable + @range([0.1, 10, 0.1]) + @type(CCFloat) + @tooltip('i18n:light_probe.giScale') + @displayName('GIScale') + set giScale (val: number) { + if (this._giScale === val) return; + this._giScale = val; + if (this._resource) { + this._resource.giScale = val; + } + } + get giScale (): number { + return this._giScale; + } + + /** + * @en GI sample counts + * @zh GI 采样数量 + */ + @editable + @range([64, 4096, 1]) + @type(CCInteger) + @tooltip('i18n:light_probe.giSamples') + @displayName('GISamples') + set giSamples (val: number) { + if (this._giSamples === val) return; + this._giSamples = val; + if (this._resource) { + this._resource.giSamples = val; + } + } + get giSamples (): number { + return this._giSamples; + } + + /** + * @en light bounces + * @zh 光照反弹次数 + */ + @editable + @range([1, 4, 1]) + @type(CCInteger) + @tooltip('i18n:light_probe.bounces') + set bounces (val: number) { + if (this._bounces === val) return; + this._bounces = val; + if (this._resource) { + this._resource.bounces = val; + } + } + get bounces (): number { + return this._bounces; + } + /** * @en Reduce ringing of light probe * @zh 减少光照探针的振铃效果 @@ -1167,6 +1226,12 @@ export class LightProbeInfo { @serializable protected _enabled = false; @serializable + protected _giScale = 1.0; + @serializable + protected _giSamples = 1024; + @serializable + protected _bounces = 2; + @serializable protected _reduceRinging = 0.0; @serializable protected _showProbe = true; diff --git a/editor/i18n/en/localization.js b/editor/i18n/en/localization.js index 5883153bbda..75f4f9518bb 100755 --- a/editor/i18n/en/localization.js +++ b/editor/i18n/en/localization.js @@ -1034,6 +1034,9 @@ module.exports = { }, light_probe: { enabled: 'The switch of light probe.', + giScale: 'The value of GI multiplier.', + giSamples: 'The value of GI sample counts.', + bounces: 'The value of light bounces.', reduceRinging: 'The value to reduce ringing of light probe.', showProbe: 'The switch of showing light probe.', showWireframe: 'The switch of showing connection of light probe.', diff --git a/editor/i18n/zh/localization.js b/editor/i18n/zh/localization.js index ab6c12b8f87..721829d43f0 100755 --- a/editor/i18n/zh/localization.js +++ b/editor/i18n/zh/localization.js @@ -1015,6 +1015,9 @@ module.exports = { }, light_probe: { enabled: '光照探针开关', + giScale: 'GI乘数', + giSamples: 'GI采样数量', + bounces: '光照反弹次数', reduceRinging: '减少光照探针的振铃效果', showProbe: '是否显示光照探针', showWireframe: '是否显示光照探针连线', diff --git a/native/cocos/bindings/auto/jsb_gi_auto.cpp b/native/cocos/bindings/auto/jsb_gi_auto.cpp index 009e025ce1a..50f9de6c442 100644 --- a/native/cocos/bindings/auto/jsb_gi_auto.cpp +++ b/native/cocos/bindings/auto/jsb_gi_auto.cpp @@ -79,6 +79,18 @@ using namespace cc::gi; #define cc_gi_LightProbes_enabled_set(self_, val_) self_->setEnabled(val_) +#define cc_gi_LightProbes_giScale_get(self_) self_->getGIScale() +#define cc_gi_LightProbes_giScale_set(self_, val_) self_->setGIScale(val_) + + +#define cc_gi_LightProbes_giSamples_get(self_) self_->getGISamples() +#define cc_gi_LightProbes_giSamples_set(self_, val_) self_->setGISamples(val_) + + +#define cc_gi_LightProbes_bounces_get(self_) self_->getBounces() +#define cc_gi_LightProbes_bounces_set(self_, val_) self_->setBounces(val_) + + #define cc_gi_LightProbes_reduceRinging_get(self_) self_->getReduceRinging() #define cc_gi_LightProbes_reduceRinging_set(self_, val_) self_->setReduceRinging(val_) @@ -103,6 +115,18 @@ using namespace cc::gi; #define cc_gi_LightProbeInfo_enabled_set(self_, val_) self_->setEnabled(val_) +#define cc_gi_LightProbeInfo_giScale_get(self_) self_->getGIScale() +#define cc_gi_LightProbeInfo_giScale_set(self_, val_) self_->setGIScale(val_) + + +#define cc_gi_LightProbeInfo_giSamples_get(self_) self_->getGISamples() +#define cc_gi_LightProbeInfo_giSamples_set(self_, val_) self_->setGISamples(val_) + + +#define cc_gi_LightProbeInfo_bounces_get(self_) self_->getBounces() +#define cc_gi_LightProbeInfo_bounces_set(self_, val_) self_->setBounces(val_) + + #define cc_gi_LightProbeInfo_reduceRinging_get(self_) self_->getReduceRinging() #define cc_gi_LightProbeInfo_reduceRinging_set(self_, val_) self_->setReduceRinging(val_) @@ -1942,6 +1966,116 @@ static bool js_cc_gi_LightProbes__enabled_get(se::State& s) } SE_BIND_PROP_GET(js_cc_gi_LightProbes__enabled_get) +static bool js_cc_gi_LightProbes__giScale_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbes *arg1 = (cc::gi::LightProbes *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg1->_giScale, nullptr); + SE_PRECONDITION2(ok, false, "LightProbes__giScale_set,2,SWIGTYPE_float"); + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_LightProbes__giScale_set) + +static bool js_cc_gi_LightProbes__giScale_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::LightProbes *arg1 = (cc::gi::LightProbes *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // out 1 + ok &= nativevalue_to_se(arg1->_giScale, s.rval(), s.thisObject() /*ctx*/); + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_LightProbes__giScale_get) + +static bool js_cc_gi_LightProbes__giSamples_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbes *arg1 = (cc::gi::LightProbes *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg1->_giSamples, s.thisObject()); + SE_PRECONDITION2(ok, false, "LightProbes__giSamples_set,2,SWIGTYPE_uint32_t"); + + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_LightProbes__giSamples_set) + +static bool js_cc_gi_LightProbes__giSamples_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::LightProbes *arg1 = (cc::gi::LightProbes *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(arg1->_giSamples, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "LightProbes__giSamples_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(arg1->_giSamples, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_LightProbes__giSamples_get) + +static bool js_cc_gi_LightProbes__bounces_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbes *arg1 = (cc::gi::LightProbes *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg1->_bounces, s.thisObject()); + SE_PRECONDITION2(ok, false, "LightProbes__bounces_set,2,SWIGTYPE_uint32_t"); + + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_LightProbes__bounces_set) + +static bool js_cc_gi_LightProbes__bounces_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::LightProbes *arg1 = (cc::gi::LightProbes *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(arg1->_bounces, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "LightProbes__bounces_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(arg1->_bounces, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_LightProbes__bounces_get) + static bool js_cc_gi_LightProbes__reduceRinging_set(se::State& s) { CC_UNUSED bool ok = true; @@ -2150,19 +2284,141 @@ static bool js_cc_gi_LightProbes_enabled_get(se::State& s) } SE_BIND_PROP_GET(js_cc_gi_LightProbes_enabled_get) +static bool js_cc_gi_LightProbes_giScale_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbes *arg1 = (cc::gi::LightProbes *) NULL ; + float arg2 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "LightProbes_giScale_set,2,SWIGTYPE_float"); + cc_gi_LightProbes_giScale_set(arg1,arg2); + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_LightProbes_giScale_set) + +static bool js_cc_gi_LightProbes_giScale_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::LightProbes *arg1 = (cc::gi::LightProbes *) NULL ; + float result; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (float)cc_gi_LightProbes_giScale_get(arg1); + + // out 1 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_LightProbes_giScale_get) + +static bool js_cc_gi_LightProbes_giSamples_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbes *arg1 = (cc::gi::LightProbes *) NULL ; + uint32_t arg2 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "LightProbes_giSamples_set,2,SWIGTYPE_uint32_t"); + + cc_gi_LightProbes_giSamples_set(arg1,arg2); + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_LightProbes_giSamples_set) + +static bool js_cc_gi_LightProbes_giSamples_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::LightProbes *arg1 = (cc::gi::LightProbes *) NULL ; + uint32_t result; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = cc_gi_LightProbes_giSamples_get(arg1); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "LightProbes_giSamples_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_LightProbes_giSamples_get) + +static bool js_cc_gi_LightProbes_bounces_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbes *arg1 = (cc::gi::LightProbes *) NULL ; + uint32_t arg2 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "LightProbes_bounces_set,2,SWIGTYPE_uint32_t"); + + cc_gi_LightProbes_bounces_set(arg1,arg2); + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_LightProbes_bounces_set) + +static bool js_cc_gi_LightProbes_bounces_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::LightProbes *arg1 = (cc::gi::LightProbes *) NULL ; + uint32_t result; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = cc_gi_LightProbes_bounces_get(arg1); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "LightProbes_bounces_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_LightProbes_bounces_get) + static bool js_cc_gi_LightProbes_reduceRinging_set(se::State& s) { CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); cc::gi::LightProbes *arg1 = (cc::gi::LightProbes *) NULL ; - bool arg2 ; + float arg2 ; arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) bool - ok &= sevalue_to_native(args[0], &arg2); - SE_PRECONDITION2(ok, false, "LightProbes_reduceRinging_set,2,SWIGTYPE_bool"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "LightProbes_reduceRinging_set,2,SWIGTYPE_float"); cc_gi_LightProbes_reduceRinging_set(arg1,arg2); @@ -2174,13 +2430,14 @@ static bool js_cc_gi_LightProbes_reduceRinging_get(se::State& s) { CC_UNUSED bool ok = true; cc::gi::LightProbes *arg1 = (cc::gi::LightProbes *) NULL ; - bool result; + float result; arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (bool)cc_gi_LightProbes_reduceRinging_get(arg1); - // out 5 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + result = (float)cc_gi_LightProbes_reduceRinging_get(arg1); + + // out 1 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); return true; @@ -2344,12 +2601,18 @@ bool js_register_cc_gi_LightProbes(se::Object* obj) { auto* cls = se::Class::create("LightProbes", obj, nullptr, _SE(js_new_cc_gi_LightProbes)); cls->defineProperty("_enabled", _SE(js_cc_gi_LightProbes__enabled_get), _SE(js_cc_gi_LightProbes__enabled_set)); + cls->defineProperty("_giScale", _SE(js_cc_gi_LightProbes__giScale_get), _SE(js_cc_gi_LightProbes__giScale_set)); + cls->defineProperty("_giSamples", _SE(js_cc_gi_LightProbes__giSamples_get), _SE(js_cc_gi_LightProbes__giSamples_set)); + cls->defineProperty("_bounces", _SE(js_cc_gi_LightProbes__bounces_get), _SE(js_cc_gi_LightProbes__bounces_set)); cls->defineProperty("_reduceRinging", _SE(js_cc_gi_LightProbes__reduceRinging_get), _SE(js_cc_gi_LightProbes__reduceRinging_set)); cls->defineProperty("_showProbe", _SE(js_cc_gi_LightProbes__showProbe_get), _SE(js_cc_gi_LightProbes__showProbe_set)); cls->defineProperty("_showWireframe", _SE(js_cc_gi_LightProbes__showWireframe_get), _SE(js_cc_gi_LightProbes__showWireframe_set)); cls->defineProperty("_showConvex", _SE(js_cc_gi_LightProbes__showConvex_get), _SE(js_cc_gi_LightProbes__showConvex_set)); cls->defineProperty("_data", _SE(js_cc_gi_LightProbes__data_get), _SE(js_cc_gi_LightProbes__data_set)); cls->defineProperty("enabled", _SE(js_cc_gi_LightProbes_enabled_get), _SE(js_cc_gi_LightProbes_enabled_set)); + cls->defineProperty("giScale", _SE(js_cc_gi_LightProbes_giScale_get), _SE(js_cc_gi_LightProbes_giScale_set)); + cls->defineProperty("giSamples", _SE(js_cc_gi_LightProbes_giSamples_get), _SE(js_cc_gi_LightProbes_giSamples_set)); + cls->defineProperty("bounces", _SE(js_cc_gi_LightProbes_bounces_get), _SE(js_cc_gi_LightProbes_bounces_set)); cls->defineProperty("reduceRinging", _SE(js_cc_gi_LightProbes_reduceRinging_get), _SE(js_cc_gi_LightProbes_reduceRinging_set)); cls->defineProperty("showProbe", _SE(js_cc_gi_LightProbes_showProbe_get), _SE(js_cc_gi_LightProbes_showProbe_set)); cls->defineProperty("showWireframe", _SE(js_cc_gi_LightProbes_showWireframe_get), _SE(js_cc_gi_LightProbes_showWireframe_set)); @@ -2462,6 +2725,116 @@ static bool js_cc_gi_LightProbeInfo__enabled_get(se::State& s) } SE_BIND_PROP_GET(js_cc_gi_LightProbeInfo__enabled_get) +static bool js_cc_gi_LightProbeInfo__giScale_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbeInfo *arg1 = (cc::gi::LightProbeInfo *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg1->_giScale, nullptr); + SE_PRECONDITION2(ok, false, "LightProbeInfo__giScale_set,2,SWIGTYPE_float"); + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_LightProbeInfo__giScale_set) + +static bool js_cc_gi_LightProbeInfo__giScale_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::LightProbeInfo *arg1 = (cc::gi::LightProbeInfo *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // out 1 + ok &= nativevalue_to_se(arg1->_giScale, s.rval(), s.thisObject() /*ctx*/); + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_LightProbeInfo__giScale_get) + +static bool js_cc_gi_LightProbeInfo__giSamples_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbeInfo *arg1 = (cc::gi::LightProbeInfo *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg1->_giSamples, s.thisObject()); + SE_PRECONDITION2(ok, false, "LightProbeInfo__giSamples_set,2,SWIGTYPE_uint32_t"); + + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_LightProbeInfo__giSamples_set) + +static bool js_cc_gi_LightProbeInfo__giSamples_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::LightProbeInfo *arg1 = (cc::gi::LightProbeInfo *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(arg1->_giSamples, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "LightProbeInfo__giSamples_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(arg1->_giSamples, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_LightProbeInfo__giSamples_get) + +static bool js_cc_gi_LightProbeInfo__bounces_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbeInfo *arg1 = (cc::gi::LightProbeInfo *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg1->_bounces, s.thisObject()); + SE_PRECONDITION2(ok, false, "LightProbeInfo__bounces_set,2,SWIGTYPE_uint32_t"); + + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_LightProbeInfo__bounces_set) + +static bool js_cc_gi_LightProbeInfo__bounces_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::LightProbeInfo *arg1 = (cc::gi::LightProbeInfo *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(arg1->_bounces, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "LightProbeInfo__bounces_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(arg1->_bounces, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_LightProbeInfo__bounces_get) + static bool js_cc_gi_LightProbeInfo__reduceRinging_set(se::State& s) { CC_UNUSED bool ok = true; @@ -2670,19 +3043,141 @@ static bool js_cc_gi_LightProbeInfo_enabled_get(se::State& s) } SE_BIND_PROP_GET(js_cc_gi_LightProbeInfo_enabled_get) +static bool js_cc_gi_LightProbeInfo_giScale_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbeInfo *arg1 = (cc::gi::LightProbeInfo *) NULL ; + float arg2 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "LightProbeInfo_giScale_set,2,SWIGTYPE_float"); + cc_gi_LightProbeInfo_giScale_set(arg1,arg2); + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_LightProbeInfo_giScale_set) + +static bool js_cc_gi_LightProbeInfo_giScale_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::LightProbeInfo *arg1 = (cc::gi::LightProbeInfo *) NULL ; + float result; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (float)cc_gi_LightProbeInfo_giScale_get(arg1); + + // out 1 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_LightProbeInfo_giScale_get) + +static bool js_cc_gi_LightProbeInfo_giSamples_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbeInfo *arg1 = (cc::gi::LightProbeInfo *) NULL ; + uint32_t arg2 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "LightProbeInfo_giSamples_set,2,SWIGTYPE_uint32_t"); + + cc_gi_LightProbeInfo_giSamples_set(arg1,arg2); + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_LightProbeInfo_giSamples_set) + +static bool js_cc_gi_LightProbeInfo_giSamples_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::LightProbeInfo *arg1 = (cc::gi::LightProbeInfo *) NULL ; + uint32_t result; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = cc_gi_LightProbeInfo_giSamples_get(arg1); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "LightProbeInfo_giSamples_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_LightProbeInfo_giSamples_get) + +static bool js_cc_gi_LightProbeInfo_bounces_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbeInfo *arg1 = (cc::gi::LightProbeInfo *) NULL ; + uint32_t arg2 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "LightProbeInfo_bounces_set,2,SWIGTYPE_uint32_t"); + + cc_gi_LightProbeInfo_bounces_set(arg1,arg2); + + + return true; +} +SE_BIND_PROP_SET(js_cc_gi_LightProbeInfo_bounces_set) + +static bool js_cc_gi_LightProbeInfo_bounces_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gi::LightProbeInfo *arg1 = (cc::gi::LightProbeInfo *) NULL ; + uint32_t result; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = cc_gi_LightProbeInfo_bounces_get(arg1); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "LightProbeInfo_bounces_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_PROP_GET(js_cc_gi_LightProbeInfo_bounces_get) + static bool js_cc_gi_LightProbeInfo_reduceRinging_set(se::State& s) { CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); cc::gi::LightProbeInfo *arg1 = (cc::gi::LightProbeInfo *) NULL ; - bool arg2 ; + float arg2 ; arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) bool - ok &= sevalue_to_native(args[0], &arg2); - SE_PRECONDITION2(ok, false, "LightProbeInfo_reduceRinging_set,2,SWIGTYPE_bool"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "LightProbeInfo_reduceRinging_set,2,SWIGTYPE_float"); cc_gi_LightProbeInfo_reduceRinging_set(arg1,arg2); @@ -2694,13 +3189,14 @@ static bool js_cc_gi_LightProbeInfo_reduceRinging_get(se::State& s) { CC_UNUSED bool ok = true; cc::gi::LightProbeInfo *arg1 = (cc::gi::LightProbeInfo *) NULL ; - bool result; + float result; arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (bool)cc_gi_LightProbeInfo_reduceRinging_get(arg1); - // out 5 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + result = (float)cc_gi_LightProbeInfo_reduceRinging_get(arg1); + + // out 1 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); return true; @@ -2864,12 +3360,18 @@ bool js_register_cc_gi_LightProbeInfo(se::Object* obj) { auto* cls = se::Class::create("LightProbeInfo", obj, nullptr, _SE(js_new_cc_gi_LightProbeInfo)); cls->defineProperty("_enabled", _SE(js_cc_gi_LightProbeInfo__enabled_get), _SE(js_cc_gi_LightProbeInfo__enabled_set)); + cls->defineProperty("_giScale", _SE(js_cc_gi_LightProbeInfo__giScale_get), _SE(js_cc_gi_LightProbeInfo__giScale_set)); + cls->defineProperty("_giSamples", _SE(js_cc_gi_LightProbeInfo__giSamples_get), _SE(js_cc_gi_LightProbeInfo__giSamples_set)); + cls->defineProperty("_bounces", _SE(js_cc_gi_LightProbeInfo__bounces_get), _SE(js_cc_gi_LightProbeInfo__bounces_set)); cls->defineProperty("_reduceRinging", _SE(js_cc_gi_LightProbeInfo__reduceRinging_get), _SE(js_cc_gi_LightProbeInfo__reduceRinging_set)); cls->defineProperty("_showProbe", _SE(js_cc_gi_LightProbeInfo__showProbe_get), _SE(js_cc_gi_LightProbeInfo__showProbe_set)); cls->defineProperty("_showWireframe", _SE(js_cc_gi_LightProbeInfo__showWireframe_get), _SE(js_cc_gi_LightProbeInfo__showWireframe_set)); cls->defineProperty("_showConvex", _SE(js_cc_gi_LightProbeInfo__showConvex_get), _SE(js_cc_gi_LightProbeInfo__showConvex_set)); cls->defineProperty("_data", _SE(js_cc_gi_LightProbeInfo__data_get), _SE(js_cc_gi_LightProbeInfo__data_set)); cls->defineProperty("enabled", _SE(js_cc_gi_LightProbeInfo_enabled_get), _SE(js_cc_gi_LightProbeInfo_enabled_set)); + cls->defineProperty("giScale", _SE(js_cc_gi_LightProbeInfo_giScale_get), _SE(js_cc_gi_LightProbeInfo_giScale_set)); + cls->defineProperty("giSamples", _SE(js_cc_gi_LightProbeInfo_giSamples_get), _SE(js_cc_gi_LightProbeInfo_giSamples_set)); + cls->defineProperty("bounces", _SE(js_cc_gi_LightProbeInfo_bounces_get), _SE(js_cc_gi_LightProbeInfo_bounces_set)); cls->defineProperty("reduceRinging", _SE(js_cc_gi_LightProbeInfo_reduceRinging_get), _SE(js_cc_gi_LightProbeInfo_reduceRinging_set)); cls->defineProperty("showProbe", _SE(js_cc_gi_LightProbeInfo_showProbe_get), _SE(js_cc_gi_LightProbeInfo_showProbe_set)); cls->defineProperty("showWireframe", _SE(js_cc_gi_LightProbeInfo_showWireframe_get), _SE(js_cc_gi_LightProbeInfo_showWireframe_set)); diff --git a/native/cocos/gi/light-probe/LightProbe.cpp b/native/cocos/gi/light-probe/LightProbe.cpp index de9102175d4..31081edf199 100644 --- a/native/cocos/gi/light-probe/LightProbe.cpp +++ b/native/cocos/gi/light-probe/LightProbe.cpp @@ -190,6 +190,9 @@ void LightProbesData::getOuterCellBarycentricCoord(const Vec3 &position, const T void LightProbes::initialize(LightProbeInfo *info) { _enabled = info->isEnabled(); + _giScale = info->getGIScale(); + _giSamples = info->getGISamples(); + _bounces = info->getBounces(); _reduceRinging = info->getReduceRinging(); _showProbe = info->isShowProbe(); _showWireframe = info->isShowWireframe(); diff --git a/native/cocos/gi/light-probe/LightProbe.h b/native/cocos/gi/light-probe/LightProbe.h index ae8a41c85ce..c6b4eead3ac 100644 --- a/native/cocos/gi/light-probe/LightProbe.h +++ b/native/cocos/gi/light-probe/LightProbe.h @@ -96,6 +96,15 @@ class LightProbes final { } inline bool isEnabled() const { return _enabled; } + inline void setGIScale(float val) { _giScale = val; } + inline float getGIScale() const { return _giScale; } + + inline void setGISamples(uint32_t val) { _giSamples = val; } + inline uint32_t getGISamples() const { return _giSamples; } + + inline void setBounces(uint32_t val) { _bounces = val; } + inline uint32_t getBounces() const { return _bounces; } + inline void setReduceRinging(float val) { _reduceRinging = val; } inline float getReduceRinging() const { return _reduceRinging; } @@ -112,6 +121,9 @@ class LightProbes final { inline const LightProbesData &getData() const { return _data; } bool _enabled{true}; + float _giScale{1.0F}; + uint32_t _giSamples{1024U}; + uint32_t _bounces{2U}; float _reduceRinging{0.0F}; bool _showProbe{true}; bool _showWireframe{true}; @@ -141,6 +153,42 @@ class LightProbeInfo : public RefCounted { } inline bool isEnabled() const { return _enabled; } + inline void setGIScale(float val) { + if (_giScale == val) { + return; + } + + _giScale = val; + if (_resource) { + _resource->setGIScale(val); + } + } + inline float getGIScale() const { return _giScale; } + + inline void setGISamples(uint32_t val) { + if (_giSamples == val) { + return; + } + + _giSamples = val; + if (_resource) { + _resource->setGISamples(val); + } + } + inline uint32_t getGISamples() const { return _giSamples; } + + inline void setBounces(uint32_t val) { + if (_bounces == val) { + return; + } + + _bounces = val; + if (_resource) { + _resource->setBounces(val); + } + } + inline uint32_t getBounces() const { return _bounces; } + inline void setReduceRinging(float val) { if (_reduceRinging == val) { return; @@ -202,6 +250,9 @@ class LightProbeInfo : public RefCounted { //cjh JSB need to bind the property, so need to make it public bool _enabled{false}; + float _giScale{1.0F}; + uint32_t _giSamples{1024U}; + uint32_t _bounces{2U}; float _reduceRinging{0.0F}; bool _showProbe{true}; bool _showWireframe{true}; diff --git a/native/cocos/gi/light-probe/SH.cpp b/native/cocos/gi/light-probe/SH.cpp index ab09e709997..e91e4a486a2 100644 --- a/native/cocos/gi/light-probe/SH.cpp +++ b/native/cocos/gi/light-probe/SH.cpp @@ -41,8 +41,11 @@ Vec3 LightProbeSampler::uniformSampleSphere(float u1, float u2) { return Vec3(x, y, z); } -ccstd::vector LightProbeSampler::uniformSampleSphereAll(uint32_t uCount1, uint32_t uCount2) { - CC_ASSERT(uCount1 > 0U && uCount2 > 0U); +ccstd::vector LightProbeSampler::uniformSampleSphereAll(uint32_t sampleCount) { + CC_ASSERT(sampleCount > 0U); + + const auto uCount1 = static_cast(std::sqrt(sampleCount)); + const auto uCount2 = uCount1; ccstd::vector samples; const auto uDelta1 = 1.0F / static_cast(uCount1); diff --git a/native/cocos/gi/light-probe/SH.h b/native/cocos/gi/light-probe/SH.h index fa3789b614d..a902f71483d 100644 --- a/native/cocos/gi/light-probe/SH.h +++ b/native/cocos/gi/light-probe/SH.h @@ -48,7 +48,7 @@ class LightProbeSampler { /** * generate ucount1 * ucount2 samples from sphere uniformly */ - static ccstd::vector uniformSampleSphereAll(uint32_t uCount1, uint32_t uCount2); + static ccstd::vector uniformSampleSphereAll(uint32_t sampleCount); /** * probability density function of uniform distribution on spherical surface diff --git a/native/tools/swig-config/gi.i b/native/tools/swig-config/gi.i index 7c9fc1709d9..ef0f020f3dc 100644 --- a/native/tools/swig-config/gi.i +++ b/native/tools/swig-config/gi.i @@ -84,14 +84,20 @@ using namespace cc::gi; %attribute(cc::gi::LightProbesData, ccstd::vector&, tetrahedrons, getTetrahedrons, setTetrahedrons); %attribute(cc::gi::LightProbes, bool, enabled, isEnabled, setEnabled); -%attribute(cc::gi::LightProbes, bool, reduceRinging, getReduceRinging, setReduceRinging); +%attribute(cc::gi::LightProbes, float, giScale, getGIScale, setGIScale); +%attribute(cc::gi::LightProbes, uint32_t, giSamples, getGISamples, setGISamples); +%attribute(cc::gi::LightProbes, uint32_t, bounces, getBounces, setBounces); +%attribute(cc::gi::LightProbes, float, reduceRinging, getReduceRinging, setReduceRinging); %attribute(cc::gi::LightProbes, bool, showProbe, isShowProbe, setShowProbe); %attribute(cc::gi::LightProbes, bool, showWireframe, isShowWireframe, setShowWireframe); %attribute(cc::gi::LightProbes, bool, showConvex, isShowConvex, setShowConvex); %attribute(cc::gi::LightProbes, cc::gi::LightProbesData&, data, getData, setData); %attribute(cc::gi::LightProbeInfo, bool, enabled, isEnabled, setEnabled); -%attribute(cc::gi::LightProbeInfo, bool, reduceRinging, getReduceRinging, setReduceRinging); +%attribute(cc::gi::LightProbeInfo, float, giScale, getGIScale, setGIScale); +%attribute(cc::gi::LightProbeInfo, uint32_t, giSamples, getGISamples, setGISamples); +%attribute(cc::gi::LightProbeInfo, uint32_t, bounces, getBounces, setBounces); +%attribute(cc::gi::LightProbeInfo, float, reduceRinging, getReduceRinging, setReduceRinging); %attribute(cc::gi::LightProbeInfo, bool, showProbe, isShowProbe, setShowProbe); %attribute(cc::gi::LightProbeInfo, bool, showWireframe, isShowWireframe, setShowWireframe); %attribute(cc::gi::LightProbeInfo, bool, showConvex, isShowConvex, setShowConvex); From 19f1329a529a15435893a19c1147c5c70e8a58ef Mon Sep 17 00:00:00 2001 From: bofeng-song Date: Fri, 28 Oct 2022 09:54:58 +0800 Subject: [PATCH 098/829] fix set LODs will change the input's variable & refine function name (#13164) --- cocos/misc/lodgroup-component.ts | 5 +++-- cocos/render-scene/scene/lod-group.ts | 14 +++++++------- cocos/rendering/custom/web-scene.ts | 8 ++++---- cocos/rendering/lod-models-utils.ts | 2 +- cocos/rendering/planar-shadow-queue.ts | 8 ++++---- cocos/rendering/scene-culling.ts | 8 ++++---- editor/exports/lod-group-utils.ts | 2 +- editor/inspector/components/lodGroup/index.js | 16 ++++++++++++++-- 8 files changed, 38 insertions(+), 25 deletions(-) diff --git a/cocos/misc/lodgroup-component.ts b/cocos/misc/lodgroup-component.ts index 196e589edd7..cbf2b87dd32 100644 --- a/cocos/misc/lodgroup-component.ts +++ b/cocos/misc/lodgroup-component.ts @@ -30,7 +30,6 @@ import { Component } from '../scene-graph/component'; import { Mesh, MeshRenderer } from '../3d'; import { scene } from '../render-scene'; import { NodeEventType } from '../scene-graph/node-event'; -import { array } from '../core/utils/js'; // Ratio of objects occupying the screen const DEFAULT_SCREEN_OCCUPATION: number[] = [0.5, 0.25, 0.125]; @@ -78,6 +77,7 @@ export class LOD { * @zh 重置 _renderers 为 meshList或空数组, LODData上的model也会被重置 */ set renderers (meshList: readonly MeshRenderer[]) { + if (meshList === this._renderers) return; this._renderers.length = 0; this._LODData.clearModels(); for (let i = 0; i < meshList.length; i++) { @@ -271,6 +271,7 @@ export class LODGroup extends Component { * @ 重置 LODs 为当前新设置的值。 */ set LODs (valArray: readonly LOD[]) { + if (valArray === this._LODs) return; this._LODs.length = 0; this.lodGroup.clearLODs(); valArray.forEach((lod: LOD, index: number) => { @@ -534,7 +535,7 @@ export class LODGroup extends Component { } } } - this._lodGroup.updateLOD(index, lod.lodData); + this._lodGroup.insertLOD(index, lod.lodData); }); } } diff --git a/cocos/render-scene/scene/lod-group.ts b/cocos/render-scene/scene/lod-group.ts index b37a2850e8b..b267fa2e211 100644 --- a/cocos/render-scene/scene/lod-group.ts +++ b/cocos/render-scene/scene/lod-group.ts @@ -144,12 +144,12 @@ export class LODGroup { * @returns visible LOD index in lodGroup */ getVisibleLOD (camera: Camera): number { - const relativeHeight = this.getRelativeHeight(camera) || 0; + const screenUsagePercentage = this.getScreenUsagePercentage(camera); let lodIndex = -1; for (let i = 0; i < this.lodCount; ++i) { const lod = this.LODs[i]; - if (relativeHeight >= lod.screenUsagePercentage) { + if (screenUsagePercentage >= lod.screenUsagePercentage) { lodIndex = i; break; } @@ -160,20 +160,20 @@ export class LODGroup { /** * * @param camera current perspective camera - * @returns height of current lod group relvative to camera position in screen space, aka. relativeHeight + * @returns height of current lod group relative to camera position in screen space, aka. relativeHeight */ - getRelativeHeight (camera: Camera): number|null { - if (!this.node) return null; + getScreenUsagePercentage (camera: Camera): number { + if (!this.node) return 0; let distance: number | undefined; if (camera.projectionType === CameraProjection.PERSPECTIVE) { distance = Vec3.len(this.localBoundaryCenter.transformMat4(this.node.worldMatrix).subtract(camera.node.position)); } - return this.distanceToRelativeHeight(camera, distance, this.getWorldSpaceSize()); + return this.distanceToScreenUsagePercentage(camera, distance, this.getWorldSpaceSize()); } - private distanceToRelativeHeight (camera: Camera, distance: number | undefined, size: number): number { + private distanceToScreenUsagePercentage (camera: Camera, distance: number | undefined, size: number): number { if (camera.projectionType === CameraProjection.PERSPECTIVE) { assertIsTrue(typeof distance === 'number', 'distance must be present for perspective projection'); return (size * camera.matProj.m05) / (distance * 2.0); // note: matProj.m11 is 1 / tan(fov / 2.0) diff --git a/cocos/rendering/custom/web-scene.ts b/cocos/rendering/custom/web-scene.ts index 640dbc401a1..42d2e29d52e 100644 --- a/cocos/rendering/custom/web-scene.ts +++ b/cocos/rendering/custom/web-scene.ts @@ -32,7 +32,7 @@ import { PipelineSceneData } from '../pipeline-scene-data'; import { SceneTask, SceneTransversal, SceneVisitor } from './pipeline'; import { TaskType } from './types'; import { PipelineUBO } from '../pipeline-ubo'; -import { LODModesCachedUtils } from '../lod-models-utils'; +import { LODModelsCachedUtils } from '../lod-models-utils'; export class RenderObject implements IRenderObject { public model: Model; @@ -111,7 +111,7 @@ export class WebSceneTask implements SceneTask { const visibility = camera.visibility; if (scene) { - LODModesCachedUtils.updateCachedLODModels(scene, camera); + LODModelsCachedUtils.updateCachedLODModels(scene, camera); } for (let i = 0; i < models.length; i++) { @@ -119,7 +119,7 @@ export class WebSceneTask implements SceneTask { // filter model by view visibility if (model.enabled) { - if (LODModesCachedUtils.isLODModelCulled(model)) { + if (LODModelsCachedUtils.isLODModelCulled(model)) { continue; } @@ -139,7 +139,7 @@ export class WebSceneTask implements SceneTask { } } } - LODModesCachedUtils.clearCachedLODModels(); + LODModelsCachedUtils.clearCachedLODModels(); } public start (): void { diff --git a/cocos/rendering/lod-models-utils.ts b/cocos/rendering/lod-models-utils.ts index cc6a66fefc3..fa29efed6c4 100644 --- a/cocos/rendering/lod-models-utils.ts +++ b/cocos/rendering/lod-models-utils.ts @@ -43,7 +43,7 @@ const visibleModelsByAnyLODGroup = new Map(); /** * @engineInternal */ -export class LODModesCachedUtils { +export class LODModelsCachedUtils { /** * @en Insert visible LOD models into visibleModelsByAnyLODGroup, Add all models on lodGroups to modelsInAnyLODGroup */ diff --git a/cocos/rendering/planar-shadow-queue.ts b/cocos/rendering/planar-shadow-queue.ts index 1b4856b790a..c7bd71cdfce 100644 --- a/cocos/rendering/planar-shadow-queue.ts +++ b/cocos/rendering/planar-shadow-queue.ts @@ -33,7 +33,7 @@ import { ShadowType } from '../render-scene/scene/shadows'; import { Layers } from '../scene-graph/layers'; import { PipelineRuntime } from './custom/pipeline'; import { BatchingSchemes } from '../render-scene/core/pass'; -import { LODModesCachedUtils } from './lod-models-utils'; +import { LODModelsCachedUtils } from './lod-models-utils'; const _ab = new AABB(); @@ -60,16 +60,16 @@ export class PlanarShadowQueue { const shadowVisible = (camera.visibility & Layers.BitMask.DEFAULT) !== 0; if (!scene.mainLight || !shadowVisible) { return; } - LODModesCachedUtils.updateCachedLODModels(scene, camera); + LODModelsCachedUtils.updateCachedLODModels(scene, camera); const models = scene.models; for (let i = 0; i < models.length; i++) { const model = models[i]; - if (LODModesCachedUtils.isLODModelCulled(model)) { + if (LODModelsCachedUtils.isLODModelCulled(model)) { continue; } if (model.enabled && model.node && model.castShadow) { this._castModels.push(model); } } - LODModesCachedUtils.clearCachedLODModels(); + LODModelsCachedUtils.clearCachedLODModels(); const instancedBuffer = shadows.instancingMaterial.passes[0].getInstancedBuffer(); this._instancedQueue.queue.add(instancedBuffer); diff --git a/cocos/rendering/scene-culling.ts b/cocos/rendering/scene-culling.ts index b8e450438d6..277e38d8268 100644 --- a/cocos/rendering/scene-culling.ts +++ b/cocos/rendering/scene-culling.ts @@ -34,7 +34,7 @@ import { PipelineSceneData } from './pipeline-scene-data'; import { ShadowLayerVolume } from './shadow/csm-layers'; import { warnID } from '../core/platform'; import { ReflectionProbeManager } from './reflectionProbeManager'; -import { LODModesCachedUtils } from './lod-models-utils'; +import { LODModelsCachedUtils } from './lod-models-utils'; const _tempVec3 = new Vec3(); const _sphere = Sphere.create(0, 0, 0, 1); @@ -161,7 +161,7 @@ export function sceneCulling (pipeline: RenderPipeline, camera: Camera) { function enqueueRenderObject (model: Model) { // filter model by view visibility if (model.enabled) { - if (LODModesCachedUtils.isLODModelCulled(model)) { + if (LODModelsCachedUtils.isLODModelCulled(model)) { return; } @@ -182,11 +182,11 @@ export function sceneCulling (pipeline: RenderPipeline, camera: Camera) { } } - LODModesCachedUtils.updateCachedLODModels(scene, camera); + LODModelsCachedUtils.updateCachedLODModels(scene, camera); for (let i = 0; i < models.length; i++) { enqueueRenderObject(models[i]); } - LODModesCachedUtils.clearCachedLODModels(); + LODModelsCachedUtils.clearCachedLODModels(); } export function reflectionProbeCulling (sceneData: PipelineSceneData, camera: Camera) { diff --git a/editor/exports/lod-group-utils.ts b/editor/exports/lod-group-utils.ts index 175f8554b4c..be2b099c65e 100644 --- a/editor/exports/lod-group-utils.ts +++ b/editor/exports/lod-group-utils.ts @@ -1,2 +1,2 @@ export { LODGroupEditorUtility } from '../../cocos/rendering/lod-group-editor-utility'; -export { LODModesCachedUtils } from '../../cocos/rendering/lod-models-utils'; +export { LODModelsCachedUtils } from '../../cocos/rendering/lod-models-utils'; diff --git a/editor/inspector/components/lodGroup/index.js b/editor/inspector/components/lodGroup/index.js index f39a7731e1d..f3c47a1fe87 100644 --- a/editor/inspector/components/lodGroup/index.js +++ b/editor/inspector/components/lodGroup/index.js @@ -253,9 +253,21 @@ exports.ready = function() { const that = this; const LODs = that.dump.value.LODs.value; if (range === 'min') { - return LODs[index + 1] ? LODs[index + 1].value.screenUsagePercentage.value * 100 : 0; + const min = LODs[index + 1] ? LODs[index + 1].value.screenUsagePercentage.value : 0; + // If value < min, set the value to min, avoid affecting other lod + if (LODs[index].value.screenUsagePercentage.value < min) { + LODs[index].value.screenUsagePercentage.value = min; + that.updateDump(LODs[index].value.screenUsagePercentage); + } + return min * 100; } else if (range === 'max') { - return LODs[index - 1] ? LODs[index - 1].value.screenUsagePercentage.value * 100 : 100; + const max = LODs[index - 1] ? LODs[index - 1].value.screenUsagePercentage.values : 1; + // If value > max, set the value to max, avoid affecting other lod + if (LODs[index].value.screenUsagePercentage.value > max) { + LODs[index].value.screenUsagePercentage.value = max; + that.updateDump(LODs[index].value.screenUsagePercentage); + } + return max * 100; } return null; }, From 827a3f0640db312d4e8a502df7a79d5700b88808 Mon Sep 17 00:00:00 2001 From: ycg <1670543365@qq.com> Date: Fri, 28 Oct 2022 10:44:16 +0800 Subject: [PATCH 099/829] Fix: Update the implementation of the supportWebp on minigame. (#13165) * Fix: Update the implementation of the supportWebp on minigame. Optimize: Adjust the initialization of the System-info module. * Add return type of the sys-init function. * Add try-catch to _supportsWebp method --- @types/pal/system-info.d.ts | 1 + cocos/core/platform/sys.ts | 71 +++++++++++++++---------- cocos/game/game.ts | 4 +- pal/system-info/minigame/system-info.ts | 61 +++++++++++++++------ pal/system-info/native/system-info.ts | 11 ++++ pal/system-info/web/system-info.ts | 39 ++++++++++---- 6 files changed, 132 insertions(+), 55 deletions(-) diff --git a/@types/pal/system-info.d.ts b/@types/pal/system-info.d.ts index 9cf22ccffaa..fb3a00c9b75 100644 --- a/@types/pal/system-info.d.ts +++ b/@types/pal/system-info.d.ts @@ -40,6 +40,7 @@ declare module 'pal/system-info' { public get browserType (): BrowserType; public get browserVersion (): string; public get isXR (): boolean; + public init (): Promise ; public hasFeature (feature: Feature): boolean; public getBatteryLevel (): number; diff --git a/cocos/core/platform/sys.ts b/cocos/core/platform/sys.ts index fcd7c3492d2..60bb00f5548 100644 --- a/cocos/core/platform/sys.ts +++ b/cocos/core/platform/sys.ts @@ -285,36 +285,51 @@ export const sys = { }, /** - * @internal - */ - init () { - try { - let localStorage: Storage | null = sys.localStorage = window.localStorage; - localStorage.setItem('storage', ''); - localStorage.removeItem('storage'); - localStorage = null; - } catch (e) { - const warn = function () { - warnID(5200); - }; - this.localStorage = { - // @ts-expect-error Type '() => void' is not assignable to type '(key: string) => string | null' - getItem: warn, - setItem: warn, - clear: warn, - removeItem: warn, - }; - } - - if (WECHAT) { - // @ts-expect-error HACK: this private property only needed on web & wechat JIT - this.__isWebIOS14OrIPadOS14Env = (sys.os === OS.IOS || sys.os === OS.OSX) && GameGlobal?.isIOSHighPerformanceMode + * @engineInternal + */ + init (): Promise { + return Promise.resolve() + .then(() => systemInfo.init()) + .then(() => { + try { + let localStorage: Storage | null = sys.localStorage = window.localStorage; + localStorage.setItem('storage', ''); + localStorage.removeItem('storage'); + localStorage = null; + } catch (e) { + const warn = function () { + warnID(5200); + }; + this.localStorage = { + // @ts-expect-error Type '() => void' is not assignable to type '(key: string) => string | null' + getItem: warn, + setItem: warn, + clear: warn, + removeItem: warn, + }; + } + + if (WECHAT) { + // @ts-expect-error HACK: this private property only needed on web & wechat JIT + this.__isWebIOS14OrIPadOS14Env = (sys.os === OS.IOS || sys.os === OS.OSX) && GameGlobal?.isIOSHighPerformanceMode && /(OS 1((4\.[0-9])|(5\.[0-3])))|(Version\/1((4\.[0-9])|(5\.[0-3])))/.test(window.navigator.userAgent); - } else { - // @ts-expect-error HACK: this private property only needed on web & wechat JIT - this.__isWebIOS14OrIPadOS14Env = (sys.os === OS.IOS || sys.os === OS.OSX) && systemInfo.isBrowser + } else { + // @ts-expect-error HACK: this private property only needed on web & wechat JIT + this.__isWebIOS14OrIPadOS14Env = (sys.os === OS.IOS || sys.os === OS.OSX) && systemInfo.isBrowser && /(OS 14)|(Version\/14)/.test(window.navigator.userAgent); - } + } + + this.capabilities = { + canvas: true, + opengl: true, + webp: systemInfo.hasFeature(Feature.WEBP), + imageBitmap: systemInfo.hasFeature(Feature.IMAGE_BITMAP), + touches: systemInfo.hasFeature(Feature.INPUT_TOUCH), + mouse: systemInfo.hasFeature(Feature.EVENT_MOUSE), + keyboard: systemInfo.hasFeature(Feature.EVENT_KEYBOARD), + accelerometer: systemInfo.hasFeature(Feature.EVENT_ACCELEROMETER), + }; + }); }, /** diff --git a/cocos/game/game.ts b/cocos/game/game.ts index 138c772a5f9..68c608d40e7 100644 --- a/cocos/game/game.ts +++ b/cocos/game/game.ts @@ -693,7 +693,9 @@ export class Game extends EventTarget { } const debugMode = config.debugMode || debug.DebugMode.NONE; debug._resetDebugSetting(debugMode); - sys.init(); + }) + .then(() => sys.init()) + .then(() => { this._initEvents(); }) .then(() => settings.init(config.settingsPath, config.overrideSettings)) diff --git a/pal/system-info/minigame/system-info.ts b/pal/system-info/minigame/system-info.ts index bed493f382b..22b1adbf3c8 100644 --- a/pal/system-info/minigame/system-info.ts +++ b/pal/system-info/minigame/system-info.ts @@ -46,6 +46,7 @@ class SystemInfo extends EventTarget { public readonly browserVersion: string; public readonly isXR: boolean; private _featureMap: IFeatureMap; + private _initPromise: Promise[]; constructor () { super(); @@ -96,12 +97,9 @@ class SystemInfo extends EventTarget { this.isXR = false; - // init capability - const supportWebp = this._supportsWebp(); - const isPCWechat = WECHAT && this.os === OS.WINDOWS && !minigame.isDevTool; this._featureMap = { - [Feature.WEBP]: supportWebp, + [Feature.WEBP]: false, // Initialize in Promise, [Feature.IMAGE_BITMAP]: false, [Feature.WEB_VIEW]: false, [Feature.VIDEO_PLAYER]: WECHAT || OPPO, @@ -117,24 +115,45 @@ class SystemInfo extends EventTarget { [Feature.EVENT_HMD]: this.isXR, }; + this._initPromise = []; + this._initPromise.push(this._supportsWebpPromise()); + this._registerEvent(); } - private _supportsWebp (): boolean { - // NOTE: canvas.toDataURL() is not supported on WeChat iOS end (Found on iPhone 7p) - const isIOSWechat = WECHAT && this.os === OS.IOS; - const _tmpCanvas = document.createElement('canvas'); // TODO: remove this - let supportWebp: boolean; - if (isIOSWechat) { - supportWebp = true; - } else { + private _supportsWebpPromise (): Promise { + if (!TEST) { + return this._supportsWebp().then((isSupport) => { + this._setFeature(Feature.WEBP, isSupport); + }); + } + return Promise.resolve(); + } + + private _supportsWebp (): Promise { + return new Promise((resolve, reject) => { try { - supportWebp = TEST ? false : _tmpCanvas.toDataURL('image/webp').startsWith('data:image/webp'); - } catch (e) { - supportWebp = false; + const img = document.createElement('img'); + const timer = setTimeout(() => { + resolve(false); + }, 500); + img.onload = function onload () { + clearTimeout(timer); + const result = (img.width > 0) && (img.height > 0); + resolve(result); + }; + img.onerror = function onerror (err) { + clearTimeout(timer); + if (DEBUG) { + console.warn('Create Webp image failed, message: '.concat(err.toString())); + } + resolve(false); + }; + img.src = 'data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA'; + } catch (error) { + resolve(false); } - } - return supportWebp; + }); } private _registerEvent () { @@ -146,6 +165,14 @@ class SystemInfo extends EventTarget { }); } + private _setFeature (feature: Feature, value: boolean) { + return this._featureMap[feature] = value; + } + + public init (): Promise { + return Promise.all(this._initPromise); + } + public hasFeature (feature: Feature): boolean { return this._featureMap[feature]; } diff --git a/pal/system-info/native/system-info.ts b/pal/system-info/native/system-info.ts index 58d505598a1..2b63258722b 100644 --- a/pal/system-info/native/system-info.ts +++ b/pal/system-info/native/system-info.ts @@ -34,6 +34,7 @@ class SystemInfo extends EventTarget { public readonly browserVersion: string; public readonly isXR: boolean; private _featureMap: IFeatureMap; + private _initPromise: Promise[]; // TODO: need to wrap the function __isObjectValid() public get networkType (): NetworkType { @@ -93,6 +94,8 @@ class SystemInfo extends EventTarget { [Feature.EVENT_HMD]: this.isXR, }; + this._initPromise = []; + this._registerEvent(); } @@ -108,6 +111,14 @@ class SystemInfo extends EventTarget { }; } + private _setFeature (feature: Feature, value: boolean) { + return this._featureMap[feature] = value; + } + + public init (): Promise { + return Promise.all(this._initPromise); + } + public hasFeature (feature: Feature): boolean { return this._featureMap[feature]; } diff --git a/pal/system-info/web/system-info.ts b/pal/system-info/web/system-info.ts index 700d5a20437..0f9b81d9198 100644 --- a/pal/system-info/web/system-info.ts +++ b/pal/system-info/web/system-info.ts @@ -20,6 +20,7 @@ class SystemInfo extends EventTarget { public readonly isXR: boolean; private _battery?: any; private _featureMap: IFeatureMap; + private _initPromise: Promise[]; constructor () { super(); @@ -168,20 +169,12 @@ class SystemInfo extends EventTarget { } } } - let supportImageBitmap = false; - if (!TEST && typeof createImageBitmap !== 'undefined' && typeof Blob !== 'undefined') { - _tmpCanvas1.width = _tmpCanvas1.height = 2; - createImageBitmap(_tmpCanvas1, {}).then((imageBitmap) => { - supportImageBitmap = true; - imageBitmap?.close(); - }).catch((err) => {}); - } const supportTouch = (document.documentElement.ontouchstart !== undefined || document.ontouchstart !== undefined || EDITOR); const supportMouse = document.documentElement.onmouseup !== undefined || EDITOR; this._featureMap = { [Feature.WEBP]: supportWebp, - [Feature.IMAGE_BITMAP]: supportImageBitmap, + [Feature.IMAGE_BITMAP]: false, // Initialize in Promise [Feature.WEB_VIEW]: true, [Feature.VIDEO_PLAYER]: true, [Feature.SAFE_AREA]: false, @@ -197,9 +190,29 @@ class SystemInfo extends EventTarget { [Feature.EVENT_HMD]: this.isXR, }; + this._initPromise = []; + this._initPromise.push(this._supportsImageBitmapPromise()); + this._registerEvent(); } + private _supportsImageBitmapPromise (): Promise { + if (!TEST && typeof createImageBitmap !== 'undefined' && typeof Blob !== 'undefined') { + const canvas = document.createElement('canvas'); + canvas.width = canvas.height = 2; + const promise = createImageBitmap(canvas, {}); + if (promise instanceof Promise) { + return promise.then((imageBitmap) => { + this._setFeature(Feature.IMAGE_BITMAP, true); + imageBitmap?.close(); + }); + } else if (DEBUG) { + console.warn('The return value of createImageBitmap is not Promise.'); + } + } + return Promise.resolve(); + } + private _registerEvent () { let hiddenPropName: string; if (typeof document.hidden !== 'undefined') { @@ -268,6 +281,14 @@ class SystemInfo extends EventTarget { } } + private _setFeature (feature: Feature, value: boolean) { + return this._featureMap[feature] = value; + } + + public init (): Promise { + return Promise.all(this._initPromise); + } + public hasFeature (feature: Feature): boolean { return this._featureMap[feature]; } From c73f03ba3d2aeb5b26236d2a4c65ee35cedfb15c Mon Sep 17 00:00:00 2001 From: hyde zhou Date: Fri, 28 Oct 2022 13:58:23 +0800 Subject: [PATCH 100/829] [develop] native pipeline (#13142) --- .../pipeline/custom/FrameGraphDispatcher.cpp | 60 ++++++++++++------- .../renderer/pipeline/custom/test/test.h | 15 ++--- 2 files changed, 47 insertions(+), 28 deletions(-) diff --git a/native/cocos/renderer/pipeline/custom/FrameGraphDispatcher.cpp b/native/cocos/renderer/pipeline/custom/FrameGraphDispatcher.cpp index ea35be20bcc..00e45938ee0 100644 --- a/native/cocos/renderer/pipeline/custom/FrameGraphDispatcher.cpp +++ b/native/cocos/renderer/pipeline/custom/FrameGraphDispatcher.cpp @@ -156,7 +156,7 @@ gfx::MemoryAccessBit toGfxAccess(AccessType type) { // AccessStatus.vertID : in resourceNode it's resource ID; in barrierNode it's pass ID. AccessVertex dependencyCheck(RAG &rag, AccessVertex curVertID, const ResourceGraph &rg, const ViewStatus &status); -gfx::ShaderStageFlagBit getVisibilityByDescName(const LGD &lgd, uint32_t passID, const PmrString &slotName); +gfx::ShaderStageFlagBit getVisibilityByDescName(const LGD &lgd, uint32_t passID, const PmrString &resName); void addAccessStatus(RAG &rag, const ResourceGraph &rg, ResourceAccessNode &node, const ViewStatus &status); void addCopyAccessStatus(RAG &rag, const ResourceGraph &rg, ResourceAccessNode &node, const ViewStatus &status); @@ -206,8 +206,8 @@ void buildAccessGraph(const RenderGraph &renderGraph, const Graphs &graphs) { resourceAccessGraph.culledPasses.clear(); } - const auto &names = get(RenderGraph::Name, renderGraph); - for (size_t i = 1; i <= names.container->size(); ++i) { + // const auto &names = get(RenderGraph::Name, renderGraph); + for (size_t i = 1; i <= numPasses; ++i) { resourceAccessGraph.leafPasses.emplace(i, LeafStatus{false, false}); } @@ -266,6 +266,21 @@ void buildAccessGraph(const RenderGraph &renderGraph, const Graphs &graphs) { leafCulling(vertex, rag); }; + // no present pass found, add a fake node to gather leaf node(s). + if (resourceAccessGraph.presentPassID == 0xFFFFFFFF) { + auto ragEndNode = add_vertex(rag, rag.getCurrentID()); + auto rlgEndNode = add_vertex(relationGraph); + // keep sync before pass reorder done. + CC_EXPECTS(ragEndNode == rlgEndNode); + resourceAccessGraph.presentPassID = ragEndNode; + auto iter = resourceAccessGraph.leafPasses.find(ragEndNode); + if (iter == resourceAccessGraph.leafPasses.end()) { + resourceAccessGraph.leafPasses.emplace(ragEndNode, LeafStatus{true, false}); + } else { + resourceAccessGraph.leafPasses.at(ragEndNode) = LeafStatus{true, false}; + } + } + // make leaf node closed walk for pass reorder for (auto pass : resourceAccessGraph.leafPasses) { bool isExternal = pass.second.isExternal; @@ -282,6 +297,10 @@ void buildAccessGraph(const RenderGraph &renderGraph, const Graphs &graphs) { } } } + for (auto rit = resourceAccessGraph.culledPasses.rbegin(); rit != resourceAccessGraph.culledPasses.rend(); ++rit) { + // remove culled vertices, std::less make this set ascending order, so reverse iterate + remove_vertex(*rit, relationGraph); + } } #pragma region BUILD_BARRIERS @@ -970,6 +989,7 @@ void evaluateAndTryMerge(const RAG &rag, const ResourceGraph &rescGraph, EmptyGr for (size_t i = 1; i < lhsVerts.size(); ++i) { auto tryE = edge(lhsVerts[i], lhsVerts[i - 1], relationGraphTc); auto tryRE = edge(lhsVerts[i - 1], lhsVerts[i], relationGraphTc); + // check if original reachable if (!tryE.second && !tryRE.second) { remove_edge(lhsVerts[i - 1], lhsVerts[i], relationGraph); candidateSections.emplace_back(lhsSection); @@ -1428,28 +1448,25 @@ AccessVertex dependencyCheck(RAG &rag, AccessVertex curVertID, const ResourceGra rag.leafPasses[curVertID] = LeafStatus{true, access == gfx::MemoryAccessBit::READ_ONLY && passType != PassType::PRESENT}; } } + } else { + trans.currStatus = {curVertID, visibility, trans.currStatus.access | access, passType, Range{}}; } } } return lastVertID; } -gfx::ShaderStageFlagBit getVisibilityByDescName(const LGD &lgd, uint32_t passID, const PmrString &slotName) { - auto vis = gfx::ShaderStageFlagBit::NONE; - - bool found = false; - - auto compare = [](const PmrString &name, const uint32_t slot) { - return boost::lexical_cast(name) == slot; - }; - - auto iter = lgd.attributeIndex.find(slotName); +gfx::ShaderStageFlagBit getVisibilityByDescName(const LGD &lgd, uint32_t passID, const PmrString &resName) { + auto iter = lgd.attributeIndex.find(resName); if (iter == lgd.attributeIndex.end()) { - iter = lgd.constantIndex.find(slotName); - CC_EXPECTS(iter != lgd.constantIndex.end()); + iter = lgd.constantIndex.find(resName); + if (iter == lgd.constantIndex.end()) { + // input or output attachment + return gfx::ShaderStageFlagBit::NONE; + } } - auto nameID = iter->second; + auto nameID = iter->second; auto visIter = lgd.stages[passID].descriptorVisibility.find(nameID); CC_EXPECTS(visIter != lgd.stages[passID].descriptorVisibility.end()); return visIter->second; @@ -1462,8 +1479,9 @@ bool checkRasterViews(const Graphs &graphs, uint32_t vertID, uint32_t passID, Pa for (const auto &pair : rasterViews) { const auto &rasterView = pair.second; gfx::ShaderStageFlagBit visibility = getVisibilityByDescName(layoutGraphData, passID, pair.first); + visibility = visibility == gfx::ShaderStageFlagBit::NONE ? gfx::ShaderStageFlagBit::FRAGMENT : visibility; auto access = toGfxAccess(rasterView.accessType); - ViewStatus viewStatus{rasterView.slotName, passType, visibility, access}; + ViewStatus viewStatus{pair.first, passType, visibility, access}; addAccessStatus(resourceAccessGraph, resourceGraph, node, viewStatus); auto lastVertId = dependencyCheck(resourceAccessGraph, vertID, resourceGraph, viewStatus); if (lastVertId != INVALID_ID && lastVertId != vertID) { @@ -1486,9 +1504,10 @@ bool checkComputeViews(const Graphs &graphs, uint32_t vertID, uint32_t passID, P for (const auto &pair : computeViews) { const auto &values = pair.second; for (const auto &computeView : values) { - gfx::ShaderStageFlagBit visibility = getVisibilityByDescName(layoutGraphData, passID, computeView.name); + gfx::ShaderStageFlagBit visibility = getVisibilityByDescName(layoutGraphData, passID, pair.first); + visibility = visibility == gfx::ShaderStageFlagBit::NONE ? gfx::ShaderStageFlagBit::COMPUTE : visibility; auto access = toGfxAccess(computeView.accessType); - ViewStatus viewStatus{computeView.name, passType, visibility, access}; + ViewStatus viewStatus{pair.first, passType, visibility, access}; addAccessStatus(resourceAccessGraph, resourceGraph, node, viewStatus); auto lastVertId = dependencyCheck(resourceAccessGraph, vertID, resourceGraph, viewStatus); if (lastVertId != INVALID_ID) { @@ -1642,8 +1661,7 @@ void processPresentPass(const Graphs &graphs, uint32_t passID, const PresentPass auto &node = get(RAG::AccessNode, resourceAccessGraph, vertID); bool dependent = false; for (const auto &pair : pass.presents) { - gfx::ShaderStageFlagBit visibility = getVisibilityByDescName(layoutGraphData, passID, pair.first); - ViewStatus viewStatus{pair.first, PassType::PRESENT, visibility, gfx::MemoryAccessBit::READ_ONLY}; + ViewStatus viewStatus{pair.first, PassType::PRESENT, gfx::ShaderStageFlagBit::NONE, gfx::MemoryAccessBit::READ_ONLY}; auto lastVertId = dependencyCheck(resourceAccessGraph, vertID, resourceGraph, viewStatus); addAccessStatus(resourceAccessGraph, resourceGraph, node, viewStatus); diff --git a/native/cocos/renderer/pipeline/custom/test/test.h b/native/cocos/renderer/pipeline/custom/test/test.h index f96b3119f12..0db00c77424 100644 --- a/native/cocos/renderer/pipeline/custom/test/test.h +++ b/native/cocos/renderer/pipeline/custom/test/test.h @@ -172,13 +172,14 @@ static void fillTestGraph(const ViewInfo &rasterData, const ResourceInfo &rescIn dst.name = outputs.front(); dst.accessType = AccessType::WRITE; - computePass.computeViews.emplace(name, ccstd::pmr::vector{}); - computePass.computeViews.at(name.c_str()).emplace_back(); - computePass.computeViews.at(name.c_str()).emplace_back(); - computePass.computeViews.at(name.c_str()).front().name = inputs.front(); - computePass.computeViews.at(name.c_str()).front().accessType = AccessType::READ; - computePass.computeViews.at(name.c_str()).back().name = outputs.front(); - computePass.computeViews.at(name.c_str()).back().accessType = AccessType::WRITE; + computePass.computeViews.emplace(src.name, ccstd::pmr::vector{}); + computePass.computeViews.emplace(dst.name, ccstd::pmr::vector{}); + computePass.computeViews.at(src.name.c_str()).emplace_back(); + computePass.computeViews.at(dst.name.c_str()).emplace_back(); + computePass.computeViews.at(src.name.c_str()).front().name = inputs.front(); + computePass.computeViews.at(src.name.c_str()).front().accessType = AccessType::READ; + computePass.computeViews.at(dst.name.c_str()).back().name = outputs.front(); + computePass.computeViews.at(dst.name.c_str()).back().accessType = AccessType::WRITE; break; } From 4b0532b01bab06f4b8ecc588197f02a06a492de5 Mon Sep 17 00:00:00 2001 From: hyde zhou Date: Fri, 28 Oct 2022 13:58:43 +0800 Subject: [PATCH 101/829] improved interface methods code generation (#13159) --- .../cocos/bindings/auto/jsb_render_auto.cpp | 8 +- .../renderer/pipeline/custom/ArchiveTypes.h | 4 +- .../pipeline/custom/NativePipelineTypes.h | 247 ++++++++---------- .../pipeline/custom/RenderInterfaceTypes.h | 128 ++++----- 4 files changed, 176 insertions(+), 211 deletions(-) diff --git a/native/cocos/bindings/auto/jsb_render_auto.cpp b/native/cocos/bindings/auto/jsb_render_auto.cpp index be3af43c2dd..2ae521d4406 100644 --- a/native/cocos/bindings/auto/jsb_render_auto.cpp +++ b/native/cocos/bindings/auto/jsb_render_auto.cpp @@ -1294,7 +1294,7 @@ static bool js_cc_render_RasterQueueBuilder_addFullscreenQuad(se::State& s) const auto& args = s.args(); size_t argc = args.size(); cc::render::RasterQueueBuilder *arg1 = (cc::render::RasterQueueBuilder *) NULL ; - cc::Material *arg2 = (cc::Material *) NULL ; + Material *arg2 = (Material *) NULL ; uint32_t arg3 ; SceneFlags arg4 ; @@ -1306,7 +1306,7 @@ static bool js_cc_render_RasterQueueBuilder_addFullscreenQuad(se::State& s) SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE* ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "RasterQueueBuilder_addFullscreenQuad,2,SWIGTYPE_p_cc__Material"); + SE_PRECONDITION2(ok, false, "RasterQueueBuilder_addFullscreenQuad,2,SWIGTYPE_p_Material"); // %typemap(in) SWIGTYPE value in ok &= sevalue_to_native(args[1], &arg3, s.thisObject()); @@ -1333,7 +1333,7 @@ static bool js_cc_render_RasterQueueBuilder_addCameraQuad(se::State& s) size_t argc = args.size(); cc::render::RasterQueueBuilder *arg1 = (cc::render::RasterQueueBuilder *) NULL ; cc::scene::Camera *arg2 = (cc::scene::Camera *) NULL ; - cc::Material *arg3 = (cc::Material *) NULL ; + Material *arg3 = (Material *) NULL ; uint32_t arg4 ; SceneFlags arg5 ; @@ -1348,7 +1348,7 @@ static bool js_cc_render_RasterQueueBuilder_addCameraQuad(se::State& s) SE_PRECONDITION2(ok, false, "RasterQueueBuilder_addCameraQuad,2,SWIGTYPE_p_cc__scene__Camera"); // %typemap(in) SWIGTYPE* ok &= sevalue_to_native(args[1], &arg3, s.thisObject()); - SE_PRECONDITION2(ok, false, "RasterQueueBuilder_addCameraQuad,3,SWIGTYPE_p_cc__Material"); + SE_PRECONDITION2(ok, false, "RasterQueueBuilder_addCameraQuad,3,SWIGTYPE_p_Material"); // %typemap(in) SWIGTYPE value in ok &= sevalue_to_native(args[2], &arg4, s.thisObject()); diff --git a/native/cocos/renderer/pipeline/custom/ArchiveTypes.h b/native/cocos/renderer/pipeline/custom/ArchiveTypes.h index 848afd5b9ec..e557348f371 100644 --- a/native/cocos/renderer/pipeline/custom/ArchiveTypes.h +++ b/native/cocos/renderer/pipeline/custom/ArchiveTypes.h @@ -50,7 +50,7 @@ class OutputArchive { virtual void writeBool(bool value) = 0; virtual void writeNumber(double value) = 0; virtual void writeString(std::string_view value) = 0; - virtual boost::container::pmr::memory_resource* scratch() const noexcept = 0; + virtual boost::container::pmr::memory_resource *scratch() const noexcept = 0; }; class InputArchive { @@ -65,7 +65,7 @@ class InputArchive { virtual bool readBool() = 0; virtual double readNumber() = 0; virtual std::string_view readString() = 0; - virtual boost::container::pmr::memory_resource* scratch() const noexcept = 0; + virtual boost::container::pmr::memory_resource *scratch() const noexcept = 0; }; } // namespace render diff --git a/native/cocos/renderer/pipeline/custom/NativePipelineTypes.h b/native/cocos/renderer/pipeline/custom/NativePipelineTypes.h index 6a70fae3f8e..54ffe6ab54e 100644 --- a/native/cocos/renderer/pipeline/custom/NativePipelineTypes.h +++ b/native/cocos/renderer/pipeline/custom/NativePipelineTypes.h @@ -53,14 +53,13 @@ class NativeLayoutGraphBuilder final : public LayoutGraphBuilder { data(dataIn) {} void clear() override; - uint32_t addRenderStage(const ccstd::string& name) override; - uint32_t addRenderPhase(const ccstd::string& name, uint32_t parentID) override; - void addShader(const ccstd::string& name, uint32_t parentPhaseID) override; - void addDescriptorBlock(uint32_t nodeID, const DescriptorBlockIndex& index, const DescriptorBlockFlattened& block) override; - void addUniformBlock(uint32_t nodeID, const DescriptorBlockIndex& index, const ccstd::string& name, const gfx::UniformBlock& uniformBlock) override; - void reserveDescriptorBlock(uint32_t nodeID, const DescriptorBlockIndex& index, const DescriptorBlockFlattened& block) override; + uint32_t addRenderStage(const ccstd::string &name) override; + uint32_t addRenderPhase(const ccstd::string &name, uint32_t parentID) override; + void addShader(const ccstd::string &name, uint32_t parentPhaseID) override; + void addDescriptorBlock(uint32_t nodeID, const DescriptorBlockIndex &index, const DescriptorBlockFlattened &block) override; + void addUniformBlock(uint32_t nodeID, const DescriptorBlockIndex &index, const ccstd::string &name, const gfx::UniformBlock &uniformBlock) override; + void reserveDescriptorBlock(uint32_t nodeID, const DescriptorBlockIndex &index, const DescriptorBlockFlattened &block) override; int compile() override; - ccstd::string print() const override; gfx::Device* device{nullptr}; @@ -75,29 +74,28 @@ class NativeRasterQueueBuilder final : public RasterQueueBuilder { layoutGraph(layoutGraphIn), queueID(queueIDIn) {} - void addSceneOfCamera(scene::Camera* camera, LightInfo light, SceneFlags sceneFlags) override; - void addScene(const ccstd::string& name, SceneFlags sceneFlags) override; - void addFullscreenQuad(cc::Material *material, uint32_t passID, SceneFlags sceneFlags) override; - void addCameraQuad(scene::Camera* camera, cc::Material *material, uint32_t passID, SceneFlags sceneFlags) override; + ccstd::string getName() const override; + void setName(const ccstd::string &name) override; + + void setMat4(const ccstd::string &name, const Mat4 &mat) override; + void setQuaternion(const ccstd::string &name, const Quaternion &quat) override; + void setColor(const ccstd::string &name, const gfx::Color &color) override; + void setVec4(const ccstd::string &name, const Vec4 &vec) override; + void setVec2(const ccstd::string &name, const Vec2 &vec) override; + void setFloat(const ccstd::string &name, float v) override; + void setBuffer(const ccstd::string &name, gfx::Buffer *buffer) override; + void setTexture(const ccstd::string &name, gfx::Texture *texture) override; + void setReadWriteBuffer(const ccstd::string &name, gfx::Buffer *buffer) override; + void setReadWriteTexture(const ccstd::string &name, gfx::Texture *texture) override; + void setSampler(const ccstd::string &name, gfx::Sampler *sampler) override; + + void addSceneOfCamera(scene::Camera *camera, LightInfo light, SceneFlags sceneFlags) override; + void addScene(const ccstd::string &name, SceneFlags sceneFlags) override; + void addFullscreenQuad(Material *material, uint32_t passID, SceneFlags sceneFlags) override; + void addCameraQuad(scene::Camera *camera, Material *material, uint32_t passID, SceneFlags sceneFlags) override; void clearRenderTarget(const ccstd::string &name, const gfx::Color &color) override; void setViewport(const gfx::Viewport &viewport) override; - void setMat4(const ccstd::string& name, const cc::Mat4& mat) override; - void setQuaternion(const ccstd::string& name, const cc::Quaternion& quat) override; - void setColor(const ccstd::string& name, const gfx::Color& color) override; - void setVec4(const ccstd::string& name, const cc::Vec4& vec) override; - void setVec2(const ccstd::string& name, const cc::Vec2& vec) override; - void setFloat(const ccstd::string& name, float v) override; - - void setBuffer(const ccstd::string& name, gfx::Buffer* buffer) override; - void setTexture(const ccstd::string& name, gfx::Texture* texture) override; - void setReadWriteBuffer(const ccstd::string& name, gfx::Buffer* buffer) override; - void setReadWriteTexture(const ccstd::string& name, gfx::Texture* texture) override; - void setSampler(const ccstd::string& name, gfx::Sampler* sampler) override; - - ccstd::string getName() const override; - void setName(const ccstd::string& name) override; - RenderGraph* renderGraph{nullptr}; const LayoutGraphData* layoutGraph{nullptr}; uint32_t queueID{RenderGraph::null_vertex()}; @@ -112,27 +110,26 @@ class NativeRasterPassBuilder final : public RasterPassBuilder { passID(passIDIn), layoutID(layoutIDIn) {} - void addRasterView(const ccstd::string& name, const RasterView& view) override; - void addComputeView(const ccstd::string& name, const ComputeView& view) override; + ccstd::string getName() const override; + void setName(const ccstd::string &name) override; + + void setMat4(const ccstd::string &name, const Mat4 &mat) override; + void setQuaternion(const ccstd::string &name, const Quaternion &quat) override; + void setColor(const ccstd::string &name, const gfx::Color &color) override; + void setVec4(const ccstd::string &name, const Vec4 &vec) override; + void setVec2(const ccstd::string &name, const Vec2 &vec) override; + void setFloat(const ccstd::string &name, float v) override; + void setBuffer(const ccstd::string &name, gfx::Buffer *buffer) override; + void setTexture(const ccstd::string &name, gfx::Texture *texture) override; + void setReadWriteBuffer(const ccstd::string &name, gfx::Buffer *buffer) override; + void setReadWriteTexture(const ccstd::string &name, gfx::Texture *texture) override; + void setSampler(const ccstd::string &name, gfx::Sampler *sampler) override; + + void addRasterView(const ccstd::string &name, const RasterView &view) override; + void addComputeView(const ccstd::string &name, const ComputeView &view) override; RasterQueueBuilder *addQueue(QueueHint hint) override; void setViewport(const gfx::Viewport &viewport) override; - void setMat4(const ccstd::string& name, const cc::Mat4& mat) override; - void setQuaternion(const ccstd::string& name, const cc::Quaternion& quat) override; - void setColor(const ccstd::string& name, const gfx::Color& color) override; - void setVec4(const ccstd::string& name, const cc::Vec4& vec) override; - void setVec2(const ccstd::string& name, const cc::Vec2& vec) override; - void setFloat(const ccstd::string& name, float v) override; - - void setBuffer(const ccstd::string& name, gfx::Buffer* buffer) override; - void setTexture(const ccstd::string& name, gfx::Texture* texture) override; - void setReadWriteBuffer(const ccstd::string& name, gfx::Buffer* buffer) override; - void setReadWriteTexture(const ccstd::string& name, gfx::Texture* texture) override; - void setSampler(const ccstd::string& name, gfx::Sampler* sampler) override; - - ccstd::string getName() const override; - void setName(const ccstd::string& name) override; - RenderGraph* renderGraph{nullptr}; const LayoutGraphData* layoutGraph{nullptr}; uint32_t passID{RenderGraph::null_vertex()}; @@ -147,23 +144,22 @@ class NativeComputeQueueBuilder final : public ComputeQueueBuilder { layoutGraph(layoutGraphIn), queueID(queueIDIn) {} - void addDispatch(const ccstd::string& shader, uint32_t threadGroupCountX, uint32_t threadGroupCountY, uint32_t threadGroupCountZ) override; - - void setMat4(const ccstd::string& name, const cc::Mat4& mat) override; - void setQuaternion(const ccstd::string& name, const cc::Quaternion& quat) override; - void setColor(const ccstd::string& name, const gfx::Color& color) override; - void setVec4(const ccstd::string& name, const cc::Vec4& vec) override; - void setVec2(const ccstd::string& name, const cc::Vec2& vec) override; - void setFloat(const ccstd::string& name, float v) override; - - void setBuffer(const ccstd::string& name, gfx::Buffer* buffer) override; - void setTexture(const ccstd::string& name, gfx::Texture* texture) override; - void setReadWriteBuffer(const ccstd::string& name, gfx::Buffer* buffer) override; - void setReadWriteTexture(const ccstd::string& name, gfx::Texture* texture) override; - void setSampler(const ccstd::string& name, gfx::Sampler* sampler) override; - ccstd::string getName() const override; - void setName(const ccstd::string& name) override; + void setName(const ccstd::string &name) override; + + void setMat4(const ccstd::string &name, const Mat4 &mat) override; + void setQuaternion(const ccstd::string &name, const Quaternion &quat) override; + void setColor(const ccstd::string &name, const gfx::Color &color) override; + void setVec4(const ccstd::string &name, const Vec4 &vec) override; + void setVec2(const ccstd::string &name, const Vec2 &vec) override; + void setFloat(const ccstd::string &name, float v) override; + void setBuffer(const ccstd::string &name, gfx::Buffer *buffer) override; + void setTexture(const ccstd::string &name, gfx::Texture *texture) override; + void setReadWriteBuffer(const ccstd::string &name, gfx::Buffer *buffer) override; + void setReadWriteTexture(const ccstd::string &name, gfx::Texture *texture) override; + void setSampler(const ccstd::string &name, gfx::Sampler *sampler) override; + + void addDispatch(const ccstd::string &shader, uint32_t threadGroupCountX, uint32_t threadGroupCountY, uint32_t threadGroupCountZ) override; RenderGraph* renderGraph{nullptr}; const LayoutGraphData* layoutGraph{nullptr}; @@ -179,25 +175,23 @@ class NativeComputePassBuilder final : public ComputePassBuilder { passID(passIDIn), layoutID(layoutIDIn) {} - void addComputeView(const ccstd::string& name, const ComputeView& view) override; - - ComputeQueueBuilder *addQueue() override; - - void setMat4(const ccstd::string& name, const cc::Mat4& mat) override; - void setQuaternion(const ccstd::string& name, const cc::Quaternion& quat) override; - void setColor(const ccstd::string& name, const gfx::Color& color) override; - void setVec4(const ccstd::string& name, const cc::Vec4& vec) override; - void setVec2(const ccstd::string& name, const cc::Vec2& vec) override; - void setFloat(const ccstd::string& name, float v) override; - - void setBuffer(const ccstd::string& name, gfx::Buffer* buffer) override; - void setTexture(const ccstd::string& name, gfx::Texture* texture) override; - void setReadWriteBuffer(const ccstd::string& name, gfx::Buffer* buffer) override; - void setReadWriteTexture(const ccstd::string& name, gfx::Texture* texture) override; - void setSampler(const ccstd::string& name, gfx::Sampler* sampler) override; - ccstd::string getName() const override; - void setName(const ccstd::string& name) override; + void setName(const ccstd::string &name) override; + + void setMat4(const ccstd::string &name, const Mat4 &mat) override; + void setQuaternion(const ccstd::string &name, const Quaternion &quat) override; + void setColor(const ccstd::string &name, const gfx::Color &color) override; + void setVec4(const ccstd::string &name, const Vec4 &vec) override; + void setVec2(const ccstd::string &name, const Vec2 &vec) override; + void setFloat(const ccstd::string &name, float v) override; + void setBuffer(const ccstd::string &name, gfx::Buffer *buffer) override; + void setTexture(const ccstd::string &name, gfx::Texture *texture) override; + void setReadWriteBuffer(const ccstd::string &name, gfx::Buffer *buffer) override; + void setReadWriteTexture(const ccstd::string &name, gfx::Texture *texture) override; + void setSampler(const ccstd::string &name, gfx::Sampler *sampler) override; + + void addComputeView(const ccstd::string &name, const ComputeView &view) override; + ComputeQueueBuilder *addQueue() override; RenderGraph* renderGraph{nullptr}; const LayoutGraphData* layoutGraph{nullptr}; @@ -212,10 +206,10 @@ class NativeMovePassBuilder final : public MovePassBuilder { : renderGraph(renderGraphIn), passID(passIDIn) {} - void addPair(const MovePair& pair) override; - ccstd::string getName() const override; - void setName(const ccstd::string& name) override; + void setName(const ccstd::string &name) override; + + void addPair(const MovePair &pair) override; RenderGraph* renderGraph{nullptr}; uint32_t passID{RenderGraph::null_vertex()}; @@ -228,10 +222,10 @@ class NativeCopyPassBuilder final : public CopyPassBuilder { : renderGraph(renderGraphIn), passID(passIDIn) {} - void addPair(const CopyPair& pair) override; - ccstd::string getName() const override; - void setName(const ccstd::string& name) override; + void setName(const ccstd::string &name) override; + + void addPair(const CopyPair &pair) override; RenderGraph* renderGraph{nullptr}; uint32_t passID{RenderGraph::null_vertex()}; @@ -244,7 +238,7 @@ class NativeSceneTransversal final : public SceneTransversal { : camera(cameraIn), scene(sceneIn) {} - SceneTask* transverse(SceneVisitor *visitor) const override; + SceneTask *transverse(SceneVisitor *visitor) const override; const scene::Camera* camera{nullptr}; const scene::RenderScene* scene{nullptr}; @@ -410,11 +404,10 @@ class DefaultSceneVisitor final : public SceneVisitor { DefaultSceneVisitor(const allocator_type& alloc) noexcept; // NOLINT - const pipeline::PipelineSceneData* getPipelineSceneData() const override; - + const pipeline::PipelineSceneData *getPipelineSceneData() const override; void setViewport(const gfx::Viewport &vp) override; void setScissor(const gfx::Rect &rect) override; - void bindPipelineState(gfx::PipelineState* pso) override; + void bindPipelineState(gfx::PipelineState *pso) override; void bindDescriptorSet(uint32_t set, gfx::DescriptorSet *descriptorSet, uint32_t dynamicOffsetCount, const uint32_t *dynamicOffsets) override; void bindInputAssembler(gfx::InputAssembler *ia) override; void updateBuffer(gfx::Buffer *buff, const void *data, uint32_t size) override; @@ -432,7 +425,7 @@ class DefaultForwardLightingTransversal final : public SceneTransversal { DefaultForwardLightingTransversal(const allocator_type& alloc) noexcept; // NOLINT - SceneTask* transverse(SceneVisitor *visitor) const override; + SceneTask *transverse(SceneVisitor *visitor) const override; ccstd::pmr::string name; }; @@ -463,65 +456,53 @@ class NativePipeline final : public Pipeline { NativePipeline(const allocator_type& alloc) noexcept; // NOLINT - void beginSetup() override; - void endSetup() override; - - bool containsResource(const ccstd::string& name) const override; - uint32_t addRenderTexture(const ccstd::string& name, gfx::Format format, uint32_t width, uint32_t height, scene::RenderWindow* renderWindow) override; - uint32_t addRenderTarget(const ccstd::string& name, gfx::Format format, uint32_t width, uint32_t height, ResourceResidency residency) override; - uint32_t addDepthStencil(const ccstd::string& name, gfx::Format format, uint32_t width, uint32_t height, ResourceResidency residency) override; - - void updateRenderWindow(const ccstd::string& name, scene::RenderWindow* renderWindow) override; - - void beginFrame() override; - void endFrame() override; - RasterPassBuilder *addRasterPass(uint32_t width, uint32_t height, const ccstd::string& layoutName) override; - ComputePassBuilder *addComputePass(const ccstd::string& layoutName) override; - MovePassBuilder *addMovePass() override; - CopyPassBuilder *addCopyPass() override; - void presentAll() override; - - SceneTransversal *createSceneTransversal(const scene::Camera *camera, const scene::RenderScene *scene) override; - LayoutGraphBuilder *getLayoutGraphBuilder() override; - gfx::DescriptorSetLayout *getDescriptorSetLayout(const ccstd::string& shaderName, UpdateFrequency freq) override; - - bool activate(gfx::Swapchain * swapchain) override; + bool activate(gfx::Swapchain *swapchain) override; bool destroy() noexcept override; - void render(const ccstd::vector& cameras) override; - - gfx::Device* getDevice() const override; + void render(const ccstd::vector &cameras) override; + gfx::Device *getDevice() const override; const MacroRecord &getMacros() const override; pipeline::GlobalDSManager *getGlobalDSManager() const override; gfx::DescriptorSetLayout *getDescriptorSetLayout() const override; gfx::DescriptorSet *getDescriptorSet() const override; - const ccstd::vector& getCommandBuffers() const override; + const ccstd::vector &getCommandBuffers() const override; pipeline::PipelineSceneData *getPipelineSceneData() const override; const ccstd::string &getConstantMacros() const override; scene::Model *getProfiler() const override; void setProfiler(scene::Model *profiler) override; - pipeline::GeometryRenderer *getGeometryRenderer() const override; - + pipeline::GeometryRenderer *getGeometryRenderer() const override; float getShadingScale() const override; void setShadingScale(float scale) override; - - const ccstd::string& getMacroString(const ccstd::string& name) const override; - int32_t getMacroInt(const ccstd::string& name) const override; - bool getMacroBool(const ccstd::string& name) const override; - - void setMacroString(const ccstd::string& name, const ccstd::string& value) override; - void setMacroInt(const ccstd::string& name, int32_t value) override; - void setMacroBool(const ccstd::string& name, bool value) override; - + const ccstd::string &getMacroString(const ccstd::string &name) const override; + int32_t getMacroInt(const ccstd::string &name) const override; + bool getMacroBool(const ccstd::string &name) const override; + void setMacroString(const ccstd::string &name, const ccstd::string &value) override; + void setMacroInt(const ccstd::string &name, int32_t value) override; + void setMacroBool(const ccstd::string &name, bool value) override; void onGlobalPipelineStateChanged() override; - - void setValue(const ccstd::string& name, int32_t value) override; - void setValue(const ccstd::string& name, bool value) override; - + void setValue(const ccstd::string &name, int32_t value) override; + void setValue(const ccstd::string &name, bool value) override; bool isOcclusionQueryEnabled() const override; - void resetRenderQueue(bool reset) override; bool isRenderQueueReset() const override; + void beginSetup() override; + void endSetup() override; + bool containsResource(const ccstd::string &name) const override; + uint32_t addRenderTexture(const ccstd::string &name, gfx::Format format, uint32_t width, uint32_t height, scene::RenderWindow *renderWindow) override; + uint32_t addRenderTarget(const ccstd::string &name, gfx::Format format, uint32_t width, uint32_t height, ResourceResidency residency) override; + uint32_t addDepthStencil(const ccstd::string &name, gfx::Format format, uint32_t width, uint32_t height, ResourceResidency residency) override; + void updateRenderWindow(const ccstd::string &name, scene::RenderWindow *renderWindow) override; + void beginFrame() override; + void endFrame() override; + RasterPassBuilder *addRasterPass(uint32_t width, uint32_t height, const ccstd::string &layoutName) override; + ComputePassBuilder *addComputePass(const ccstd::string &layoutName) override; + MovePassBuilder *addMovePass() override; + CopyPassBuilder *addCopyPass() override; + void presentAll() override; + SceneTransversal *createSceneTransversal(const scene::Camera *camera, const scene::RenderScene *scene) override; + LayoutGraphBuilder *getLayoutGraphBuilder() override; + gfx::DescriptorSetLayout *getDescriptorSetLayout(const ccstd::string &shaderName, UpdateFrequency freq) override; + void executeRenderGraph(const RenderGraph& rg); private: ccstd::vector _commandBuffers; diff --git a/native/cocos/renderer/pipeline/custom/RenderInterfaceTypes.h b/native/cocos/renderer/pipeline/custom/RenderInterfaceTypes.h index 1d1cec9329f..4b9b06882bd 100644 --- a/native/cocos/renderer/pipeline/custom/RenderInterfaceTypes.h +++ b/native/cocos/renderer/pipeline/custom/RenderInterfaceTypes.h @@ -76,40 +76,32 @@ class PipelineRuntime { PipelineRuntime& operator=(PipelineRuntime const& rhs) = delete; virtual ~PipelineRuntime() noexcept = default; - virtual bool activate(gfx::Swapchain * swapchain) = 0; + virtual bool activate(gfx::Swapchain *swapchain) = 0; virtual bool destroy() noexcept = 0; - virtual void render(const ccstd::vector& cameras) = 0; - - virtual gfx::Device* getDevice() const = 0; + virtual void render(const ccstd::vector &cameras) = 0; + virtual gfx::Device *getDevice() const = 0; virtual const MacroRecord &getMacros() const = 0; virtual pipeline::GlobalDSManager *getGlobalDSManager() const = 0; virtual gfx::DescriptorSetLayout *getDescriptorSetLayout() const = 0; virtual gfx::DescriptorSet *getDescriptorSet() const = 0; - virtual const ccstd::vector& getCommandBuffers() const = 0; + virtual const ccstd::vector &getCommandBuffers() const = 0; virtual pipeline::PipelineSceneData *getPipelineSceneData() const = 0; virtual const ccstd::string &getConstantMacros() const = 0; virtual scene::Model *getProfiler() const = 0; virtual void setProfiler(scene::Model *profiler) = 0; - virtual pipeline::GeometryRenderer *getGeometryRenderer() const = 0; - + virtual pipeline::GeometryRenderer *getGeometryRenderer() const = 0; virtual float getShadingScale() const = 0; virtual void setShadingScale(float scale) = 0; - - virtual const ccstd::string& getMacroString(const ccstd::string& name) const = 0; - virtual int32_t getMacroInt(const ccstd::string& name) const = 0; - virtual bool getMacroBool(const ccstd::string& name) const = 0; - - virtual void setMacroString(const ccstd::string& name, const ccstd::string& value) = 0; - virtual void setMacroInt(const ccstd::string& name, int32_t value) = 0; - virtual void setMacroBool(const ccstd::string& name, bool value) = 0; - + virtual const ccstd::string &getMacroString(const ccstd::string &name) const = 0; + virtual int32_t getMacroInt(const ccstd::string &name) const = 0; + virtual bool getMacroBool(const ccstd::string &name) const = 0; + virtual void setMacroString(const ccstd::string &name, const ccstd::string &value) = 0; + virtual void setMacroInt(const ccstd::string &name, int32_t value) = 0; + virtual void setMacroBool(const ccstd::string &name, bool value) = 0; virtual void onGlobalPipelineStateChanged() = 0; - - virtual void setValue(const ccstd::string& name, int32_t value) = 0; - virtual void setValue(const ccstd::string& name, bool value) = 0; - + virtual void setValue(const ccstd::string &name, int32_t value) = 0; + virtual void setValue(const ccstd::string &name, bool value) = 0; virtual bool isOcclusionQueryEnabled() const = 0; - virtual void resetRenderQueue(bool reset) = 0; virtual bool isRenderQueueReset() const = 0; }; @@ -124,35 +116,34 @@ class RenderNode { virtual ~RenderNode() noexcept = default; virtual ccstd::string getName() const = 0; - virtual void setName(const ccstd::string& name) = 0; + virtual void setName(const ccstd::string &name) = 0; }; class Setter : public RenderNode { public: Setter() noexcept = default; - virtual void setMat4(const ccstd::string& name, const cc::Mat4& mat) = 0; - virtual void setQuaternion(const ccstd::string& name, const cc::Quaternion& quat) = 0; - virtual void setColor(const ccstd::string& name, const gfx::Color& color) = 0; - virtual void setVec4(const ccstd::string& name, const cc::Vec4& vec) = 0; - virtual void setVec2(const ccstd::string& name, const cc::Vec2& vec) = 0; - virtual void setFloat(const ccstd::string& name, float v) = 0; - - virtual void setBuffer(const ccstd::string& name, gfx::Buffer* buffer) = 0; - virtual void setTexture(const ccstd::string& name, gfx::Texture* texture) = 0; - virtual void setReadWriteBuffer(const ccstd::string& name, gfx::Buffer* buffer) = 0; - virtual void setReadWriteTexture(const ccstd::string& name, gfx::Texture* texture) = 0; - virtual void setSampler(const ccstd::string& name, gfx::Sampler* sampler) = 0; + virtual void setMat4(const ccstd::string &name, const Mat4 &mat) = 0; + virtual void setQuaternion(const ccstd::string &name, const Quaternion &quat) = 0; + virtual void setColor(const ccstd::string &name, const gfx::Color &color) = 0; + virtual void setVec4(const ccstd::string &name, const Vec4 &vec) = 0; + virtual void setVec2(const ccstd::string &name, const Vec2 &vec) = 0; + virtual void setFloat(const ccstd::string &name, float v) = 0; + virtual void setBuffer(const ccstd::string &name, gfx::Buffer *buffer) = 0; + virtual void setTexture(const ccstd::string &name, gfx::Texture *texture) = 0; + virtual void setReadWriteBuffer(const ccstd::string &name, gfx::Buffer *buffer) = 0; + virtual void setReadWriteTexture(const ccstd::string &name, gfx::Texture *texture) = 0; + virtual void setSampler(const ccstd::string &name, gfx::Sampler *sampler) = 0; }; class RasterQueueBuilder : public Setter { public: RasterQueueBuilder() noexcept = default; - virtual void addSceneOfCamera(scene::Camera* camera, LightInfo light, SceneFlags sceneFlags) = 0; - virtual void addScene(const ccstd::string& name, SceneFlags sceneFlags) = 0; - virtual void addFullscreenQuad(cc::Material *material, uint32_t passID, SceneFlags sceneFlags) = 0; - virtual void addCameraQuad(scene::Camera* camera, cc::Material *material, uint32_t passID, SceneFlags sceneFlags) = 0; + virtual void addSceneOfCamera(scene::Camera *camera, LightInfo light, SceneFlags sceneFlags) = 0; + virtual void addScene(const ccstd::string &name, SceneFlags sceneFlags) = 0; + virtual void addFullscreenQuad(Material *material, uint32_t passID, SceneFlags sceneFlags) = 0; + virtual void addCameraQuad(scene::Camera *camera, Material *material, uint32_t passID, SceneFlags sceneFlags) = 0; virtual void clearRenderTarget(const ccstd::string &name, const gfx::Color &color) = 0; virtual void setViewport(const gfx::Viewport &viewport) = 0; }; @@ -161,8 +152,8 @@ class RasterPassBuilder : public Setter { public: RasterPassBuilder() noexcept = default; - virtual void addRasterView(const ccstd::string& name, const RasterView& view) = 0; - virtual void addComputeView(const ccstd::string& name, const ComputeView& view) = 0; + virtual void addRasterView(const ccstd::string &name, const RasterView &view) = 0; + virtual void addComputeView(const ccstd::string &name, const ComputeView &view) = 0; virtual RasterQueueBuilder *addQueue(QueueHint hint) = 0; virtual void setViewport(const gfx::Viewport &viewport) = 0; }; @@ -171,15 +162,14 @@ class ComputeQueueBuilder : public Setter { public: ComputeQueueBuilder() noexcept = default; - virtual void addDispatch(const ccstd::string& shader, uint32_t threadGroupCountX, uint32_t threadGroupCountY, uint32_t threadGroupCountZ) = 0; + virtual void addDispatch(const ccstd::string &shader, uint32_t threadGroupCountX, uint32_t threadGroupCountY, uint32_t threadGroupCountZ) = 0; }; class ComputePassBuilder : public Setter { public: ComputePassBuilder() noexcept = default; - virtual void addComputeView(const ccstd::string& name, const ComputeView& view) = 0; - + virtual void addComputeView(const ccstd::string &name, const ComputeView &view) = 0; virtual ComputeQueueBuilder *addQueue() = 0; }; @@ -187,14 +177,14 @@ class MovePassBuilder : public RenderNode { public: MovePassBuilder() noexcept = default; - virtual void addPair(const MovePair& pair) = 0; + virtual void addPair(const MovePair &pair) = 0; }; class CopyPassBuilder : public RenderNode { public: CopyPassBuilder() noexcept = default; - virtual void addPair(const CopyPair& pair) = 0; + virtual void addPair(const CopyPair &pair) = 0; }; class SceneVisitor { @@ -206,11 +196,10 @@ class SceneVisitor { SceneVisitor& operator=(SceneVisitor const& rhs) = delete; virtual ~SceneVisitor() noexcept = default; - virtual const pipeline::PipelineSceneData* getPipelineSceneData() const = 0; - + virtual const pipeline::PipelineSceneData *getPipelineSceneData() const = 0; virtual void setViewport(const gfx::Viewport &vp) = 0; virtual void setScissor(const gfx::Rect &rect) = 0; - virtual void bindPipelineState(gfx::PipelineState* pso) = 0; + virtual void bindPipelineState(gfx::PipelineState *pso) = 0; virtual void bindDescriptorSet(uint32_t set, gfx::DescriptorSet *descriptorSet, uint32_t dynamicOffsetCount, const uint32_t *dynamicOffsets) = 0; virtual void bindInputAssembler(gfx::InputAssembler *ia) = 0; virtual void updateBuffer(gfx::Buffer *buff, const void *data, uint32_t size) = 0; @@ -227,9 +216,9 @@ class SceneTask { virtual ~SceneTask() noexcept = default; virtual TaskType getTaskType() const noexcept = 0; - virtual void start() = 0; - virtual void join() = 0; - virtual void submit() = 0; + virtual void start() = 0; + virtual void join() = 0; + virtual void submit() = 0; }; class SceneTransversal { @@ -241,7 +230,7 @@ class SceneTransversal { SceneTransversal& operator=(SceneTransversal const& rhs) = delete; virtual ~SceneTransversal() noexcept = default; - virtual SceneTask* transverse(SceneVisitor *visitor) const = 0; + virtual SceneTask *transverse(SceneVisitor *visitor) const = 0; }; class LayoutGraphBuilder { @@ -254,14 +243,13 @@ class LayoutGraphBuilder { virtual ~LayoutGraphBuilder() noexcept = default; virtual void clear() = 0; - virtual uint32_t addRenderStage(const ccstd::string& name) = 0; - virtual uint32_t addRenderPhase(const ccstd::string& name, uint32_t parentID) = 0; - virtual void addShader(const ccstd::string& name, uint32_t parentPhaseID) = 0; - virtual void addDescriptorBlock(uint32_t nodeID, const DescriptorBlockIndex& index, const DescriptorBlockFlattened& block) = 0; - virtual void addUniformBlock(uint32_t nodeID, const DescriptorBlockIndex& index, const ccstd::string& name, const gfx::UniformBlock& uniformBlock) = 0; - virtual void reserveDescriptorBlock(uint32_t nodeID, const DescriptorBlockIndex& index, const DescriptorBlockFlattened& block) = 0; + virtual uint32_t addRenderStage(const ccstd::string &name) = 0; + virtual uint32_t addRenderPhase(const ccstd::string &name, uint32_t parentID) = 0; + virtual void addShader(const ccstd::string &name, uint32_t parentPhaseID) = 0; + virtual void addDescriptorBlock(uint32_t nodeID, const DescriptorBlockIndex &index, const DescriptorBlockFlattened &block) = 0; + virtual void addUniformBlock(uint32_t nodeID, const DescriptorBlockIndex &index, const ccstd::string &name, const gfx::UniformBlock &uniformBlock) = 0; + virtual void reserveDescriptorBlock(uint32_t nodeID, const DescriptorBlockIndex &index, const DescriptorBlockFlattened &block) = 0; virtual int compile() = 0; - virtual ccstd::string print() const = 0; }; @@ -271,25 +259,21 @@ class Pipeline : public PipelineRuntime { virtual void beginSetup() = 0; virtual void endSetup() = 0; - - virtual bool containsResource(const ccstd::string& name) const = 0; - virtual uint32_t addRenderTexture(const ccstd::string& name, gfx::Format format, uint32_t width, uint32_t height, scene::RenderWindow* renderWindow) = 0; - virtual uint32_t addRenderTarget(const ccstd::string& name, gfx::Format format, uint32_t width, uint32_t height, ResourceResidency residency) = 0; - virtual uint32_t addDepthStencil(const ccstd::string& name, gfx::Format format, uint32_t width, uint32_t height, ResourceResidency residency) = 0; - - virtual void updateRenderWindow(const ccstd::string& name, scene::RenderWindow* renderWindow) = 0; - + virtual bool containsResource(const ccstd::string &name) const = 0; + virtual uint32_t addRenderTexture(const ccstd::string &name, gfx::Format format, uint32_t width, uint32_t height, scene::RenderWindow *renderWindow) = 0; + virtual uint32_t addRenderTarget(const ccstd::string &name, gfx::Format format, uint32_t width, uint32_t height, ResourceResidency residency) = 0; + virtual uint32_t addDepthStencil(const ccstd::string &name, gfx::Format format, uint32_t width, uint32_t height, ResourceResidency residency) = 0; + virtual void updateRenderWindow(const ccstd::string &name, scene::RenderWindow *renderWindow) = 0; virtual void beginFrame() = 0; virtual void endFrame() = 0; - virtual RasterPassBuilder *addRasterPass(uint32_t width, uint32_t height, const ccstd::string& layoutName) = 0; - virtual ComputePassBuilder *addComputePass(const ccstd::string& layoutName) = 0; + virtual RasterPassBuilder *addRasterPass(uint32_t width, uint32_t height, const ccstd::string &layoutName) = 0; + virtual ComputePassBuilder *addComputePass(const ccstd::string &layoutName) = 0; virtual MovePassBuilder *addMovePass() = 0; virtual CopyPassBuilder *addCopyPass() = 0; virtual void presentAll() = 0; - virtual SceneTransversal *createSceneTransversal(const scene::Camera *camera, const scene::RenderScene *scene) = 0; virtual LayoutGraphBuilder *getLayoutGraphBuilder() = 0; - virtual gfx::DescriptorSetLayout *getDescriptorSetLayout(const ccstd::string& shaderName, UpdateFrequency freq) = 0; + virtual gfx::DescriptorSetLayout *getDescriptorSetLayout(const ccstd::string &shaderName, UpdateFrequency freq) = 0; }; class PipelineBuilder { @@ -301,7 +285,7 @@ class PipelineBuilder { PipelineBuilder& operator=(PipelineBuilder const& rhs) = delete; virtual ~PipelineBuilder() noexcept = default; - virtual void setup(const ccstd::vector& cameras, Pipeline* pipeline) = 0; + virtual void setup(const ccstd::vector &cameras, Pipeline *pipeline) = 0; }; class Factory { From ed4a48c48028d8654ab27626ae09b3f97ce2c6fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E6=A3=AE=E6=96=8C?= Date: Fri, 28 Oct 2022 15:40:50 +0800 Subject: [PATCH 102/829] v3.7 add camera prefab used for 2d project (#13170) * add camera prefab used for 2d project * unify params of camera in 2d project --- editor/assets/default_file_content/scene-2d | 8 +- editor/assets/default_prefab/2d/Camera.prefab | 6 +- editor/assets/default_prefab/2d/ui.meta | 12 + .../assets/default_prefab/2d/ui/Canvas.prefab | 245 ++++++++++++++++++ .../default_prefab/2d/ui/Canvas.prefab.meta | 13 + 5 files changed, 277 insertions(+), 7 deletions(-) create mode 100644 editor/assets/default_prefab/2d/ui.meta create mode 100644 editor/assets/default_prefab/2d/ui/Canvas.prefab create mode 100644 editor/assets/default_prefab/2d/ui/Canvas.prefab.meta diff --git a/editor/assets/default_file_content/scene-2d b/editor/assets/default_file_content/scene-2d index 3b3ac017bb3..63da4dbe2b1 100644 --- a/editor/assets/default_file_content/scene-2d +++ b/editor/assets/default_file_content/scene-2d @@ -133,12 +133,12 @@ "_enabled": true, "__prefab": null, "_projection": 0, - "_priority": 1073741824, + "_priority": 0, "_fov": 45, "_fovAxis": 0, - "_orthoHeight": 393.04773561811504, + "_orthoHeight": 10, "_near": 0, - "_far": 2000, + "_far": 1000, "_color": { "__type__": "cc.Color", "r": 0, @@ -160,7 +160,7 @@ "_shutter": 7, "_iso": 0, "_screenScale": 1, - "_visibility": 41943040, + "_visibility": 1108344832, "_targetTexture": null, "_id": "63WIch3o5BEYRlXzTT0oWc" }, diff --git a/editor/assets/default_prefab/2d/Camera.prefab b/editor/assets/default_prefab/2d/Camera.prefab index 19bdc3a8a19..c8f6141b384 100644 --- a/editor/assets/default_prefab/2d/Camera.prefab +++ b/editor/assets/default_prefab/2d/Camera.prefab @@ -75,9 +75,9 @@ "_far": 1000, "_color": { "__type__": "cc.Color", - "r": 51, - "g": 76, - "b": 120, + "r": 0, + "g": 0, + "b": 0, "a": 255 }, "_depth": 1, diff --git a/editor/assets/default_prefab/2d/ui.meta b/editor/assets/default_prefab/2d/ui.meta new file mode 100644 index 00000000000..4a8f95398ac --- /dev/null +++ b/editor/assets/default_prefab/2d/ui.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.1.0", + "importer": "directory", + "imported": true, + "uuid": "f81bb320-88da-4db8-b210-75e4d7544f3e", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/editor/assets/default_prefab/2d/ui/Canvas.prefab b/editor/assets/default_prefab/2d/ui/Canvas.prefab new file mode 100644 index 00000000000..5098aea4804 --- /dev/null +++ b/editor/assets/default_prefab/2d/ui/Canvas.prefab @@ -0,0 +1,245 @@ +[ + { + "__type__": "cc.Prefab", + "_name": "Canvas", + "_objFlags": 0, + "_native": "", + "data": { + "__id__": 1 + }, + "optimizationPolicy": 0, + "asyncLoadAssets": false, + "persistent": false + }, + { + "__type__": "cc.Node", + "_name": "Canvas", + "_objFlags": 0, + "_parent": null, + "_children": [ + { + "__id__": 2 + } + ], + "_active": true, + "_components": [ + { + "__id__": 4 + }, + { + "__id__": 6 + }, + { + "__id__": 8 + } + ], + "_prefab": { + "__id__": 10 + }, + "_lpos": { + "__type__": "cc.Vec3", + "x": 480, + "y": 320, + "z": 0 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_layer": 33554432, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "" + }, + { + "__type__": "cc.Node", + "_name": "Camera", + "_objFlags": 0, + "_parent": { + "__id__": 1 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 3 + } + ], + "_prefab": null, + "_lpos": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 1000 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_layer": 1073741824, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "" + }, + { + "__type__": "cc.Camera", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 2 + }, + "_enabled": true, + "__prefab": null, + "_projection": 0, + "_priority": 0, + "_fov": 45, + "_fovAxis": 0, + "_orthoHeight": 10, + "_near": 0, + "_far": 1000, + "_color": { + "__type__": "cc.Color", + "r": 0, + "g": 0, + "b": 0, + "a": 255 + }, + "_depth": 1, + "_stencil": 0, + "_clearFlags": 6, + "_rect": { + "__type__": "cc.Rect", + "x": 0, + "y": 0, + "width": 1, + "height": 1 + }, + "_aperture": 19, + "_shutter": 7, + "_iso": 0, + "_screenScale": 1, + "_visibility": 1108344832, + "_targetTexture": null, + "_id": "" + }, + { + "__type__": "cc.UITransform", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 1 + }, + "_enabled": true, + "__prefab": { + "__id__": 5 + }, + "_priority": 0, + "_contentSize": { + "__type__": "cc.Size", + "width": 960, + "height": 640 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_id": "" + }, + { + "__type__": "cc.CompPrefabInfo", + "fileId": "0dngp/9gNO34wUQjZfN/CX" + }, + { + "__type__": "cc.Canvas", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 1 + }, + "_enabled": true, + "__prefab": { + "__id__": 7 + }, + "_cameraComponent": { + "__id__": 3 + }, + "_alignCanvasWithScreen": true, + "_id": "" + }, + { + "__type__": "cc.CompPrefabInfo", + "fileId": "3f2oTdCepERZdpmIfLsrhd" + }, + { + "__type__": "cc.Widget", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 1 + }, + "_enabled": true, + "__prefab": { + "__id__": 9 + }, + "_alignFlags": 45, + "_target": null, + "_left": 0, + "_right": 0, + "_top": 0, + "_bottom": 0, + "_horizontalCenter": 0, + "_verticalCenter": 0, + "_isAbsLeft": true, + "_isAbsRight": true, + "_isAbsTop": true, + "_isAbsBottom": true, + "_isAbsHorizontalCenter": true, + "_isAbsVerticalCenter": true, + "_originalWidth": 0, + "_originalHeight": 0, + "_alignMode": 2, + "_lockFlags": 0, + "_id": "" + }, + { + "__type__": "cc.CompPrefabInfo", + "fileId": "e8a+bU/8dPDbbJguUzLdoF" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__uuid__": "f773db21-62b8-4540-956a-29bacf5ddbf5" + }, + "fileId": "5f6AJl30pDQId35UqIfQJ/" + } +] \ No newline at end of file diff --git a/editor/assets/default_prefab/2d/ui/Canvas.prefab.meta b/editor/assets/default_prefab/2d/ui/Canvas.prefab.meta new file mode 100644 index 00000000000..5e13e11d2b6 --- /dev/null +++ b/editor/assets/default_prefab/2d/ui/Canvas.prefab.meta @@ -0,0 +1,13 @@ +{ + "ver": "1.1.40", + "importer": "prefab", + "imported": true, + "uuid": "4c33600e-9ca9-483b-b734-946008261697", + "files": [ + ".json" + ], + "subMetas": {}, + "userData": { + "syncNodeName": "Canvas" + } +} From 280fd976bc5c63e5d6e32f6d0c0b4a3e38d30523 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B1=9F=E6=88=98?= <40414978+PatriceJiang@users.noreply.github.com> Date: Fri, 28 Oct 2022 15:44:33 +0800 Subject: [PATCH 103/829] Add EventTarget & EventBus (#13100) --- native/.clang-tidy | 1 + native/CMakeLists.txt | 59 +- native/cocos/3d/models/MorphModel.cpp | 1 - native/cocos/application/CocosApplication.cpp | 38 +- native/cocos/application/CocosApplication.h | 4 + native/cocos/audio/AudioEngine.cpp | 24 +- .../cocos/audio/android/AudioEngine-inl.cpp | 3 +- native/cocos/audio/include/AudioEngine.h | 11 +- native/cocos/bindings/auto/jsb_scene_auto.cpp | 56 -- .../cocos/bindings/event/EventDispatcher.cpp | 210 +----- native/cocos/bindings/event/EventDispatcher.h | 333 +--------- .../cocos/bindings/jswrapper/PrivateObject.h | 2 +- .../bindings/manual/jsb_assets_manual.cpp | 12 +- .../bindings/manual/jsb_scene_manual.cpp | 216 +++---- native/cocos/cocos.h | 4 +- native/cocos/core/Root.cpp | 25 +- native/cocos/core/Root.h | 28 +- native/cocos/core/assets/Asset.h | 4 +- native/cocos/core/assets/EffectAsset.cpp | 13 +- native/cocos/core/assets/EffectAsset.h | 10 +- native/cocos/core/assets/Material.cpp | 5 +- native/cocos/core/assets/Material.h | 5 + native/cocos/core/assets/SceneAsset.cpp | 1 + native/cocos/core/assets/SimpleTexture.cpp | 5 +- native/cocos/core/assets/SimpleTexture.h | 5 + native/cocos/core/assets/TextureBase.cpp | 4 +- native/cocos/core/assets/TextureBase.h | 4 + native/cocos/core/event/CallbacksInvoker.cpp | 265 -------- native/cocos/core/event/CallbacksInvoker.h | 476 -------------- .../CustomEventTypes.h => core/event/Event.h} | 58 +- .../core/event/EventBus.cpp} | 72 ++- native/cocos/core/event/EventBus.h | 215 +++++++ native/cocos/core/event/EventTarget.h | 599 ++++++++++++++++++ native/cocos/core/event/EventTypesToJS.cpp | 69 -- native/cocos/core/event/EventTypesToJS.h | 66 -- native/cocos/core/event/intl/EventBusMacros.h | 295 +++++++++ native/cocos/core/event/intl/EventIntl.h | 470 ++++++++++++++ .../cocos/core/event/intl/EventTargetMacros.h | 64 ++ native/cocos/core/event/intl/List.h | 106 ++++ native/cocos/core/scene-graph/Node.cpp | 178 ++---- native/cocos/core/scene-graph/Node.h | 313 ++------- native/cocos/core/scene-graph/NodeEvent.cpp | 63 -- native/cocos/core/scene-graph/NodeEvent.h | 64 -- .../core/scene-graph/NodeEventProcessor.cpp | 584 ----------------- .../core/scene-graph/NodeEventProcessor.h | 439 ------------- native/cocos/core/scene-graph/Scene.cpp | 4 +- .../core/scene-graph/SceneGraphModuleHeader.h | 4 +- .../cocos/editor-support/TypedArrayPool.cpp | 3 +- native/cocos/editor-support/TypedArrayPool.h | 3 + native/cocos/engine/BaseEngine.h | 20 +- native/cocos/engine/Engine.cpp | 110 +--- native/cocos/engine/Engine.h | 32 +- native/cocos/engine/EngineEvents.h | 317 +++++++++ native/cocos/platform/BasePlatform.h | 23 +- native/cocos/platform/IEventDispatch.h | 48 -- native/cocos/platform/SDLHelper.cpp | 43 +- native/cocos/platform/SDLHelper.h | 8 +- native/cocos/platform/UniversalPlatform.cpp | 40 -- native/cocos/platform/UniversalPlatform.h | 33 +- .../platform/android/AndroidPlatform.cpp | 38 +- .../android/jni/JniCocosSurfaceView.cpp | 64 +- native/cocos/platform/apple/JsbBridge.mm | 6 +- .../cocos/platform/apple/JsbBridgeWrapper.mm | 6 +- .../platform/empty/modules/SystemWindow.cpp | 2 +- .../cocos/platform/interfaces/OSInterface.cpp | 23 +- .../cocos/platform/interfaces/OSInterface.h | 23 +- .../interfaces/modules/ISystemWindow.h | 2 +- .../interfaces/modules/ISystemWindowManager.h | 15 +- .../cocos/platform/ios/AppDelegateBridge.mm | 15 +- native/cocos/platform/ios/IOSPlatform.mm | 6 +- native/cocos/platform/ios/View.mm | 2 +- .../platform/ios/modules/SystemWindow.mm | 2 +- .../java/jni/JniCocosKeyCodeHandler.cpp | 4 +- .../java/jni/JniCocosOrientationHelper.cpp | 29 +- .../java/jni/JniCocosTouchHandler.cpp | 2 +- .../platform/java/jni/glue/JniNativeGlue.cpp | 48 +- .../platform/java/jni/glue/JniNativeGlue.h | 5 - .../platform/java/modules/SystemWindow.cpp | 8 +- .../java/modules/SystemWindowManager.cpp | 1 - .../java/modules/SystemWindowManager.h | 2 +- .../platform/java/modules/XRInterface.cpp | 5 +- native/cocos/platform/linux/LinuxPlatform.cpp | 2 +- .../platform/linux/modules/SystemWindow.cpp | 3 +- .../linux/modules/SystemWindowManager.cpp | 7 +- .../linux/modules/SystemWindowManager.h | 3 +- native/cocos/platform/mac/AppDelegate.mm | 6 +- native/cocos/platform/mac/MacPlatform.mm | 6 +- native/cocos/platform/mac/View.mm | 11 +- native/cocos/platform/ohos/OhosPlatform.cpp | 1 - native/cocos/platform/ohos/View.cpp | 19 +- .../cocos/platform/win32/WindowsPlatform.cpp | 2 +- .../platform/win32/modules/SystemWindow.cpp | 3 +- .../win32/modules/SystemWindowManager.cpp | 8 +- .../win32/modules/SystemWindowManager.h | 3 +- native/cocos/renderer/GFXDeviceManager.h | 3 +- .../cocos/renderer/gfx-base/GFXDeviceObject.h | 1 + native/cocos/renderer/gfx-metal/MTLDevice.mm | 8 - native/cocos/scene/Model.cpp | 15 +- native/cocos/scene/Model.h | 18 +- native/cocos/ui/edit-box/EditBox-android.cpp | 2 +- native/cocos/ui/edit-box/EditBox-ios.mm | 18 +- native/cocos/ui/edit-box/EditBox-ohos.cpp | 2 +- native/tests/.gitignore | 1 + .../frameworks/runtime-src/Classes/Game.cpp | 2 - .../proj.ios_mac/mac/SimulatorApp.h | 12 +- .../proj.ios_mac/mac/SimulatorApp.mm | 12 +- .../runtime-src/proj.win32/SimulatorApp.cpp | 17 +- .../runtime-src/proj.win32/SimulatorApp.h | 17 +- .../simulator/libsimulator/CMakeLists.txt | 1 - .../libsimulator/lib/CustomAppEvent.h | 27 +- .../lib/platform/mac/PlayerMenuServiceMac.mm | 6 +- native/tools/swig-config/2d.i | 2 + native/tools/swig-config/assets.i | 2 + native/tools/swig-config/physics.i | 1 + native/tools/swig-config/pipeline.i | 2 + native/tools/swig-config/scene.i | 5 + native/utils/compile_file.js | 24 +- 117 files changed, 2829 insertions(+), 3918 deletions(-) delete mode 100644 native/cocos/core/event/CallbacksInvoker.cpp delete mode 100644 native/cocos/core/event/CallbacksInvoker.h rename native/cocos/{bindings/event/CustomEventTypes.h => core/event/Event.h} (52%) rename native/{tools/simulator/libsimulator/lib/CustomAppEvent.cpp => cocos/core/event/EventBus.cpp} (55%) create mode 100644 native/cocos/core/event/EventBus.h create mode 100644 native/cocos/core/event/EventTarget.h delete mode 100644 native/cocos/core/event/EventTypesToJS.cpp delete mode 100644 native/cocos/core/event/EventTypesToJS.h create mode 100644 native/cocos/core/event/intl/EventBusMacros.h create mode 100644 native/cocos/core/event/intl/EventIntl.h create mode 100644 native/cocos/core/event/intl/EventTargetMacros.h create mode 100644 native/cocos/core/event/intl/List.h delete mode 100644 native/cocos/core/scene-graph/NodeEvent.cpp delete mode 100644 native/cocos/core/scene-graph/NodeEvent.h delete mode 100644 native/cocos/core/scene-graph/NodeEventProcessor.cpp delete mode 100644 native/cocos/core/scene-graph/NodeEventProcessor.h create mode 100644 native/cocos/engine/EngineEvents.h delete mode 100644 native/cocos/platform/IEventDispatch.h create mode 100644 native/tests/.gitignore diff --git a/native/.clang-tidy b/native/.clang-tidy index 59e54504002..a9c49822341 100644 --- a/native/.clang-tidy +++ b/native/.clang-tidy @@ -40,6 +40,7 @@ Checks: > -readability-implicit-bool-conversion, -readability-implicit-bool-cast, -readability-magic-numbers, + -readability-identifier-length, -bugprone-branch-clone, -misc-static-assert, diff --git a/native/CMakeLists.txt b/native/CMakeLists.txt index 25fde6bdff7..4482002e58b 100644 --- a/native/CMakeLists.txt +++ b/native/CMakeLists.txt @@ -384,6 +384,16 @@ cocos_source_files( cocos/plugins/bus/EventBus.cpp ) +cocos_source_files( + cocos/core/event/Event.h + cocos/core/event/EventBus.h + cocos/core/event/EventBus.cpp + cocos/core/event/EventTarget.h + cocos/core/event/intl/EventIntl.h + cocos/core/event/intl/EventTargetMacros.h + cocos/core/event/intl/EventBusMacros.h +) + ##### base cocos_source_files( cocos/base/Agent.h @@ -484,7 +494,6 @@ endif() ############ platform cocos_source_files( - cocos/platform/IEventDispatch.h cocos/platform/BasePlatform.cpp cocos/platform/BasePlatform.h cocos/platform/UniversalPlatform.cpp @@ -1955,61 +1964,14 @@ cocos_source_files( # builtin cocos/core/builtin/BuiltinResMgr.cpp cocos/core/builtin/BuiltinResMgr.h - # cocos/core/builtin/ShaderSourceAssembly.cpp - # cocos/core/builtin/ShaderSourceAssembly.h - # cocos/core/builtin/Effects.cpp # generated - # cocos/core/builtin/Effects.h - # cocos/core/builtin/shader-sources/glsl1.cpp # generated - # cocos/core/builtin/shader-sources/glsl1.h - # cocos/core/builtin/shader-sources/glsl3.cpp # generated - # cocos/core/builtin/shader-sources/glsl3.h - # cocos/core/builtin/shader-sources/glsl4.cpp # generated - # cocos/core/builtin/shader-sources/glsl4.h - # cocos/core/data/Object.cpp cocos/core/data/Object.h cocos/core/data/JSBNativeDataHolder.h - # cocos/core/data/deserializer/EffectAssetDeserializer.cpp - # cocos/core/data/deserializer/EffectAssetDeserializer.h - # cocos/core/data/deserializer/MeshDeserializer.cpp - # cocos/core/data/deserializer/MeshDeserializer.h - # cocos/core/data/deserializer/MaterialDeserializer.cpp - # cocos/core/data/deserializer/MaterialDeserializer.h - # cocos/core/data/deserializer/ImageAssetDeserializer.cpp - # cocos/core/data/deserializer/ImageAssetDeserializer.h - # cocos/core/data/deserializer/TextureBaseDeserializer.h - # cocos/core/data/deserializer/TextureBaseDeserializer.cpp - # cocos/core/data/deserializer/Texture2DDeserializer.cpp - # cocos/core/data/deserializer/Texture2DDeserializer.h - # cocos/core/data/deserializer/TerrainAssetDeserializer.cpp - # cocos/core/data/deserializer/TerrainAssetDeserializer.h - # cocos/core/data/deserializer/IAssetDeserializer.h - # cocos/core/data/deserializer/AssetDeserializerFactory.cpp - # cocos/core/data/deserializer/AssetDeserializerFactory.h - - cocos/core/event/CallbacksInvoker.cpp - cocos/core/event/CallbacksInvoker.h - cocos/core/event/EventTypesToJS.h - cocos/core/event/EventTypesToJS.cpp - # cocos/core/event/Event.cpp - # cocos/core/event/Event.h - # cocos/core/scene-graph/Find.cpp - # cocos/core/scene-graph/Find.h cocos/core/scene-graph/Layers.h cocos/core/scene-graph/Node.cpp cocos/core/scene-graph/Node.h - # cocos/core/scene-graph/ComponentScheduler.h - # cocos/core/scene-graph/ComponentScheduler.cpp - # cocos/core/scene-graph/NodeActivator.cpp - # cocos/core/scene-graph/NodeActivator.h cocos/core/scene-graph/NodeEnum.h - cocos/core/scene-graph/NodeEvent.cpp - cocos/core/scene-graph/NodeEvent.h - cocos/core/scene-graph/NodeEventProcessor.cpp - cocos/core/scene-graph/NodeEventProcessor.h - # cocos/core/scene-graph/NodeUIProperties.cpp - # cocos/core/scene-graph/NodeUIProperties.h cocos/core/scene-graph/Scene.cpp cocos/core/scene-graph/Scene.h cocos/core/scene-graph/SceneGlobals.cpp @@ -2635,7 +2597,6 @@ cocos_source_files( ) cocos_source_files( - cocos/bindings/event/CustomEventTypes.h cocos/bindings/event/EventDispatcher.cpp cocos/bindings/event/EventDispatcher.h ) diff --git a/native/cocos/3d/models/MorphModel.cpp b/native/cocos/3d/models/MorphModel.cpp index be34145679b..429e01670dc 100644 --- a/native/cocos/3d/models/MorphModel.cpp +++ b/native/cocos/3d/models/MorphModel.cpp @@ -23,7 +23,6 @@ THE SOFTWARE. ****************************************************************************/ #include "3d/models/MorphModel.h" -#include "core/event/EventTypesToJS.h" namespace cc { diff --git a/native/cocos/application/CocosApplication.cpp b/native/cocos/application/CocosApplication.cpp index e226c7757c8..202d5ddf575 100644 --- a/native/cocos/application/CocosApplication.cpp +++ b/native/cocos/application/CocosApplication.cpp @@ -28,7 +28,6 @@ #include "base/Macros.h" #include "ApplicationManager.h" -#include "cocos/bindings/event/CustomEventTypes.h" #include "cocos/bindings/event/EventDispatcher.h" #include "cocos/bindings/jswrapper/SeApi.h" #include "cocos/bindings/manual/jsb_classtype.h" @@ -50,10 +49,7 @@ CocosApplication::~CocosApplication() { void CocosApplication::unregisterAllEngineEvents() { if (_engine != nullptr) { - _engine->offAll(BaseEngine::ON_START); - _engine->offAll(BaseEngine::ON_RESUME); - _engine->offAll(BaseEngine::ON_PAUSE); - _engine->offAll(BaseEngine::ON_CLOSE); + _engine->off(_engineEvents); } } @@ -63,20 +59,25 @@ int CocosApplication::init() { } unregisterAllEngineEvents(); - _engine->on(BaseEngine::ON_START, [this]() { - this->onStart(); - }); - _systemWindow = CC_GET_MAIN_SYSTEM_WINDOW(); - _engine->on(BaseEngine::ON_RESUME, [this]() { - this->onResume(); - }); - _engine->on(BaseEngine::ON_PAUSE, [this]() { - this->onPause(); - }); - _engine->on(BaseEngine::ON_CLOSE, [this]() { - this->onClose(); + _engineEvents = _engine->on([this](BaseEngine * /*emitter*/, BaseEngine::EngineStatus status) { + switch (status) { + case BaseEngine::ON_START: + this->onStart(); + break; + case BaseEngine::ON_RESUME: + this->onResume(); + break; + case BaseEngine::ON_PAUSE: + this->onPause(); + break; + case BaseEngine::ON_CLOSE: + this->onClose(); + break; + default: + CC_ASSERT(false); + } }); se::ScriptEngine *se = se::ScriptEngine::getInstance(); @@ -95,7 +96,8 @@ int CocosApplication::init() { auto logicSize = _systemWindow->getViewSize(); IScreen *screen = _engine->getInterface(); float pixelRatio = screen->getDevicePixelRatio(); - cc::EventDispatcher::dispatchResizeEvent(logicSize.x * pixelRatio, logicSize.y * pixelRatio); + uint32_t windowId = _systemWindow->getWindowId(); + events::Resize::broadcast(logicSize.x * pixelRatio, logicSize.y * pixelRatio, windowId); #endif return 0; } diff --git a/native/cocos/application/CocosApplication.h b/native/cocos/application/CocosApplication.h index fd1305fc324..e69f1c6bc05 100644 --- a/native/cocos/application/CocosApplication.h +++ b/native/cocos/application/CocosApplication.h @@ -131,5 +131,9 @@ class CC_DLL CocosApplication : public BaseApplication { ISystemWindow *_systemWindow{nullptr}; BaseEngine::Ptr _engine{nullptr}; + + BaseEngine::EngineStatusChange::EventID _engineEvents; + + }; } // namespace cc diff --git a/native/cocos/audio/AudioEngine.cpp b/native/cocos/audio/AudioEngine.cpp index b259113ca6a..5fb03611bbc 100644 --- a/native/cocos/audio/AudioEngine.cpp +++ b/native/cocos/audio/AudioEngine.cpp @@ -70,8 +70,9 @@ ccstd::unordered_map AudioEngine::sAudioIDInfoMap; AudioEngineImpl *AudioEngine::sAudioEngineImpl = nullptr; float AudioEngine::sVolumeFactor = 1.0F; -uint32_t AudioEngine::sOnPauseListenerID = 0; -uint32_t AudioEngine::sOnResumeListenerID = 0; +events::EnterBackground::Listener AudioEngine::sOnPauseListenerID; +events::EnterForeground::Listener AudioEngine::sOnResumeListenerID; + ccstd::vector AudioEngine::sBreakAudioID; AudioEngine::AudioEngineThreadPool *AudioEngine::sThreadPool = nullptr; @@ -158,15 +159,8 @@ void AudioEngine::end() { delete sDefaultProfileHelper; sDefaultProfileHelper = nullptr; - if (sOnPauseListenerID != 0) { - EventDispatcher::removeCustomEventListener(EVENT_COME_TO_BACKGROUND, sOnPauseListenerID); - sOnPauseListenerID = 0; - } - - if (sOnResumeListenerID != 0) { - EventDispatcher::removeCustomEventListener(EVENT_COME_TO_FOREGROUND, sOnResumeListenerID); - sOnResumeListenerID = 0; - } + sOnPauseListenerID.reset(); + sOnResumeListenerID.reset(); } bool AudioEngine::lazyInit() { @@ -177,8 +171,8 @@ bool AudioEngine::lazyInit() { sAudioEngineImpl = nullptr; return false; } - sOnPauseListenerID = EventDispatcher::addCustomEventListener(EVENT_COME_TO_BACKGROUND, AudioEngine::onEnterBackground); - sOnResumeListenerID = EventDispatcher::addCustomEventListener(EVENT_COME_TO_FOREGROUND, AudioEngine::onEnterForeground); + sOnPauseListenerID.bind(&onEnterBackground); + sOnResumeListenerID.bind(&onEnterForeground); } #if (CC_PLATFORM != CC_PLATFORM_ANDROID) @@ -333,7 +327,7 @@ void AudioEngine::resumeAll() { } } -void AudioEngine::onEnterBackground(const CustomEvent & /*event*/) { +void AudioEngine::onEnterBackground() { auto itEnd = sAudioIDInfoMap.end(); for (auto it = sAudioIDInfoMap.begin(); it != itEnd; ++it) { if (it->second.state == AudioState::PLAYING) { @@ -350,7 +344,7 @@ void AudioEngine::onEnterBackground(const CustomEvent & /*event*/) { #endif } -void AudioEngine::onEnterForeground(const CustomEvent & /*event*/) { +void AudioEngine::onEnterForeground() { auto itEnd = sBreakAudioID.end(); for (auto it = sBreakAudioID.begin(); it != itEnd; ++it) { auto iter = sAudioIDInfoMap.find(*it); diff --git a/native/cocos/audio/android/AudioEngine-inl.cpp b/native/cocos/audio/android/AudioEngine-inl.cpp index 45201c23623..92b525c61b4 100644 --- a/native/cocos/audio/android/AudioEngine-inl.cpp +++ b/native/cocos/audio/android/AudioEngine-inl.cpp @@ -52,8 +52,7 @@ #include "audio/android/ICallerThreadUtils.h" #include "audio/android/UrlAudioPlayer.h" #include "audio/android/cutils/log.h" -#include "bindings/event/CustomEventTypes.h" -#include "bindings/event/EventDispatcher.h" +#include "engine/EngineEvents.h" using namespace cc; //NOLINT diff --git a/native/cocos/audio/include/AudioEngine.h b/native/cocos/audio/include/AudioEngine.h index 66ddfc1a531..1695526fefd 100644 --- a/native/cocos/audio/include/AudioEngine.h +++ b/native/cocos/audio/include/AudioEngine.h @@ -36,8 +36,7 @@ #include "base/std/container/string.h" #include "base/std/container/unordered_map.h" #include "base/std/container/vector.h" -#include "bindings/event/CustomEventTypes.h" -#include "bindings/event/EventDispatcher.h" +#include "engine/EngineEvents.h" #ifdef ERROR #undef ERROR @@ -392,12 +391,12 @@ class EXPORT_DLL AudioEngine { private: static float sVolumeFactor; - static uint32_t sOnPauseListenerID; - static uint32_t sOnResumeListenerID; + static events::EnterBackground::Listener sOnPauseListenerID; + static events::EnterForeground::Listener sOnResumeListenerID; static ccstd::vector sBreakAudioID; - static void onEnterBackground(const CustomEvent &); - static void onEnterForeground(const CustomEvent &); + static void onEnterBackground(); + static void onEnterForeground(); friend class AudioEngineImpl; }; diff --git a/native/cocos/bindings/auto/jsb_scene_auto.cpp b/native/cocos/bindings/auto/jsb_scene_auto.cpp index ccd56e8a13b..8e8c3861ee5 100644 --- a/native/cocos/bindings/auto/jsb_scene_auto.cpp +++ b/native/cocos/bindings/auto/jsb_scene_auto.cpp @@ -2287,33 +2287,6 @@ static bool js_cc_Node_getParent(se::State& s) } SE_BIND_FUNC(js_cc_Node_getParent) -static bool js_cc_Node_getEventProcessor(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::Node *arg1 = (cc::Node *) NULL ; - cc::NodeEventProcessor *result = 0 ; - - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (cc::NodeEventProcessor *)((cc::Node const *)arg1)->getEventProcessor(); - // %typemap(out) SWIGTYPE* - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Node_getEventProcessor, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - - - return true; -} -SE_BIND_FUNC(js_cc_Node_getEventProcessor) - static bool js_cc_Node_getChildByUuid(se::State& s) { // js_function @@ -4079,7 +4052,6 @@ bool js_register_cc_Node(se::Object* obj) { cls->defineFunction("setSiblingIndex", _SE(js_cc_Node_setSiblingIndex)); cls->defineFunction("isActive", _SE(js_cc_Node_isActive)); cls->defineFunction("getParent", _SE(js_cc_Node_getParent)); - cls->defineFunction("getEventProcessor", _SE(js_cc_Node_getEventProcessor)); cls->defineFunction("getChildByUuid", _SE(js_cc_Node_getChildByUuid)); cls->defineFunction("getChildByName", _SE(js_cc_Node_getChildByName)); cls->defineFunction("getChildByPath", _SE(js_cc_Node_getChildByPath)); @@ -5830,33 +5802,6 @@ static bool js_cc_Root_getDebugViewConfig(se::State& s) } SE_BIND_FUNC(js_cc_Root_getDebugViewConfig) -static bool js_cc_Root_getEventProcessor(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::Root *arg1 = (cc::Root *) NULL ; - cc::CallbacksInvoker *result = 0 ; - - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (cc::CallbacksInvoker *)((cc::Root const *)arg1)->getEventProcessor(); - // %typemap(out) SWIGTYPE* - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Root_getEventProcessor, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - - - return true; -} -SE_BIND_FUNC(js_cc_Root_getEventProcessor) - static bool js_cc_Root_createRenderWindowFromSystemWindow__SWIG_0(se::State& s) { // js_overloaded_function @@ -6397,7 +6342,6 @@ bool js_register_cc_Root(se::Object* obj) { cls->defineFunction("getBatcher2D", _SE(js_cc_Root_getBatcher2D)); cls->defineFunction("setDebugViewConfig", _SE(js_cc_Root_setDebugViewConfig)); cls->defineFunction("getDebugViewConfig", _SE(js_cc_Root_getDebugViewConfig)); - cls->defineFunction("getEventProcessor", _SE(js_cc_Root_getEventProcessor)); cls->defineFunction("createRenderWindowFromSystemWindow", _SE(js_cc_Root_createRenderWindowFromSystemWindow)); diff --git a/native/cocos/bindings/event/EventDispatcher.cpp b/native/cocos/bindings/event/EventDispatcher.cpp index 7760db338e8..8c9deca07be 100644 --- a/native/cocos/bindings/event/EventDispatcher.cpp +++ b/native/cocos/bindings/event/EventDispatcher.cpp @@ -25,7 +25,6 @@ #include "EventDispatcher.h" #include #include "cocos/application/ApplicationManager.h" -#include "cocos/bindings/event/CustomEventTypes.h" #include "cocos/bindings/jswrapper/HandleObject.h" #include "cocos/bindings/jswrapper/SeApi.h" #include "cocos/bindings/manual/jsb_global_init.h" @@ -42,6 +41,7 @@ se::Object *jsKeyboardEventObj = nullptr; se::Object *jsControllerEventArray = nullptr; se::Object *jsResizeEventObj = nullptr; bool inited = false; +bool busListenerInited = false; // attach the argument object to the function void accessCacheArgObj(se::Object *func, se::Value *argObj, const char *cacheKey = "__reusedArgumentObject") { @@ -55,7 +55,20 @@ void accessCacheArgObj(se::Object *func, se::Value *argObj, const char *cacheKey } // namespace namespace cc { -ccstd::unordered_map EventDispatcher::listeners; +events::EnterForeground::Listener EventDispatcher::listenerEnterForeground; +events::EnterBackground::Listener EventDispatcher::listenerEnterBackground; +events::WindowChanged::Listener EventDispatcher::listenerWindowChanged; +events::LowMemory::Listener EventDispatcher::listenerLowMemory; +events::Touch::Listener EventDispatcher::listenerTouch; +events::Mouse::Listener EventDispatcher::listenerMouse; +events::Keyboard::Listener EventDispatcher::listenerKeyboard; +events::Controller::Listener EventDispatcher::listenerConroller; +events::Tick::Listener EventDispatcher::listenerTick; +events::Resize::Listener EventDispatcher::listenerResize; +events::Orientation::Listener EventDispatcher::listenerOrientation; +events::RestartVM::Listener EventDispatcher::listenerRestartVM; +events::Close::Listener EventDispatcher::listenerClose; + uint32_t EventDispatcher::hashListenerId = 1; bool EventDispatcher::initialized() { @@ -67,11 +80,25 @@ void EventDispatcher::init() { se::ScriptEngine::getInstance()->addBeforeCleanupHook([]() { EventDispatcher::destroy(); }); + + if (!busListenerInited) { + listenerTouch.bind(&dispatchTouchEvent); + listenerMouse.bind(&dispatchMouseEvent); + listenerKeyboard.bind(&dispatchKeyboardEvent); + listenerConroller.bind(&dispatchControllerEvent); + listenerTick.bind(&dispatchTickEvent); + listenerResize.bind(&dispatchResizeEvent); + listenerOrientation.bind(&dispatchOrientationChangeEvent); + listenerEnterBackground.bind(&dispatchEnterBackgroundEvent); + listenerEnterForeground.bind(&dispatchEnterForegroundEvent); + listenerLowMemory.bind(&dispatchMemoryWarningEvent); + listenerClose.bind(&dispatchCloseEvent); + listenerRestartVM.bind(&dispatchRestartVM); + busListenerInited = true; + } } void EventDispatcher::destroy() { - removeAllEventListeners(); - for (auto *touchObj : jsTouchObjPool) { touchObj->unroot(); touchObj->decRef(); @@ -164,7 +191,6 @@ void EventDispatcher::dispatchTouchEvent(const TouchEvent &touchEvent) { args.emplace_back(se::Value(jsTouchObjArray)); args.emplace_back(se::Value(touchEvent.windowId)); EventDispatcher::doDispatchJsEvent(eventName, args); - EventDispatcher::dispatchCustomEvent(eventName, 0); } void EventDispatcher::dispatchMouseEvent(const MouseEvent &mouseEvent) { @@ -195,19 +221,15 @@ void EventDispatcher::dispatchMouseEvent(const MouseEvent &mouseEvent) { const char *jsFunctionName = nullptr; switch (type) { case MouseEvent::Type::DOWN: - eventName = EVENT_MOUSE_DOWN; jsFunctionName = "onMouseDown"; break; case MouseEvent::Type::MOVE: - eventName = EVENT_MOUSE_MOVE; jsFunctionName = "onMouseMove"; break; case MouseEvent::Type::UP: - eventName = EVENT_MOUSE_UP; jsFunctionName = "onMouseUp"; break; case MouseEvent::Type::WHEEL: - eventName = EVENT_MOUSE_WHEEL; jsFunctionName = "onMouseWheel"; break; default: @@ -218,7 +240,6 @@ void EventDispatcher::dispatchMouseEvent(const MouseEvent &mouseEvent) { se::ValueArray args; args.emplace_back(se::Value(jsMouseEventObj)); EventDispatcher::doDispatchJsEvent(jsFunctionName, args); - EventDispatcher::dispatchCustomEvent(eventName, 0); } void EventDispatcher::dispatchKeyboardEvent(const KeyboardEvent &keyboardEvent) { @@ -325,38 +346,21 @@ void EventDispatcher::dispatchTickEvent(float /*dt*/) { tickVal.toObject()->call(tickArgsValArr, nullptr); } } - -void EventDispatcher::dispatchResizeEvent(int width, int height) { +// NOLINTNEXTLINE +void EventDispatcher::dispatchResizeEvent(int width, int height, uint32_t windowId) { se::AutoHandleScope scope; if (!jsResizeEventObj) { jsResizeEventObj = se::Object::createPlainObject(); jsResizeEventObj->root(); } + jsResizeEventObj->setProperty("windowId", se::Value(windowId)); jsResizeEventObj->setProperty("width", se::Value(width)); jsResizeEventObj->setProperty("height", se::Value(height)); se::ValueArray args; args.emplace_back(se::Value(jsResizeEventObj)); EventDispatcher::doDispatchJsEvent("onResize", args); - EventDispatcher::dispatchCustomEvent(EVENT_RESIZE, 0); -} - -void EventDispatcher::dispatchResizeEvent(const WindowEvent &windowEvent) { - se::AutoHandleScope scope; - if (!jsResizeEventObj) { - jsResizeEventObj = se::Object::createPlainObject(); - jsResizeEventObj->root(); - } - - jsResizeEventObj->setProperty("windowId", se::Value(windowEvent.windowId)); - jsResizeEventObj->setProperty("width", se::Value(windowEvent.width)); - jsResizeEventObj->setProperty("height", se::Value(windowEvent.height)); - - se::ValueArray args; - args.emplace_back(se::Value(jsResizeEventObj)); - EventDispatcher::doDispatchJsEvent("onResize", args); - EventDispatcher::dispatchCustomEvent(EVENT_RESIZE, 0); } void EventDispatcher::dispatchOrientationChangeEvent(int orientation) { @@ -382,65 +386,22 @@ void EventDispatcher::dispatchOrientationChangeEvent(int orientation) { void EventDispatcher::dispatchEnterBackgroundEvent() { EventDispatcher::doDispatchJsEvent("onPause", se::EmptyValueArray); - EventDispatcher::dispatchCustomEvent(EVENT_COME_TO_BACKGROUND, 0); } void EventDispatcher::dispatchEnterForegroundEvent() { EventDispatcher::doDispatchJsEvent("onResume", se::EmptyValueArray); - EventDispatcher::dispatchCustomEvent(EVENT_COME_TO_FOREGROUND, 0); } void EventDispatcher::dispatchMemoryWarningEvent() { EventDispatcher::doDispatchJsEvent("onMemoryWarning", se::EmptyValueArray); - EventDispatcher::dispatchCustomEvent(EVENT_MEMORY_WARNING, 0); } void EventDispatcher::dispatchRestartVM() { EventDispatcher::doDispatchJsEvent("onRestartVM", se::EmptyValueArray); - EventDispatcher::dispatchCustomEvent(EVENT_RESTART_VM, 0); } void EventDispatcher::dispatchCloseEvent() { EventDispatcher::doDispatchJsEvent("onClose", se::EmptyValueArray); - EventDispatcher::dispatchCustomEvent(EVENT_CLOSE, 0); -} - -void EventDispatcher::dispatchDestroyWindowEvent() { -#if CC_PLATFORM == CC_PLATFORM_WINDOWS - EventDispatcher::dispatchCustomEvent(EVENT_DESTROY_WINDOW, 1, ISystemWindow::mainWindowId); -#else - EventDispatcher::dispatchCustomEvent(EVENT_DESTROY_WINDOW, 0); -#endif -} - -void EventDispatcher::dispatchDestroyWindowEvent(cc::ISystemWindow *window) { -#if CC_PLATFORM == CC_PLATFORM_WINDOWS - EventDispatcher::dispatchCustomEvent(EVENT_DESTROY_WINDOW, 1, window->getWindowId()); -#else - CC_UNUSED_PARAM(window); - EventDispatcher::dispatchCustomEvent(EVENT_DESTROY_WINDOW, 0); -#endif -} - -void EventDispatcher::dispatchRecreateWindowEvent() { -#if CC_PLATFORM == CC_PLATFORM_WINDOWS - EventDispatcher::dispatchCustomEvent(EVENT_RECREATE_WINDOW, 1, ISystemWindow::mainWindowId); -#else - EventDispatcher::dispatchCustomEvent(EVENT_RECREATE_WINDOW, 0); -#endif -} - -void EventDispatcher::dispatchRecreateWindowEvent(cc::ISystemWindow *window) { -#if CC_PLATFORM == CC_PLATFORM_WINDOWS - EventDispatcher::dispatchCustomEvent(EVENT_RECREATE_WINDOW, 1, window->getWindowId()); -#else - CC_UNUSED_PARAM(window); - EventDispatcher::dispatchCustomEvent(EVENT_RECREATE_WINDOW, 0); -#endif -} - -void EventDispatcher::dispatchSceneLoadEvent() { - EventDispatcher::dispatchCustomEvent(EVENT_SCENE_LOAD, 0); } void EventDispatcher::doDispatchJsEvent(const char *jsFunctionName, const std::vector &args) { @@ -458,107 +419,4 @@ void EventDispatcher::doDispatchJsEvent(const char *jsFunctionName, const std::v } } -uint32_t EventDispatcher::addCustomEventListener(const ccstd::string &eventName, const CustomEventListener &listener) { - Node *newNode = ccnew Node(); - newNode->listener = listener; - newNode->listenerID = hashListenerId; - newNode->next = nullptr; - - auto iter = listeners.find(eventName); - if (iter == listeners.end()) { - listeners.emplace(eventName, newNode); - } else { - Node *node = iter->second; - CC_ASSERT(node != nullptr); - Node *prev = nullptr; - while (node != nullptr) { - prev = node; - node = node->next; - } - prev->next = newNode; - } - return hashListenerId++; -} - -void EventDispatcher::removeCustomEventListener(const ccstd::string &eventName, uint32_t listenerID) { - if (eventName.empty()) { - return; - } - - if (listenerID == 0) { - return; - } - - auto iter = listeners.find(eventName); - if (iter != listeners.end()) { - Node *prev = nullptr; - Node *node = iter->second; - while (node != nullptr) { - if (node->listenerID == listenerID) { - if (prev != nullptr) { - prev->next = node->next; - } else if (node->next) { - listeners[eventName] = node->next; - } else { - listeners.erase(iter); - } - - delete node; - return; - } - - prev = node; - node = node->next; - } - } -} - -void EventDispatcher::removeAllCustomEventListeners(const ccstd::string &eventName) { - auto iter = listeners.find(eventName); - if (iter != listeners.end()) { - Node *node = iter->second; - while (node != nullptr) { - Node *next = node->next; - delete node; - node = next; - } - listeners.erase(iter); - } -} - -void EventDispatcher::removeAllEventListeners() { - for (auto &&node : listeners) { - delete node.second; - } - listeners.clear(); - // start from 1 cuz 0 represents pause and resume - hashListenerId = 1; -} - -void EventDispatcher::dispatchCustomEvent(const char *eventName, int argNum, ...) { - CC_ASSERT(eventName && (strcmp(eventName, "") != 0)); - CustomEvent event; - event.name = eventName; - va_list vl; - va_start(vl, argNum); - // Step through the list. - for (int i = 0; i < argNum; ++i) { - event.args[i] = va_arg(vl, EventParameterType); - } - va_end(vl); - dispatchCustomEvent(event); -} -void EventDispatcher::dispatchCustomEvent(const CustomEvent &event) { - auto iter = listeners.find(event.name); - if (iter != listeners.end()) { - Node *next = nullptr; - Node *node = iter->second; - while (node != nullptr) { - next = node->next; - node->listener(event); - node = next; - } - } -} - } // end of namespace cc diff --git a/native/cocos/bindings/event/EventDispatcher.h b/native/cocos/bindings/event/EventDispatcher.h index c5cdb159480..f3d8899f1d7 100644 --- a/native/cocos/bindings/event/EventDispatcher.h +++ b/native/cocos/bindings/event/EventDispatcher.h @@ -27,341 +27,50 @@ #include #include -#include "base/std/container/string.h" -#include "base/std/container/unordered_map.h" -#include "base/std/container/vector.h" + +#include "engine/EngineEvents.h" namespace se { class Value; } namespace cc { - -class ISystemWindow; - -enum class OSEventType { - KEYBOARD_OSEVENT = 0, - TOUCH_OSEVENT = 1, - MOUSE_OSEVENT = 2, - CUSTOM_OSEVENT = 3, - DEVICE_OSEVENT = 4, - WINDOW_OSEVENT = 5, - APP_OSEVENT = 6, - CONTROLLER_OSEVENT = 7, - UNKNOWN_OSEVENT = 8 -}; - -class OSEvent { -public: - explicit OSEvent(OSEventType type) : _type(type) {} - - template - std::enable_if_t::value, const T &> static castEvent(const cc::OSEvent &ev) { - const T &evDetail = dynamic_cast(ev); - return std::move(evDetail); - } - - virtual OSEventType eventType() const { - return _type; - } - -private: - OSEventType _type = OSEventType::UNKNOWN_OSEVENT; -}; - -#define CONSTRUCT_EVENT(name, type) \ - name() : OSEvent(type) {} - -class WindowEvent : public OSEvent { -public: - CONSTRUCT_EVENT(WindowEvent, OSEventType::WINDOW_OSEVENT) - enum class Type { - QUIT = 0, - SHOW, - RESTORED, - SIZE_CHANGED, - RESIZED, - HIDDEN, - MINIMIZED, - CLOSE, - UNKNOWN, - }; - Type type = Type::UNKNOWN; - int width = 0; - int height = 0; - uint32_t windowId = 0; -}; -// Touch event related - -class TouchInfo { -public: - float x = 0; - float y = 0; - int index = 0; - - TouchInfo(float x, float y, int index) - : x(x), - y(y), - index(index) {} -}; - -class TouchEvent : public OSEvent { -public: - CONSTRUCT_EVENT(TouchEvent, OSEventType::TOUCH_OSEVENT) - enum class Type { - BEGAN, - MOVED, - ENDED, - CANCELLED, - UNKNOWN - }; - - ccstd::vector touches; - Type type = Type::UNKNOWN; - uint32_t windowId = 0; -}; - -enum class StickKeyCode { - UNDEFINE = 0, - A, - B, - X, - Y, - L1, - R1, - MINUS, - PLUS, - L3, - R3, - MENU, - START, - TRIGGER_LEFT, - TRIGGER_RIGHT, -}; - -enum class StickAxisCode { - UNDEFINE = 0, - X, - Y, - LEFT_STICK_X, - LEFT_STICK_Y, - RIGHT_STICK_X, - RIGHT_STICK_Y, - L2, - R2, - LEFT_GRIP, - RIGHT_GRIP, -}; - -struct ControllerInfo { - struct AxisInfo { - StickAxisCode axis{StickAxisCode::UNDEFINE}; - float value{0.F}; - AxisInfo(StickAxisCode axis, float value) : axis(axis), value(value) {} - }; - struct ButtonInfo { - StickKeyCode key{StickKeyCode::UNDEFINE}; - bool isPress{false}; - ButtonInfo(StickKeyCode key, bool isPress) : key(key), isPress(isPress) {} - }; - - int napdId{0}; - std::vector axisInfos; - std::vector buttonInfos; -}; - -struct ControllerEvent : public OSEvent { - CONSTRUCT_EVENT(ControllerEvent, OSEventType::CONTROLLER_OSEVENT) - enum class Type { - GAMEPAD, - HANDLE, - UNKNOWN - }; - Type type = Type::UNKNOWN; - std::vector> controllerInfos; -}; - -class MouseEvent : public OSEvent { -public: - CONSTRUCT_EVENT(MouseEvent, OSEventType::MOUSE_OSEVENT) - enum class Type { - DOWN, - UP, - MOVE, - WHEEL, - UNKNOWN - }; - - float x = 0.0F; - float y = 0.0F; - // The button number that was pressed when the mouse event was fired: Left button=0, middle button=1 (if present), right button=2. - // For mice configured for left handed use in which the button actions are reversed the values are instead read from right to left. - uint16_t button = 0; - Type type = Type::UNKNOWN; - uint32_t windowId = 0; -}; - -enum class KeyCode { - /** - * @en The back key on mobile phone - * @zh 移动端返回键 - */ - MOBILE_BACK = 6, - BACKSPACE = 8, - TAB = 9, - NUM_LOCK = 12, - NUMPAD_ENTER = 20013, - ENTER = 13, - SHIFT_RIGHT = 20016, - SHIFT_LEFT = 16, - CONTROL_LEFT = 17, - CONTROL_RIGHT = 20017, - ALT_RIGHT = 20018, - ALT_LEFT = 18, - PAUSE = 19, - CAPS_LOCK = 20, - ESCAPE = 27, - SPACE = 32, - PAGE_UP = 33, - PAGE_DOWN = 34, - END = 35, - HOME = 36, - ARROW_LEFT = 37, - ARROW_UP = 38, - ARROW_RIGHT = 39, - ARROW_DOWN = 40, - INSERT = 45, - DELETE_KEY = 46, //DELETE has conflict - META_LEFT = 91, - CONTEXT_MENU = 20093, - PRINT_SCREEN = 20094, - META_RIGHT = 93, - NUMPAD_MULTIPLY = 106, - NUMPAD_PLUS = 107, - NUMPAD_MINUS = 109, - NUMPAD_DECIMAL = 110, - NUMPAD_DIVIDE = 111, - SCROLLLOCK = 145, - SEMICOLON = 186, - EQUAL = 187, - COMMA = 188, - MINUS = 189, - PERIOD = 190, - SLASH = 191, - BACKQUOTE = 192, - BRACKET_LEFT = 219, - BACKSLASH = 220, - BRACKET_RIGHT = 221, - QUOTE = 222, - NUMPAD_0 = 10048, - NUMPAD_1 = 10049, - NUMPAD_2 = 10050, - NUMPAD_3 = 10051, - NUMPAD_4 = 10052, - NUMPAD_5 = 10053, - NUMPAD_6 = 10054, - NUMPAD_7 = 10055, - NUMPAD_8 = 10056, - NUMPAD_9 = 10057, - DPAD_UP = 1003, - DPAD_LEFT = 1000, - DPAD_DOWN = 1004, - DPAD_RIGHT = 1001, - DPAD_CENTER = 1005 -}; - -class KeyboardEvent : public OSEvent { -public: - CONSTRUCT_EVENT(KeyboardEvent, OSEventType::KEYBOARD_OSEVENT) - enum class Action { - PRESS, - RELEASE, - REPEAT, - UNKNOWN - }; - - uint32_t windowId = 0; - int key = -1; - Action action = Action::UNKNOWN; - bool altKeyActive = false; - bool ctrlKeyActive = false; - bool metaKeyActive = false; - bool shiftKeyActive = false; - // TODO(mingo): support caps lock? -}; -union EventParameterType { - void *ptrVal; - int32_t longVal; - int intVal; - int16_t shortVal; - char charVal; - bool boolVal; -}; - -class CustomEvent : public OSEvent { -public: - CONSTRUCT_EVENT(CustomEvent, OSEventType::CUSTOM_OSEVENT) - ccstd::string name; - EventParameterType args[10]; - - virtual ~CustomEvent() = default; // NOLINT(modernize-use-nullptr) -}; - -class DeviceEvent : public OSEvent { -public: - CONSTRUCT_EVENT(DeviceEvent, OSEventType::DEVICE_OSEVENT) - enum class Type { - MEMORY, - ORIENTATION, - UNKNOWN - }; - EventParameterType args[3]; - Type type{Type::UNKNOWN}; // NOLINT(modernize-use-nullptr) -}; - class EventDispatcher { public: static void init(); static void destroy(); static bool initialized(); + static void doDispatchJsEvent(const char *jsFunctionName, const std::vector &args); + +private: static void dispatchTouchEvent(const TouchEvent &touchEvent); static void dispatchMouseEvent(const MouseEvent &mouseEvent); static void dispatchKeyboardEvent(const KeyboardEvent &keyboardEvent); static void dispatchControllerEvent(const ControllerEvent &controllerEvent); static void dispatchTickEvent(float dt); - static void dispatchResizeEvent(int width, int height); - static void dispatchResizeEvent(const WindowEvent &windowEvent); + static void dispatchResizeEvent(int width, int height, uint32_t windowId = UINT32_MAX); static void dispatchOrientationChangeEvent(int orientation); static void dispatchEnterBackgroundEvent(); static void dispatchEnterForegroundEvent(); static void dispatchMemoryWarningEvent(); static void dispatchRestartVM(); static void dispatchCloseEvent(); - static void dispatchDestroyWindowEvent(); - static void dispatchDestroyWindowEvent(cc::ISystemWindow *window); - static void dispatchRecreateWindowEvent(); - static void dispatchRecreateWindowEvent(cc::ISystemWindow *window); - static void dispatchSceneLoadEvent(); - - using CustomEventListener = std::function; - static uint32_t addCustomEventListener(const ccstd::string &eventName, const CustomEventListener &listener); - static void removeCustomEventListener(const ccstd::string &eventName, uint32_t listenerID); - static void removeAllCustomEventListeners(const ccstd::string &eventName); - static void removeAllEventListeners(); - static void dispatchCustomEvent(const CustomEvent &event); - static void doDispatchJsEvent(const char *jsFunctionName, const std::vector &args); - -private: - static void dispatchCustomEvent(const char *eventName, int argNum, ...); - - struct Node { - CustomEventListener listener; - uint32_t listenerID; - struct Node *next = nullptr; - }; - static ccstd::unordered_map listeners; - static uint32_t hashListenerId; //simple increment hash + static uint32_t hashListenerId; // simple increment hash + + static events::EnterForeground::Listener listenerEnterForeground; + static events::EnterBackground::Listener listenerEnterBackground; + static events::WindowChanged::Listener listenerWindowChanged; + static events::LowMemory::Listener listenerLowMemory; + static events::Touch::Listener listenerTouch; + static events::Mouse::Listener listenerMouse; + static events::Keyboard::Listener listenerKeyboard; + static events::Controller::Listener listenerConroller; + static events::Tick::Listener listenerTick; + static events::Resize::Listener listenerResize; + static events::Orientation::Listener listenerOrientation; + static events::RestartVM::Listener listenerRestartVM; + static events::Close::Listener listenerClose; }; } // end of namespace cc diff --git a/native/cocos/bindings/jswrapper/PrivateObject.h b/native/cocos/bindings/jswrapper/PrivateObject.h index 2fb2910b087..9b740be7395 100644 --- a/native/cocos/bindings/jswrapper/PrivateObject.h +++ b/native/cocos/bindings/jswrapper/PrivateObject.h @@ -201,7 +201,7 @@ inline void inHeap(void *ptr) { auto anchor = reinterpret_cast(&a); auto p = reinterpret_cast(ptr); // must be in heaps - CC_ASSERT(abs(anchor - p) > r); + CC_ASSERT(std::abs(anchor - p) > r); } #endif diff --git a/native/cocos/bindings/manual/jsb_assets_manual.cpp b/native/cocos/bindings/manual/jsb_assets_manual.cpp index 4994d066f4e..8cdfda67bc6 100644 --- a/native/cocos/bindings/manual/jsb_assets_manual.cpp +++ b/native/cocos/bindings/manual/jsb_assets_manual.cpp @@ -24,8 +24,9 @@ ****************************************************************************/ #include "bindings/auto/jsb_assets_auto.h" +#include "core/assets/Material.h" +#include "core/assets/SimpleTexture.h" #include "core/data/JSBNativeDataHolder.h" -#include "core/event/EventTypesToJS.h" #include "jsb_scene_manual.h" #ifndef JSB_ALLOC @@ -70,14 +71,15 @@ static bool js_assets_SimpleTexture_registerListeners(se::State &s) // NOLINT(re auto *cobj = SE_THIS_OBJECT(s); SE_PRECONDITION2(cobj, false, "Invalid Native Object"); auto *thisObj = s.thisObject(); - cobj->on(cc::EventTypesToJS::SIMPLE_TEXTURE_GFX_TEXTURE_UPDATED, [thisObj](cc::gfx::Texture *texture) { + + cobj->on([thisObj](cc::SimpleTexture * /*emitter*/, cc::gfx::Texture *texture) { se::AutoHandleScope hs; se::Value arg0; nativevalue_to_se(texture, arg0, nullptr); se::ScriptEngine::getInstance()->callFunction(thisObj, "_onGFXTextureUpdated", 1, &arg0); }); - cobj->on(cc::EventTypesToJS::SIMPLE_TEXTURE_AFTER_ASSIGN_IMAGE, [thisObj](cc::ImageAsset *image) { + cobj->on([thisObj](cc::SimpleTexture * /*emitter*/, cc::ImageAsset *image) { se::AutoHandleScope hs; se::Value arg0; nativevalue_to_se(image, arg0, nullptr); @@ -93,7 +95,7 @@ static bool js_assets_TextureBase_registerGFXSamplerUpdatedListener(se::State &s auto *cobj = SE_THIS_OBJECT(s); SE_PRECONDITION2(cobj, false, "Invalid Native Object"); auto *thisObj = s.thisObject(); - cobj->on(cc::EventTypesToJS::TEXTURE_BASE_GFX_SAMPLER_UPDATED, [thisObj](cc::gfx::Sampler *sampler) { + cobj->on([thisObj](cc::TextureBase * /*emitter*/, cc::gfx::Sampler *sampler) { se::AutoHandleScope hs; se::Value arg0; nativevalue_to_se(sampler, arg0, nullptr); @@ -109,7 +111,7 @@ static bool js_assets_Material_registerPassesUpdatedListener(se::State &s) // NO auto *cobj = SE_THIS_OBJECT(s); SE_PRECONDITION2(cobj, false, "Invalid Native Object"); auto *thisObj = s.thisObject(); - cobj->on(cc::EventTypesToJS::MATERIAL_PASSES_UPDATED, [thisObj]() { + cobj->on([thisObj](cc::Material * /*emitter*/ ){ se::AutoHandleScope hs; se::ScriptEngine::getInstance()->callFunction(thisObj, "_onPassesUpdated", 0, nullptr); }); diff --git a/native/cocos/bindings/manual/jsb_scene_manual.cpp b/native/cocos/bindings/manual/jsb_scene_manual.cpp index a554d7ace62..47b69c2f5c8 100644 --- a/native/cocos/bindings/manual/jsb_scene_manual.cpp +++ b/native/cocos/bindings/manual/jsb_scene_manual.cpp @@ -27,9 +27,7 @@ #include "bindings/auto/jsb_scene_auto.h" #include "bindings/auto/jsb_gfx_auto.h" #include "core/Root.h" -#include "core/event/EventTypesToJS.h" #include "core/scene-graph/Node.h" -#include "core/scene-graph/NodeEvent.h" #include "scene/Model.h" #ifndef JSB_ALLOC @@ -112,7 +110,7 @@ static bool js_root_registerListeners(se::State &s) // NOLINT(readability-identi SE_PRECONDITION2(cobj, false, "Invalid Native Object"); #define DISPATCH_EVENT_TO_JS_ARGS_0(eventType, jsFuncName) \ - cobj->getEventProcessor()->on(eventType, [](cc::Root *rootObj) { \ + cobj->on([](cc::Root *rootObj) { \ se::AutoHandleScope hs; \ se::Value rootVal; \ bool ok = nativevalue_to_se(rootObj, rootVal); \ @@ -120,19 +118,18 @@ static bool js_root_registerListeners(se::State &s) // NOLINT(readability-identi if (rootVal.isObject()) { \ se::ScriptEngine::getInstance()->callFunction(rootVal.toObject(), #jsFuncName, 0, nullptr); \ } \ - }) + }); - DISPATCH_EVENT_TO_JS_ARGS_0(cc::EventTypesToJS::DIRECTOR_BEFORE_COMMIT, _onDirectorBeforeCommit); - DISPATCH_EVENT_TO_JS_ARGS_0(cc::EventTypesToJS::DIRECTOR_BEFORE_RENDER, _onDirectorBeforeRender); + DISPATCH_EVENT_TO_JS_ARGS_0(cc::Root::BeforeCommit, _onDirectorBeforeCommit); + DISPATCH_EVENT_TO_JS_ARGS_0(cc::Root::BeforeRender, _onDirectorBeforeRender); return true; } SE_BIND_FUNC(js_root_registerListeners) // NOLINT(readability-identifier-naming) static void registerOnTransformChanged(cc::Node *node, se::Object *jsObject) { - node->on( - cc::NodeEventType::TRANSFORM_CHANGED, - [jsObject](cc::TransformBit transformBit) { + node->on( + [jsObject](cc::Node * /* emitter*/, cc::TransformBit transformBit) { se::AutoHandleScope hs; se::Value arg0; nativevalue_to_se(transformBit, arg0); @@ -141,9 +138,8 @@ static void registerOnTransformChanged(cc::Node *node, se::Object *jsObject) { } static void registerOnParentChanged(cc::Node *node, se::Object *jsObject) { - node->on( - cc::NodeEventType::PARENT_CHANGED, - [jsObject](cc::Node *oldParent) { + node->on( + [jsObject](cc::Node * /*emitter*/, cc::Node *oldParent) { se::AutoHandleScope hs; se::Value arg0; nativevalue_to_se(oldParent, arg0); @@ -152,9 +148,8 @@ static void registerOnParentChanged(cc::Node *node, se::Object *jsObject) { } static void registerOnLayerChanged(cc::Node *node, se::Object *jsObject) { - node->on( - cc::NodeEventType::LAYER_CHANGED, - [jsObject](uint32_t layer) { + node->on( + [jsObject](cc::Node * /*emitter*/, uint32_t layer) { se::AutoHandleScope hs; se::Value arg0; nativevalue_to_se(layer, arg0); @@ -163,9 +158,8 @@ static void registerOnLayerChanged(cc::Node *node, se::Object *jsObject) { } static void registerOnChildRemoved(cc::Node *node, se::Object *jsObject) { - node->on( - cc::NodeEventType::CHILD_REMOVED, - [jsObject](cc::Node *child) { + node->on( + [jsObject](cc::Node * /* emitter*/, cc::Node *child) { se::AutoHandleScope hs; se::Value arg0; nativevalue_to_se(child, arg0); @@ -174,9 +168,8 @@ static void registerOnChildRemoved(cc::Node *node, se::Object *jsObject) { } static void registerOnChildAdded(cc::Node *node, se::Object *jsObject) { - node->on( - cc::NodeEventType::CHILD_ADDED, - [jsObject](cc::Node *child) { + node->on( + [jsObject](cc::Node * /*emitter*/, cc::Node *child) { se::AutoHandleScope hs; se::Value arg0; nativevalue_to_se(child, arg0); @@ -185,51 +178,45 @@ static void registerOnChildAdded(cc::Node *node, se::Object *jsObject) { } static void registerOnSiblingOrderChanged(cc::Node *node, se::Object *jsObject) { - node->on( - cc::NodeEventType::SIBLING_ORDER_CHANGED, - [jsObject]() { - se::AutoHandleScope hs; + node->on( + [jsObject](cc::Node * /*emitter*/) { + se::AutoHandleScope scope; se::ScriptEngine::getInstance()->callFunction(jsObject, "_onSiblingOrderChanged", 0, nullptr); }); } static void registerOnActiveNode(cc::Node *node, se::Object *jsObject) { - cc::CallbackID skip; - node->on( - cc::EventTypesToJS::NODE_ACTIVE_NODE, - [jsObject](bool shouldActiveNow) { + node->on( + [jsObject](cc::Node * /*emitter*/, bool shouldActiveNow) { se::AutoHandleScope hs; se::Value arg0; nativevalue_to_se(shouldActiveNow, arg0); se::ScriptEngine::getInstance()->callFunction(jsObject, "_onActiveNode", 1, &arg0); - }, - skip); + }); } static void registerOnBatchCreated(cc::Node *node, se::Object *jsObject) { - cc::CallbackID skip; - node->on( - cc::EventTypesToJS::NODE_ON_BATCH_CREATED, - [jsObject](bool dontChildPrefab) { + node->on( + [jsObject](cc::Node * /*emitter*/, bool dontChildPrefab) { se::AutoHandleScope hs; se::Value arg0; nativevalue_to_se(dontChildPrefab, arg0); se::ScriptEngine::getInstance()->callFunction(jsObject, "_onBatchCreated", 1, &arg0); - }, - skip); + }); } static void registerLocalPositionRotationScaleUpdated(cc::Node *node, se::Object *jsObject) { - node->on(cc::EventTypesToJS::NODE_LOCAL_POSITION_UPDATED, [jsObject](float x, float y, float z) { - se::AutoHandleScope hs; - ccstd::array args; - nativevalue_to_se(x, args[0]); - nativevalue_to_se(y, args[1]); - nativevalue_to_se(z, args[2]); - se::ScriptEngine::getInstance()->callFunction(jsObject, "_onLocalPositionUpdated", static_cast(args.size()), args.data()); - }); + node->on( + [jsObject](cc::Node * /*emitter*/, float x, float y, float z) { + se::AutoHandleScope hs; + ccstd::array args; + nativevalue_to_se(x, args[0]); + nativevalue_to_se(y, args[1]); + nativevalue_to_se(z, args[2]); + se::ScriptEngine::getInstance()->callFunction(jsObject, "_onLocalPositionUpdated", static_cast(args.size()), args.data()); + }); - node->on(cc::EventTypesToJS::NODE_LOCAL_ROTATION_UPDATED, [jsObject](float x, float y, float z, float w) { + node->on([jsObject](cc::Node * /*emiiter*/, float x, float y, float z, float w) { se::AutoHandleScope hs; ccstd::array args; nativevalue_to_se(x, args[0]); @@ -239,7 +226,7 @@ static void registerLocalPositionRotationScaleUpdated(cc::Node *node, se::Object se::ScriptEngine::getInstance()->callFunction(jsObject, "_onLocalRotationUpdated", static_cast(args.size()), args.data()); }); - node->on(cc::EventTypesToJS::NODE_LOCAL_SCALE_UPDATED, [jsObject](float x, float y, float z) { + node->on([jsObject](cc::Node * /*emitter*/, float x, float y, float z) { se::AutoHandleScope hs; ccstd::array args; nativevalue_to_se(x, args[0]); @@ -248,24 +235,25 @@ static void registerLocalPositionRotationScaleUpdated(cc::Node *node, se::Object se::ScriptEngine::getInstance()->callFunction(jsObject, "_onLocalScaleUpdated", static_cast(args.size()), args.data()); }); - node->on(cc::EventTypesToJS::NODE_LOCAL_POSITION_ROTATION_SCALE_UPDATED, [jsObject](float px, float py, float pz, float rx, float ry, float rz, float rw, float sx, float sy, float sz) { - se::AutoHandleScope hs; - ccstd::array args; - nativevalue_to_se(px, args[0]); - nativevalue_to_se(py, args[1]); - nativevalue_to_se(pz, args[2]); + node->on( + [jsObject](cc::Node * /*emitter*/, float px, float py, float pz, float rx, float ry, float rz, float rw, float sx, float sy, float sz) { + se::AutoHandleScope hs; + ccstd::array args; + nativevalue_to_se(px, args[0]); + nativevalue_to_se(py, args[1]); + nativevalue_to_se(pz, args[2]); - nativevalue_to_se(rx, args[3]); - nativevalue_to_se(ry, args[4]); - nativevalue_to_se(rz, args[5]); - nativevalue_to_se(rw, args[6]); + nativevalue_to_se(rx, args[3]); + nativevalue_to_se(ry, args[4]); + nativevalue_to_se(rz, args[5]); + nativevalue_to_se(rw, args[6]); - nativevalue_to_se(sx, args[7]); - nativevalue_to_se(sy, args[8]); - nativevalue_to_se(sz, args[9]); + nativevalue_to_se(sx, args[7]); + nativevalue_to_se(sy, args[8]); + nativevalue_to_se(sz, args[9]); - se::ScriptEngine::getInstance()->callFunction(jsObject, "_onLocalPositionRotationScaleUpdated", static_cast(args.size()), args.data()); - }); + se::ScriptEngine::getInstance()->callFunction(jsObject, "_onLocalPositionRotationScaleUpdated", static_cast(args.size()), args.data()); + }); } static bool js_scene_Node_registerListeners(se::State &s) // NOLINT(readability-identifier-naming) @@ -274,28 +262,26 @@ static bool js_scene_Node_registerListeners(se::State &s) // NOLINT(readability- SE_PRECONDITION2(cobj, false, "Invalid Native Object"); auto *jsObject = s.thisObject(); - + se::Value jsThisVal(jsObject); #define NODE_DISPATCH_EVENT_TO_JS(eventType, jsFuncName) \ - cobj->on( \ - eventType, [jsObject]() { \ - se::AutoHandleScope hs; \ - se::ScriptEngine::getInstance()->callFunction(jsObject, #jsFuncName, 0, nullptr); \ + cobj->on( \ + [jsThisVal](cc::Node * /*emitter*/) { \ + se::AutoHandleScope scope; \ + se::ScriptEngine::getInstance()->callFunction(jsThisVal.toObject(), #jsFuncName, 0, nullptr); \ }); registerOnActiveNode(cobj, jsObject); registerOnBatchCreated(cobj, jsObject); - NODE_DISPATCH_EVENT_TO_JS(cc::EventTypesToJS::NODE_REATTACH, _onReAttach); - NODE_DISPATCH_EVENT_TO_JS(cc::EventTypesToJS::NODE_REMOVE_PERSIST_ROOT_NODE, _onRemovePersistRootNode); - NODE_DISPATCH_EVENT_TO_JS(cc::EventTypesToJS::NODE_DESTROY_COMPONENTS, _onDestroyComponents); - // NODE_DISPATCH_EVENT_TO_JS(cc::NodeEventType::SIBLING_ORDER_CHANGED, _onSiblingOrderChanged); + NODE_DISPATCH_EVENT_TO_JS(cc::Node::Reattach, _onReAttach); + NODE_DISPATCH_EVENT_TO_JS(cc::Node::RemovePersistRootNode, _onRemovePersistRootNode); + NODE_DISPATCH_EVENT_TO_JS(cc::Node::DestroyComponents, _onDestroyComponents); - cobj->on( - cc::NodeEventType::NODE_DESTROYED, - [](cc::Node *node) { - se::AutoHandleScope hs; + cobj->on( + [](cc::Node *emitter) { + se::AutoHandleScope scope; se::Value nodeVal; - nativevalue_to_se(node, nodeVal); + nativevalue_to_se(emitter, nodeVal); se::ScriptEngine::getInstance()->callFunction(nodeVal.toObject(), "_onNodeDestroyed", 1, &nodeVal); }); @@ -306,19 +292,21 @@ static bool js_scene_Node_registerListeners(se::State &s) // NOLINT(readability- se::ScriptEngine::getInstance()->callFunction(jsObject, "_onSiblingIndexChanged", 1, &arg0); }; - cobj->on(cc::EventTypesToJS::NODE_SCENE_UPDATED, [jsObject](cc::Scene *scene) { - se::AutoHandleScope hs; - se::Value arg0; - nativevalue_to_se(scene, arg0); - se::ScriptEngine::getInstance()->callFunction(jsObject, "_onSceneUpdated", 1, &arg0); - }); + cobj->on( + [jsObject](cc::Node * /*emitter*/, cc::Scene *scene) { + se::AutoHandleScope hs; + se::Value arg0; + nativevalue_to_se(scene, arg0); + se::ScriptEngine::getInstance()->callFunction(jsObject, "_onSceneUpdated", 1, &arg0); + }); - cobj->on(cc::EventTypesToJS::NODE_EDITOR_ATTACHED, [jsObject](bool attached) { - se::AutoHandleScope hs; - se::Value arg0; - nativevalue_to_se(attached, arg0); - se::ScriptEngine::getInstance()->callFunction(jsObject, "_onEditorAttached", 1, &arg0); - }); + cobj->on( + [jsObject](cc::Node * /*emitter*/, bool attached) { + se::AutoHandleScope hs; + se::Value arg0; + nativevalue_to_se(attached, arg0); + se::ScriptEngine::getInstance()->callFunction(jsObject, "_onEditorAttached", 1, &arg0); + }); registerLocalPositionRotationScaleUpdated(cobj, jsObject); @@ -697,29 +685,30 @@ static bool js_Model_registerListeners(se::State &s) // NOLINT(readability-ident auto *thiz = s.thisObject(); #define MODEL_DISPATCH_EVENT_TO_JS(eventType, jsFuncName) \ - cobj->getEventProcessor().on(eventType, [=](uint32_t stamp) { \ + cobj->on([=](cc::scene::Model * /*emitter*/, uint32_t stamp) { \ cobj->setCalledFromJS(true); \ se::AutoHandleScope hs; \ se::Value stampVal{stamp}; \ se::ScriptEngine::getInstance()->callFunction(thiz, #jsFuncName, 1, &stampVal); \ }) - MODEL_DISPATCH_EVENT_TO_JS(cc::EventTypesToJS::MODEL_UPDATE_TRANSFORM, updateTransform); - MODEL_DISPATCH_EVENT_TO_JS(cc::EventTypesToJS::MODEL_UPDATE_UBO, updateUBOs); + MODEL_DISPATCH_EVENT_TO_JS(cc::scene::Model::UpdateTransform, updateTransform); + MODEL_DISPATCH_EVENT_TO_JS(cc::scene::Model::UpdateUBO, updateUBOs); #undef MODEL_DISPATCH_EVENT_TO_JS - cobj->getEventProcessor().on(cc::EventTypesToJS::MODEL_UPDATE_LOCAL_DESCRIPTORS, [=](index_t subModelIndex, cc::gfx::DescriptorSet *descriptorSet) { - cobj->setCalledFromJS(true); - se::AutoHandleScope hs; + cobj->on( + [=](cc::scene::Model * /*emitter*/, index_t subModelIndex, cc::gfx::DescriptorSet *descriptorSet) { + cobj->setCalledFromJS(true); + se::AutoHandleScope hs; - ccstd::array args; - nativevalue_to_se(subModelIndex, args[0]); - nativevalue_to_se(descriptorSet, args[1]); - se::ScriptEngine::getInstance()->callFunction(thiz, "_updateLocalDescriptors", static_cast(args.size()), args.data()); - }); + ccstd::array args; + nativevalue_to_se(subModelIndex, args[0]); + nativevalue_to_se(descriptorSet, args[1]); + se::ScriptEngine::getInstance()->callFunction(thiz, "_updateLocalDescriptors", static_cast(args.size()), args.data()); + }); - cobj->getEventProcessor().on(cc::EventTypesToJS::MODEL_UPDATE_LOCAL_SH_DESCRIPTORS, [=](index_t subModelIndex, cc::gfx::DescriptorSet *descriptorSet) { + cobj->on([=](cc::scene::Model * /*emitter*/,index_t subModelIndex, cc::gfx::DescriptorSet *descriptorSet) { cobj->setCalledFromJS(true); se::AutoHandleScope hs; @@ -729,7 +718,7 @@ static bool js_Model_registerListeners(se::State &s) // NOLINT(readability-ident se::ScriptEngine::getInstance()->callFunction(thiz, "_updateLocalSHDescriptors", static_cast(args.size()), args.data()); }); - cobj->getEventProcessor().on(cc::EventTypesToJS::MODEL_UPDATE_WORLD_BOUND_DESCRIPTORS, [=](index_t subModelIndex, cc::gfx::DescriptorSet *descriptorSet) { + cobj->on([=](cc::scene::Model * /*emitter*/,index_t subModelIndex, cc::gfx::DescriptorSet *descriptorSet) { cobj->setCalledFromJS(true); se::AutoHandleScope hs; @@ -739,7 +728,7 @@ static bool js_Model_registerListeners(se::State &s) // NOLINT(readability-ident se::ScriptEngine::getInstance()->callFunction(thiz, "_updateWorldBoundDescriptors", static_cast(args.size()), args.data()); }); - cobj->getEventProcessor().on(cc::EventTypesToJS::MODEL_UPDATE_INSTANCED_ATTRIBUTES, [=](const ccstd::vector &attributes, cc::scene::SubModel *subModel) { + cobj->on([=](cc::scene::Model * /*emitter*/,const ccstd::vector &attributes, cc::scene::SubModel *subModel) { cobj->setCalledFromJS(true); se::AutoHandleScope hs; @@ -749,19 +738,20 @@ static bool js_Model_registerListeners(se::State &s) // NOLINT(readability-ident se::ScriptEngine::getInstance()->callFunction(thiz, "_updateInstancedAttributes", static_cast(args.size()), args.data()); }); - cobj->getEventProcessor().on(cc::EventTypesToJS::MODEL_GET_MACRO_PATCHES, [=](index_t subModelIndex, ccstd::vector *pPatches) { - cobj->setCalledFromJS(true); - se::AutoHandleScope hs; + cobj->on( + [=](cc::scene::Model * /*emitter*/, index_t subModelIndex, ccstd::vector *pPatches) { + cobj->setCalledFromJS(true); + se::AutoHandleScope hs; - se::Value rval; - ccstd::array args; - nativevalue_to_se(subModelIndex, args[0]); - bool ok = se::ScriptEngine::getInstance()->callFunction(thiz, "getMacroPatches", static_cast(args.size()), args.data(), &rval); + se::Value rval; + ccstd::array args; + nativevalue_to_se(subModelIndex, args[0]); + bool ok = se::ScriptEngine::getInstance()->callFunction(thiz, "getMacroPatches", static_cast(args.size()), args.data(), &rval); - if (ok) { - sevalue_to_native(rval, pPatches); - } - }); + if (ok) { + sevalue_to_native(rval, pPatches); + } + }); return true; } diff --git a/native/cocos/cocos.h b/native/cocos/cocos.h index ec3edc74cc1..b194c207016 100644 --- a/native/cocos/cocos.h +++ b/native/cocos/cocos.h @@ -29,9 +29,9 @@ #include "application/ApplicationManager.h" #include "application/BaseGame.h" -#include "bindings/event/CustomEventTypes.h" #include "bindings/event/EventDispatcher.h" #include "bindings/jswrapper/SeApi.h" #include "bindings/manual/jsb_classtype.h" #include "bindings/manual/jsb_global.h" -#include "bindings/manual/jsb_module_register.h" \ No newline at end of file +#include "bindings/manual/jsb_module_register.h" +#include "core/event/Event.h" \ No newline at end of file diff --git a/native/cocos/core/Root.cpp b/native/cocos/core/Root.cpp index 7d2b1eacd8b..8a29945e177 100644 --- a/native/cocos/core/Root.cpp +++ b/native/cocos/core/Root.cpp @@ -26,10 +26,7 @@ #include "core/Root.h" #include "2d/renderer/Batcher2d.h" #include "application/ApplicationManager.h" -#include "bindings/event/CustomEventTypes.h" #include "bindings/event/EventDispatcher.h" -#include "core/event/CallbacksInvoker.h" -#include "core/event/EventTypesToJS.h" #include "platform/interfaces/modules/IScreen.h" #include "platform/interfaces/modules/ISystemWindow.h" #include "platform/interfaces/modules/ISystemWindowManager.h" @@ -47,6 +44,7 @@ #include "scene/Camera.h" #include "scene/DirectionalLight.h" #include "scene/SpotLight.h" +#include "engine/EngineEvents.h" namespace cc { @@ -61,7 +59,6 @@ Root *Root::getInstance() { Root::Root(gfx::Device *device) : _device(device) { instance = this; - _eventProcessor = new CallbacksInvoker(); // TODO(minggo): // this._dataPoolMgr = legacyCC.internal.DataPoolManager && new legacyCC.internal.DataPoolManager(device) as DataPoolManager; @@ -71,7 +68,6 @@ Root::Root(gfx::Device *device) Root::~Root() { destroy(); - CC_SAFE_DELETE(_eventProcessor); instance = nullptr; } @@ -402,8 +398,7 @@ void Root::frameMoveProcess(bool isNeedUpdateScene, int32_t totalFrames, const c void Root::frameMoveEnd() { if (_pipelineRuntime != nullptr && !_cameraList.empty()) { - _eventProcessor->emit(EventTypesToJS::DIRECTOR_BEFORE_COMMIT, this); - + emit(); std::stable_sort(_cameraList.begin(), _cameraList.end(), [](const auto *a, const auto *b) { return a->getPriority() < b->getPriority(); }); @@ -416,7 +411,7 @@ void Root::frameMoveEnd() { } } #endif - _eventProcessor->emit(EventTypesToJS::DIRECTOR_BEFORE_RENDER, this); + emit(); _pipelineRuntime->render(_cameraList); #endif _device->present(); @@ -624,22 +619,22 @@ void Root::doXRFrameMove(int32_t totalFrames) { } void Root::addWindowEventListener() { - _windowDestroyEventId = EventDispatcher::addCustomEventListener(EVENT_DESTROY_WINDOW, [this](const CustomEvent &e) -> void { + _windowDestroyListener.bind([this](uint32_t windowId) -> void { for (const auto &window : _renderWindows) { - window->onNativeWindowDestroy(static_cast(e.args[0].intVal)); + window->onNativeWindowDestroy(windowId); } }); - _windowResumeEventId = EventDispatcher::addCustomEventListener(EVENT_RECREATE_WINDOW, [this](const CustomEvent &e) -> void { + _windowRecreatedListener.bind([this](uint32_t windowId) -> void { for (const auto &window : _renderWindows) { - window->onNativeWindowResume(static_cast(e.args[0].intVal)); + window->onNativeWindowResume(windowId); } }); } -void Root::removeWindowEventListener() const { - EventDispatcher::removeCustomEventListener(EVENT_DESTROY_WINDOW, _windowDestroyEventId); - EventDispatcher::removeCustomEventListener(EVENT_RECREATE_WINDOW, _windowResumeEventId); +void Root::removeWindowEventListener() { + _windowDestroyListener.reset(); + _windowRecreatedListener.reset(); } } // namespace cc diff --git a/native/cocos/core/Root.h b/native/cocos/core/Root.h index c5666e0348d..9d47693ce7d 100644 --- a/native/cocos/core/Root.h +++ b/native/cocos/core/Root.h @@ -26,6 +26,8 @@ #include //#include "3d/skeletal-animation/DataPoolManager.h" +#include "bindings/event/EventDispatcher.h" +#include "core/event/Event.h" #include "core/memop/Pool.h" #include "renderer/pipeline/RenderPipeline.h" #include "scene/DrawBatch2D.h" @@ -49,7 +51,6 @@ namespace render { class PipelineRuntime; class Pipeline; } // namespace render -class CallbacksInvoker; class Batcher2d; struct CC_DLL DebugViewConfig { @@ -63,11 +64,16 @@ struct CC_DLL DebugViewConfig { struct ISystemWindowInfo; class ISystemWindow; -class Root final { +class Root final : public event::EventTarget { + IMPL_EVENT_TARGET(Root) + DECLARE_TARGET_EVENT_BEGIN(Root) + TARGET_EVENT_ARG0(BeforeCommit) + TARGET_EVENT_ARG0(BeforeRender) + DECLARE_TARGET_EVENT_END() public: - static Root *getInstance(); //cjh todo: put Root Managerment to Director class. + static Root *getInstance(); // cjh todo: put Root Managerment to Director class. explicit Root(gfx::Device *device); - ~Root(); + ~Root() override; // @minggo IRootInfo seems is not use, and how to return Promise? void initialize(gfx::Swapchain *swapchain); @@ -156,7 +162,7 @@ class Root final { #ifndef SWIGCOCOS template ::value>> T *createModel() { - //cjh TODO: need use model pool? + // cjh TODO: need use model pool? T *model = ccnew T(); model->initialize(); return model; @@ -168,7 +174,7 @@ class Root final { #ifndef SWIGCOCOS template ::value>> T *createLight() { - //TODO(xwx): need use model pool? + // TODO(xwx): need use model pool? T *light = ccnew T(); light->initialize(); return light; @@ -287,8 +293,6 @@ class Root final { inline bool isUsingDeferredPipeline() const { return _useDeferredPipeline; } - inline CallbacksInvoker *getEventProcessor() const { return _eventProcessor; } - scene::RenderWindow *createRenderWindowFromSystemWindow(uint32_t windowId); scene::RenderWindow *createRenderWindowFromSystemWindow(cc::ISystemWindow *window); @@ -302,7 +306,7 @@ class Root final { void frameMoveEnd(); void doXRFrameMove(int32_t totalFrames); void addWindowEventListener(); - void removeWindowEventListener() const; + void removeWindowEventListener(); gfx::Device *_device{nullptr}; gfx::Swapchain *_swapchain{nullptr}; @@ -324,15 +328,13 @@ class Root final { uint32_t _fixedFPS{0}; bool _useDeferredPipeline{false}; bool _usesCustomPipeline{true}; - CallbacksInvoker *_eventProcessor{nullptr}; IXRInterface *_xr{nullptr}; - uint32_t _windowDestroyEventId{0}; - uint32_t _windowResumeEventId{0}; + events::WindowDestroy::Listener _windowDestroyListener; + events::WindowRecreated::Listener _windowRecreatedListener; // Cache ccstd::vector to avoid allocate every frame in frameMove ccstd::vector _cameraList; ccstd::vector _swapchains; // }; - } // namespace cc diff --git a/native/cocos/core/assets/Asset.h b/native/cocos/core/assets/Asset.h index 9aa9116f85d..26c972ffaa5 100644 --- a/native/cocos/core/assets/Asset.h +++ b/native/cocos/core/assets/Asset.h @@ -32,13 +32,13 @@ #include "base/Macros.h" #include "core/Types.h" #include "core/data/Object.h" -#include "core/event/CallbacksInvoker.h" +#include "core/event/EventTarget.h" namespace cc { class Node; -class Asset : public CCObject, public EventTarget { +class Asset : public CCObject, public event::EventTarget { public: using Super = CCObject; diff --git a/native/cocos/core/assets/EffectAsset.cpp b/native/cocos/core/assets/EffectAsset.cpp index 8188882aa72..8da8fccf527 100644 --- a/native/cocos/core/assets/EffectAsset.cpp +++ b/native/cocos/core/assets/EffectAsset.cpp @@ -171,8 +171,10 @@ void EffectAsset::onLoaded() { if (CC_CURRENT_ENGINE()->isInited()) { precompile(); } else { - CC_CURRENT_ENGINE()->on(BaseEngine::ON_START, [this]() { - this->precompile(); + _engineEventId = CC_CURRENT_ENGINE()->on([this](BaseEngine * /*emitter*/, BaseEngine::EngineStatus status) { + if (status == BaseEngine::EngineStatus::ON_START) { + this->precompile(); + } }); } #endif @@ -180,6 +182,9 @@ void EffectAsset::onLoaded() { bool EffectAsset::destroy() { EffectAsset::remove(this); + if (CC_CURRENT_ENGINE()->isInited()) { + CC_CURRENT_ENGINE()->off(_engineEventId); + } return Super::destroy(); } @@ -189,7 +194,7 @@ void EffectAsset::initDefault(const ccstd::optional &uuid) { _name = "builtin-unlit"; _shaders = effect->_shaders; _combinations = effect->_combinations; - _techniques = effect->_techniques; //NOTE: it will copy effect->_techniques to _techniques and _techniques will kept by SE_HOLD_RETURN_VALUE + _techniques = effect->_techniques; // NOTE: it will copy effect->_techniques to _techniques and _techniques will kept by SE_HOLD_RETURN_VALUE } bool EffectAsset::validate() const { @@ -251,7 +256,7 @@ const defines = [ // ... all the combinations (2x4x3 in this case) ]; */ -ccstd::vector EffectAsset::doCombine(const ccstd::vector &cur, const IPreCompileInfo &info, IPreCompileInfo::iterator iter) { //NOLINT(misc-no-recursion) +ccstd::vector EffectAsset::doCombine(const ccstd::vector &cur, const IPreCompileInfo &info, IPreCompileInfo::iterator iter) { // NOLINT(misc-no-recursion) if (iter == info.end()) { return cur; } diff --git a/native/cocos/core/assets/EffectAsset.h b/native/cocos/core/assets/EffectAsset.h index 4ed13f2ed4d..7ca4166eb12 100644 --- a/native/cocos/core/assets/EffectAsset.h +++ b/native/cocos/core/assets/EffectAsset.h @@ -33,10 +33,12 @@ #include "base/Value.h" #include "core/Types.h" #include "core/assets/Asset.h" +#include "engine/BaseEngine.h" #include "renderer/core/PassUtils.h" #include "renderer/gfx-base/GFXDef.h" #include "renderer/pipeline/Define.h" + namespace cc { using IPropertyHandleInfo = std::tuple; @@ -348,7 +350,7 @@ using PassOverrides = IPassStates; using PassPropertyInfoMap = ccstd::unordered_map; -struct IPassInfoFull final { //cjh } : public IPassInfo { +struct IPassInfoFull final { // cjh } : public IPassInfo { // IPassStates ccstd::optional priority; ccstd::optional primitive; @@ -465,7 +467,7 @@ struct IAttributeInfo { struct IDefineInfo { ccstd::string name; ccstd::string type; - ccstd::optional> range; //cjh number is float? ?: number[]; + ccstd::optional> range; // cjh number is float? ?: number[]; ccstd::optional> options; ccstd::optional defaultVal; }; @@ -582,6 +584,8 @@ class EffectAsset final : public Asset { bool validate() const override; protected: + BaseEngine::EngineStatusChange::EventID _engineEventId; + static ccstd::vector doCombine(const ccstd::vector &cur, const IPreCompileInfo &info, IPreCompileInfo::iterator iter); static ccstd::vector generateRecords(const ccstd::string &key, const IPreCompileInfoValueType &value); static ccstd::vector insertInfoValue(const ccstd::vector &records, @@ -617,7 +621,7 @@ class EffectAsset final : public Asset { ccstd::vector _combinations; // protected: - static RegisteredEffectAssetMap effects; //cjh TODO: how to clear when game exits. + static RegisteredEffectAssetMap effects; // cjh TODO: how to clear when game exits. static bool layoutValid; CC_DISALLOW_COPY_MOVE_ASSIGN(EffectAsset); diff --git a/native/cocos/core/assets/Material.cpp b/native/cocos/core/assets/Material.cpp index cf468e57abc..fccdf0bc5e4 100644 --- a/native/cocos/core/assets/Material.cpp +++ b/native/cocos/core/assets/Material.cpp @@ -29,7 +29,6 @@ #include "core/Root.h" #include "core/assets/EffectAsset.h" #include "core/builtin/BuiltinResMgr.h" -#include "core/event/EventTypesToJS.h" #include "core/platform/Debug.h" #include "math/Color.h" #include "renderer/pipeline/helper/Utils.h" @@ -94,7 +93,7 @@ void Material::doDestroy() { } } passes.clear(); - emit(EventTypesToJS::MATERIAL_PASSES_UPDATED); + emit(); } void Material::recompileShaders(const MacroRecord & /*overrides*/, index_t /*passIdx*/) { @@ -304,7 +303,7 @@ void Material::update(bool keepProps /* = true*/) { } } - emit(EventTypesToJS::MATERIAL_PASSES_UPDATED); + emit(); } _hash = Material::getHashForMaterial(this); } diff --git a/native/cocos/core/assets/Material.h b/native/cocos/core/assets/Material.h index 47e49763b67..f18ee8e6758 100644 --- a/native/cocos/core/assets/Material.h +++ b/native/cocos/core/assets/Material.h @@ -31,6 +31,7 @@ #include "base/std/optional.h" #include "base/std/variant.h" #include "core/assets/EffectAsset.h" +#include "core/event/Event.h" namespace cc { @@ -87,6 +88,10 @@ struct IMaterialInfo { }; class Material : public Asset { + IMPL_EVENT_TARGET(Material) + DECLARE_TARGET_EVENT_BEGIN(Material) + TARGET_EVENT_ARG0(PassesUpdated) + DECLARE_TARGET_EVENT_END() public: using Super = Asset; /** diff --git a/native/cocos/core/assets/SceneAsset.cpp b/native/cocos/core/assets/SceneAsset.cpp index 2ac304816e6..fc1e32b673f 100644 --- a/native/cocos/core/assets/SceneAsset.cpp +++ b/native/cocos/core/assets/SceneAsset.cpp @@ -25,6 +25,7 @@ #include "core/assets/SceneAsset.h" #include "core/scene-graph/Scene.h" +#include "base/memory/Memory.h" namespace cc { diff --git a/native/cocos/core/assets/SimpleTexture.cpp b/native/cocos/core/assets/SimpleTexture.cpp index 630b2228a1d..3e53cb76cc9 100644 --- a/native/cocos/core/assets/SimpleTexture.cpp +++ b/native/cocos/core/assets/SimpleTexture.cpp @@ -25,7 +25,6 @@ #include "core/assets/SimpleTexture.h" #include "core/assets/ImageAsset.h" -#include "core/event/EventTypesToJS.h" #include "core/platform/Debug.h" #include "core/platform/Macro.h" #include "renderer/gfx-base/GFXDevice.h" @@ -98,7 +97,7 @@ void SimpleTexture::assignImage(ImageAsset *image, uint32_t level, uint32_t arra uploadData(data, level, arrayIndex); checkTextureLoaded(); - emit(EventTypesToJS::SIMPLE_TEXTURE_AFTER_ASSIGN_IMAGE, image); + emit(image); } void SimpleTexture::checkTextureLoaded() { @@ -223,7 +222,7 @@ void SimpleTexture::setMipRangeInternal(uint32_t baseLevel, uint32_t maxLevel) { } void SimpleTexture::notifyTextureUpdated() { - emit(EventTypesToJS::SIMPLE_TEXTURE_GFX_TEXTURE_UPDATED, _gfxTexture.get()); + emit(_gfxTexture.get()); } } // namespace cc diff --git a/native/cocos/core/assets/SimpleTexture.h b/native/cocos/core/assets/SimpleTexture.h index f15867d4409..f65de67793c 100644 --- a/native/cocos/core/assets/SimpleTexture.h +++ b/native/cocos/core/assets/SimpleTexture.h @@ -40,6 +40,11 @@ class ImageAsset; * 简单贴图允许指定不同的 Mipmap 层级。 */ class SimpleTexture : public TextureBase { + IMPL_EVENT_TARGET(SimpleTexture) + DECLARE_TARGET_EVENT_BEGIN(SimpleTexture) + TARGET_EVENT_ARG1(TextureUpdated, cc::gfx::Texture *) + TARGET_EVENT_ARG1(AfterAssignImage, cc::ImageAsset *) + DECLARE_TARGET_EVENT_END() public: ~SimpleTexture() override; diff --git a/native/cocos/core/assets/TextureBase.cpp b/native/cocos/core/assets/TextureBase.cpp index 4cbbc9ccdaf..cbfc0ddf49e 100644 --- a/native/cocos/core/assets/TextureBase.cpp +++ b/native/cocos/core/assets/TextureBase.cpp @@ -26,7 +26,6 @@ #include "core/assets/TextureBase.h" #include "base/StringUtil.h" #include "cocos/core/platform/Debug.h" -#include "core/event/EventTypesToJS.h" #include "core/utils/IDGenerator.h" #include "renderer/gfx-base/GFXDevice.h" @@ -185,7 +184,8 @@ bool TextureBase::isCompressed() const { } void TextureBase::notifySamplerUpdated() { - emit(EventTypesToJS::TEXTURE_BASE_GFX_SAMPLER_UPDATED, _gfxSampler); + // emit(EventTypesToJS::TEXTURE_BASE_GFX_SAMPLER_UPDATED, _gfxSampler); + emit(_gfxSampler); } } // namespace cc diff --git a/native/cocos/core/assets/TextureBase.h b/native/cocos/core/assets/TextureBase.h index f908a5038be..ba214ea28c5 100644 --- a/native/cocos/core/assets/TextureBase.h +++ b/native/cocos/core/assets/TextureBase.h @@ -45,6 +45,10 @@ class Texture; * @zh 贴图资源基类。它定义了所有贴图共用的概念。 */ class TextureBase : public Asset { + IMPL_EVENT_TARGET(TextureBase) + DECLARE_TARGET_EVENT_BEGIN(TextureBase) + TARGET_EVENT_ARG1(SamplerUpdated, cc::gfx::Sampler *) + DECLARE_TARGET_EVENT_END() public: using Super = Asset; diff --git a/native/cocos/core/event/CallbacksInvoker.cpp b/native/cocos/core/event/CallbacksInvoker.cpp deleted file mode 100644 index 6e7af4a9daa..00000000000 --- a/native/cocos/core/event/CallbacksInvoker.cpp +++ /dev/null @@ -1,265 +0,0 @@ -/**************************************************************************** - Copyright (c) 2021 Xiamen Yaji Software Co., Ltd. - - http://www.cocos.com - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated engine source code (the "Software"), a limited, - worldwide, royalty-free, non-assignable, revocable and non-exclusive license - to use Cocos Creator solely to develop games on your target platforms. You shall - not use Cocos Creator software for developing other software or tools that's - used for developing games. You are not granted to publish, distribute, - sublicense, and/or sell copies of Cocos Creator. - - The software or tools in this License Agreement are licensed, not sold. - Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. - ****************************************************************************/ -#include "core/event/CallbacksInvoker.h" -#include "base/Log.h" - -namespace cc { - -uint32_t CallbacksInvoker::cbIDCounter{0}; - -void CallbackList::removeByCallbackID(const CallbackID &cbID) { - for (int32_t i = 0; i < _callbackInfos.size(); ++i) { - const auto &info = _callbackInfos[i]; - if (info->_id == cbID) { - utils::array::fastRemoveAt(_callbackInfos, i); - --i; - } - } -} - -void CallbackList::removeByTarget(void *target) { - for (int32_t i = 0; i < _callbackInfos.size(); ++i) { - auto &info = _callbackInfos[i]; - if (info->_target == target) { - utils::array::fastRemoveAt(_callbackInfos, i); - --i; - } - } -} - -void CallbackList::cancel(index_t index) { - std::shared_ptr *info = nullptr; - if (index >= 0 && index < _callbackInfos.size()) { - info = &_callbackInfos[index]; - } - - if (info) { - if (_isInvoking) { - _callbackInfos[index] = nullptr; - } else { - utils::array::fastRemoveAt(_callbackInfos, index); - } - } - _containCanceled = true; -} - -void CallbackList::cancelAll() { - for (auto &callbackInfo : _callbackInfos) { - callbackInfo = nullptr; - } - _containCanceled = true; -} - -void CallbackList::purgeCanceled() { - for (index_t i = static_cast(_callbackInfos.size()) - 1; i >= 0; --i) { - const auto &info = _callbackInfos[i]; - if (!info) { - utils::array::fastRemoveAt(_callbackInfos, i); - } - } - _containCanceled = false; -} - -void CallbackList::clear() { - cancelAll(); - _callbackInfos.clear(); - _isInvoking = false; - _containCanceled = false; -} - -bool CallbacksInvoker::hasEventListener(const KeyType &key) const { - auto iter = _callbackTable.find(key); - if (iter == _callbackTable.end()) { - return false; - } - - const auto &list = iter->second; - // check any valid callback - const auto &infos = list._callbackInfos; - // Make sure no cancelled callbacks - if (list._isInvoking) { - for (const auto &info : infos) { // NOLINT(readability-use-anyofallof) - if (info != nullptr) { - return true; - } - } - return false; - } - - return !infos.empty(); -} - -bool CallbacksInvoker::hasEventListener(const KeyType &key, const CallbackID &cbID) const { - auto iter = _callbackTable.find(key); - if (iter == _callbackTable.end()) { - return false; - } - - const auto &list = iter->second; - // check any valid callback - const auto &infos = list._callbackInfos; - - for (const auto &info : infos) { // NOLINT(readability-use-anyofallof) - if (info != nullptr && info->check() && info->_id == cbID) { - return true; - } - } - - return false; -} - -bool CallbacksInvoker::hasEventListener(const KeyType &key, void *target) { - auto iter = _callbackTable.find(key); - if (iter == _callbackTable.end()) { - return false; - } - - const auto &list = iter->second; - // check any valid callback - const auto &infos = list._callbackInfos; - - for (const auto &info : infos) { // NOLINT(readability-use-anyofallof) - if (info != nullptr && info->check() && info->_target == target) { - return true; - } - } - - return false; -} - -bool CallbacksInvoker::hasEventListener(const KeyType &key, void *target, const CallbackID &cbID) const { - auto iter = _callbackTable.find(key); - if (iter == _callbackTable.end()) { - return false; - } - - const auto &list = iter->second; - // check any valid callback - const auto &infos = list._callbackInfos; - - for (const auto &info : infos) { // NOLINT(readability-use-anyofallof) - if (info != nullptr && info->check() && info->_target == target && info->_id == cbID) { - return true; - } - } - - return false; -} - -void CallbacksInvoker::offAll(const KeyType &key) { - auto iter = _callbackTable.find(key); - if (iter != _callbackTable.end()) { - auto &list = iter->second; - if (list._isInvoking) { - list.cancelAll(); - } else { - list.clear(); - _callbackTable.erase(iter); - } - } -} - -void CallbacksInvoker::offAll(void *target) { - for (auto &e : _callbackTable) { - auto &list = e.second; - const auto &infos = list._callbackInfos; - if (list._isInvoking) { - index_t i = 0; - for (const auto &info : infos) { - if (info != nullptr && info->_target == target) { - list.cancel(i); - } - ++i; - } - } else { - list.removeByTarget(target); - } - } -} - -void CallbacksInvoker::offAll() { - for (auto iter = _callbackTable.begin(); iter != _callbackTable.end();) { - auto &list = iter->second; - if (list._isInvoking) { - list.cancelAll(); - ++iter; - } else { - list.clear(); - iter = _callbackTable.erase(iter); - } - } -} - -void CallbacksInvoker::off(const KeyType &key, const CallbackID &cbID) { - auto iter = _callbackTable.find(key); - if (iter != _callbackTable.end()) { - auto &list = iter->second; - const auto &infos = list._callbackInfos; - index_t i = 0; - for (const auto &info : infos) { - if (info != nullptr && info->_id == cbID) { - list.cancel(i); - break; - } - ++i; - } - } -} - -void CallbacksInvoker::offAll(const KeyType &key, void *target) { - auto iter = _callbackTable.find(key); - if (iter != _callbackTable.end()) { - auto &list = iter->second; - const auto &infos = list._callbackInfos; - index_t i = 0; - if (list._isInvoking) { - for (const auto &info : infos) { - if (info != nullptr && info->_target == target) { - list.cancel(i); - } - ++i; - } - } else { - list.removeByTarget(target); - } - } -} - -void CallbacksInvoker::off(const CallbackID &cbID) { - for (auto &cbInfo : _callbackTable) { - auto &list = cbInfo.second; - const auto &infos = list._callbackInfos; - index_t i = 0; - for (const auto &info : infos) { - if (info != nullptr && info->_id == cbID) { - list.cancel(i); - break; - } - ++i; - } - } -} - -} // namespace cc diff --git a/native/cocos/core/event/CallbacksInvoker.h b/native/cocos/core/event/CallbacksInvoker.h deleted file mode 100644 index 19cbe18cf7f..00000000000 --- a/native/cocos/core/event/CallbacksInvoker.h +++ /dev/null @@ -1,476 +0,0 @@ -/**************************************************************************** - Copyright (c) 2021 Xiamen Yaji Software Co., Ltd. - - http://www.cocos.com - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated engine source code (the "Software"), a limited, - worldwide, royalty-free, non-assignable, revocable and non-exclusive license - to use Cocos Creator solely to develop games on your target platforms. You shall - not use Cocos Creator software for developing other software or tools that's - used for developing games. You are not granted to publish, distribute, - sublicense, and/or sell copies of Cocos Creator. - - The software or tools in this License Agreement are licensed, not sold. - Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. - ****************************************************************************/ -#pragma once - -#include -#include -#include -#include "base/std/container/string.h" -#include "base/std/container/unordered_map.h" - -#include "base/Log.h" -#include "base/Macros.h" -#include "base/Utils.h" -#include "core/data/Object.h" - -namespace cc { - -#define CC_CALLBACK_INVOKE_0(__selector__, __target__, ...) std::function(std::bind(&__selector__, __target__, ##__VA_ARGS__)), __target__ -#define CC_CALLBACK_INVOKE_1(__selector__, __target__, Arg0, ...) std::function(std::bind(&__selector__, __target__, std::placeholders::_1, ##__VA_ARGS__)), __target__ -#define CC_CALLBACK_INVOKE_2(__selector__, __target__, Arg0, Arg1, ...) std::function(std::bind(&__selector__, __target__, std::placeholders::_1, std::placeholders::_2, ##__VA_ARGS__)), __target__ -#define CC_CALLBACK_INVOKE_3(__selector__, __target__, Arg0, Arg1, Arg2, ...) std::function(std::bind(&__selector__, __target__, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, ##__VA_ARGS__)), __target__ - -struct CallbackID { - inline bool operator==(const CallbackID &rhs) const noexcept { return value == rhs.value; } - uint32_t value{0}; -}; - -struct CallbackInfoBase { - using FakeCallbackMemberFn = void (CCObject::*)(); - - CallbackInfoBase() = default; - virtual ~CallbackInfoBase() = default; - - virtual bool check() const = 0; - virtual void reset() = 0; - virtual FakeCallbackMemberFn getMemberFn() const = 0; - - void *_target{nullptr}; - CallbackID _id; - bool _once{false}; - bool _isCCObject{false}; -#if CC_DEBUG - ccstd::vector _argTypes; -#endif -}; - -template -struct CallbackInfo final : public CallbackInfoBase { - using CallbackFn = std::function; - using CallbackMemberFn = void (CCObject::*)(Args...); - - CallbackFn _callback{nullptr}; - CallbackMemberFn _memberFn{nullptr}; - - template - void set(CallbackFn &&callback, Target *target, bool once) { - _callback = std::forward(callback); - _target = target; - _once = once; - _isCCObject = std::is_base_of::value; -#if CC_DEBUG - _argTypes = {(typeid(Args).name())...}; -#endif - } - - template ::value>> - void set(CallbackMemberFn memberFn, Target *target, bool once) { - _memberFn = memberFn; - _target = target; - _once = once; - _isCCObject = true; -#if CC_DEBUG - _argTypes = {(typeid(Args).name())...}; -#endif - } - - void reset() override { - _callback = nullptr; - _memberFn = nullptr; - _target = nullptr; - _once = false; - _isCCObject = false; -#if CC_DEBUG - _argTypes.clear(); -#endif - } - - bool check() const override { - // Validation - if (_isCCObject) { - if (!isObjectValid(reinterpret_cast(_target), true)) { - return false; - } - } - return true; - } - - FakeCallbackMemberFn getMemberFn() const override { - return reinterpret_cast(_memberFn); - } -}; - -/** - * @zh 事件监听器列表的简单封装。 - * @en A simple list of event callbacks - */ -class CallbackList final { -public: - ccstd::vector> _callbackInfos; - bool _isInvoking{false}; - bool _containCanceled{false}; - - /** - * @zh 从列表中移除与指定目标相同回调函数的事件。 - * @en Remove the event listeners with the given callback from the list - * - * @param cbID - The callback id to be removed - */ - void removeByCallbackID(const CallbackID &cbID); - - /** - * @zh 从列表中移除与指定目标相同调用者的事件。 - * @en Remove the event listeners with the given target from the list - * @param target - */ - void removeByTarget(void *target); - - /** - * @zh 移除指定编号事件。 - * @en Remove the event listener at the given index - * @param index - */ - void cancel(index_t index); - - /** - * @zh 注销所有事件。 - * @en Cancel all event listeners - */ - void cancelAll(); - - /** - * @zh 立即删除所有取消的回调。(在移除过程中会更加紧凑的排列数组) - * @en Delete all canceled callbacks and compact array - */ - void purgeCanceled(); - - /** - * @zh 清除并重置所有数据。 - * @en Clear all data - */ - void clear(); -}; - -/** - * @zh CallbacksInvoker 用来根据事件名(Key)管理事件监听器列表并调用回调方法。 - * @en CallbacksInvoker is used to manager and invoke event listeners with different event keys, - * each key is mapped to a CallbackList. - */ -class CallbacksInvoker { -public: - using KeyType = uint32_t; - CallbacksInvoker() = default; - virtual ~CallbacksInvoker() = default; - /** - * @zh 向一个事件名注册一个新的事件监听器,包含回调函数和调用者 - * @en Register an event listener to a given event key with callback and target. - * - * @param key - Event type - * @param callback - Callback function when event triggered - * @param target - Callback callee - * @param once - Whether invoke the callback only once (and remove it) - */ - template - void on(const KeyType &key, void (Target::*memberFn)(Args...), Target *target, bool once = false); - - template - void on(const KeyType &key, std::function &&callback, Target *target, bool once = false); - - template - void on(const KeyType &key, std::function &&callback, bool once = false); - - template - std::enable_if_t::value, void> - on(const KeyType &key, LambdaType &&callback, Target *target, bool once = false); - - template - std::enable_if_t::value, void> - on(const KeyType &key, LambdaType &&callback, bool once = false); - - // - template - void on(const KeyType &key, std::function &&callback, Target *target, CallbackID &outCallbackID, bool once = false); - - template - void on(const KeyType &key, std::function &&callback, CallbackID &outCallbackID, bool once = false); - - template - std::enable_if_t::value, void> - on(const KeyType &key, LambdaType &&callback, Target *target, CallbackID &outCallbackID, bool once = false); - - template - std::enable_if_t::value, void> - on(const KeyType &key, LambdaType &&callback, CallbackID &outCallbackID, bool once = false); - - /** - * @zh 检查指定事件是否已注册回调。 - * @en Checks whether there is correspond event listener registered on the given event - * @param key - Event type - * @param cbID - Callback ID - */ - bool hasEventListener(const KeyType &key) const; - bool hasEventListener(const KeyType &key, const CallbackID &cbID) const; - bool hasEventListener(const KeyType &key, void *target); - bool hasEventListener(const KeyType &key, void *target, const CallbackID &cbID) const; - template - bool hasEventListener(const KeyType &key, void (Target::*memberFn)(Args...), Target *target) const; - /** - * @zh 移除在特定事件类型中注册的所有回调或在某个目标中注册的所有回调。 - * @en Removes all callbacks registered in a certain event type or all callbacks registered with a certain target - * @param key - The event type or target with which the listeners will be removed - */ - void offAll(const KeyType &key, void *target); - void offAll(const KeyType &key); - void offAll(void *target); - void offAll(); - - /** - * @zh 删除以指定事件,回调函数,目标注册的回调。 - * @en Remove event listeners registered with the given event key, callback and target - * @param key - Event type - * @param target callback Target - * @param cbID - The callback ID of the event listener, if absent all event listeners for the given type will be removed - */ - void off(const KeyType &key, const CallbackID &cbID); - void off(const CallbackID &cbID); - template - void off(const KeyType &key, void (Target::*memberFn)(Args...), Target *target); - - /** - * @zh 派发一个指定事件,并传递需要的参数 - * @en Trigger an event directly with the event name and necessary arguments. - * @param key - event type - * @param args - The arguments to be passed to the callback - */ - template - void emit(const KeyType &key, Args &&...args); - - template - struct FunctionTraits - : public FunctionTraits { - }; - - template - struct FunctionTraits { - using type = std::function; - }; - - template - struct FunctionTraits { - using type = std::function; - }; - - template - static typename FunctionTraits>::type toFunction(T &&l) { - return typename FunctionTraits>::type{std::forward(l)}; - } - -private: - ccstd::unordered_map _callbackTable; - static uint32_t cbIDCounter; -}; - -template -void CallbacksInvoker::on(const KeyType &key, void (Target::*memberFn)(Args...), Target *target, bool once) { - static_assert(std::is_base_of::value, "Target must be the subclass of CCObject"); - using CallbackInfoType = CallbackInfo; - auto &list = _callbackTable[key]; - auto info = std::make_shared(); - info->_id.value = ++cbIDCounter; - info->set(static_cast(memberFn), target, once); - list._callbackInfos.emplace_back(std::move(info)); -} - -template -void CallbacksInvoker::on(const KeyType &key, std::function &&callback, Target *target, CallbackID &outCallbackID, bool once) { - auto &list = _callbackTable[key]; - auto info = std::make_shared>(); - info->_id.value = ++cbIDCounter; - CallbackID cbID = info->_id; - info->set(std::forward>(callback), target, once); - list._callbackInfos.emplace_back(std::move(info)); - outCallbackID = cbID; -} - -template -void CallbacksInvoker::on(const KeyType &key, std::function &&callback, CallbackID &outCallbackID, bool once) { - on(key, std::forward>(callback), nullptr, outCallbackID, once); -} - -template -std::enable_if_t::value, void> -CallbacksInvoker::on(const KeyType &key, LambdaType &&callback, Target *target, CallbackID &outCallbackID, bool once) { - on(key, toFunction(std::forward(callback)), target, outCallbackID, once); -} - -template -std::enable_if_t::value, void> -CallbacksInvoker::on(const KeyType &key, LambdaType &&callback, CallbackID &outCallbackID, bool once) { - on(key, toFunction(std::forward(callback)), outCallbackID, once); -} - -template -void CallbacksInvoker::on(const KeyType &key, std::function &&callback, Target *target, bool once) { - CallbackID unusedID{0}; - on(key, callback, target, unusedID, once); -} - -template -void CallbacksInvoker::on(const KeyType &key, std::function &&callback, bool once) { - CallbackID unusedID{0}; - on(key, std::forward>(callback), nullptr, unusedID, once); -} - -template -std::enable_if_t::value, void> -CallbacksInvoker::on(const KeyType &key, LambdaType &&callback, Target *target, bool once) { - CallbackID unusedID{0}; - on(key, toFunction(std::forward(callback)), target, unusedID, once); -} - -template -std::enable_if_t::value, void> -CallbacksInvoker::on(const KeyType &key, LambdaType &&callback, bool once) { - CallbackID unusedID{0}; - on(key, toFunction(std::forward(callback)), unusedID, once); -} - -template -void CallbacksInvoker::off(const KeyType &key, void (Target::*memberFn)(Args...), Target *target) { - static_assert(std::is_base_of::value, "Target must be the subclass of CCObject"); - using CallbackFn = void (CCObject::*)(Args...); - auto iter = _callbackTable.find(key); - if (iter != _callbackTable.end()) { - auto &list = iter->second; - const auto &infos = list._callbackInfos; - size_t i = 0; - for (const auto &info : infos) { - if (info != nullptr && reinterpret_cast(info->getMemberFn()) == memberFn && info->_target == target) { - list.cancel(static_cast(i)); - break; - } - ++i; - } - } -} - -template -void CallbacksInvoker::emit(const KeyType &key, Args &&...args) { -#if CC_DEBUG - ccstd::vector argTypes{(typeid(Args).name())...}; -#endif - auto iter = _callbackTable.find(key); - if (iter != _callbackTable.end()) { - auto &list = iter->second; - bool rootInvoker = !list._isInvoking; - list._isInvoking = true; - - auto &infos = list._callbackInfos; - for (auto &i : infos) { - auto &baseInfo = i; - if (baseInfo == nullptr) { - continue; - } - -#if CC_DEBUG - CC_ASSERT(baseInfo->_argTypes.size() == argTypes.size()); - for (size_t i = 0, len = argTypes.size(); i < len; ++i) { - if (baseInfo->_argTypes[i] != argTypes[i]) { - CC_LOG_ERROR("Wrong argument type! baseInfo->_argTypes[%d]=%s, argTypes[%d]=%s", i, baseInfo->_argTypes[i].c_str(), i, argTypes[i].c_str()); - CC_ASSERT(false); - } - } -#endif - using CallbackInfoType = CallbackInfo; - auto info = std::static_pointer_cast(i); - if (info != nullptr) { - if (info->_memberFn != nullptr && info->_target != nullptr) { - auto memberFn = info->_memberFn; - auto *target = reinterpret_cast(info->_target); - - // Pre off once callbacks to avoid influence on logic in callback - if (info->_once) { - off(key, memberFn, target); - } - // Lazy check validity of callback target, - // if target is CCObject and is no longer valid, then remove the callback info directly - if (!info->check()) { - off(key, memberFn, target); - } else { - (target->*memberFn)(std::forward(args)...); - } - } else { - const auto &callback = info->_callback; - const CallbackID &cbID = info->_id; - // Pre off once callbacks to avoid influence on logic in callback - if (info->_once) { - off(key, cbID); - } - // Lazy check validity of callback target, - // if target is CCObject and is no longer valid, then remove the callback info directly - if (!info->check()) { - off(key, cbID); - } else { - callback(std::forward(args)...); - } - } - } else { - CC_ASSERT(false); - } - } - - if (rootInvoker) { - list._isInvoking = false; - if (list._containCanceled) { - list.purgeCanceled(); - } - } - } -} - -template -bool CallbacksInvoker::hasEventListener(const KeyType &key, void (Target::*memberFn)(Args...), Target *target) const { - using CallbackFn = void (CCObject::*)(Args...); - auto iter = _callbackTable.find(key); - if (iter == _callbackTable.end()) { - return false; - } - - const auto &list = iter->second; - // check any valid callback - const auto &infos = list._callbackInfos; - - for (const auto &info : infos) { - if (info != nullptr && info->check() && reinterpret_cast(info->getMemberFn()) == memberFn && info->_target == target) { - return true; - } - } - - return false; -} - -using EventTarget = CallbacksInvoker; - -} // namespace cc diff --git a/native/cocos/bindings/event/CustomEventTypes.h b/native/cocos/core/event/Event.h similarity index 52% rename from native/cocos/bindings/event/CustomEventTypes.h rename to native/cocos/core/event/Event.h index 289e78a6582..579baa3c32f 100644 --- a/native/cocos/bindings/event/CustomEventTypes.h +++ b/native/cocos/core/event/Event.h @@ -1,8 +1,8 @@ /**************************************************************************** - Copyright (c) 2018-2022 Xiamen Yaji Software Co., Ltd. - + Copyright (c) 2022 Xiamen Yaji Software Co., Ltd. + http://www.cocos.com - + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated engine source code (the "Software"), a limited, worldwide, royalty-free, non-assignable, revocable and non-exclusive license @@ -10,10 +10,10 @@ not use Cocos Creator software for developing other software or tools that's used for developing games. You are not granted to publish, distribute, sublicense, and/or sell copies of Cocos Creator. - + The software or tools in this License Agreement are licensed, not sold. Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. - + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -21,21 +21,35 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -****************************************************************************/ - + ****************************************************************************/ #pragma once - -#define EVENT_COME_TO_FOREGROUND "event_come_to_foreground" -#define EVENT_COME_TO_BACKGROUND "event_come_to_background" -#define EVENT_DESTROY_WINDOW "event_destroy_window" -#define EVENT_RESTART_VM "event_restart_vm" -#define EVENT_RECREATE_WINDOW "event_recreate_window" -#define EVENT_MEMORY_WARNING "event_memory_warning" -#define EVENT_RESIZE "event_resize" -#define EVENT_CLOSE "event_close" -#define EVENT_SCENE_LOAD "event_scene_load" - -#define EVENT_MOUSE_DOWN "event_mouse_down" -#define EVENT_MOUSE_UP "event_mouse_up" -#define EVENT_MOUSE_MOVE "event_mouse_move" -#define EVENT_MOUSE_WHEEL "event_mouse_wheel" +#ifdef SWIGCOCOS + #define IMPL_EVENT_TARGET_WITH_PARENT(...) + #define IMPL_EVENT_TARGET(...) + #define DECLARE_TARGET_EVENT_BEGIN(...) + #define DECLARE_TARGET_EVENT_END(...) + #define TARGET_EVENT_ARG0(...) + #define TARGET_EVENT_ARG1(...) + #define TARGET_EVENT_ARG2(...) + #define TARGET_EVENT_ARG3(...) + #define TARGET_EVENT_ARG4(...) + #define TARGET_EVENT_ARG5(...) + #define TARGET_EVENT_ARG6(...) + #define TARGET_EVENT_ARG7(...) + #define TARGET_EVENT_ARG8(...) + #define TARGET_EVENT_ARG9(...) + #define TARGET_EVENT_ARG10(...) + #define TARGET_EVENT_ARG11(...) + #define TARGET_EVENT_ARG12(...) + #define TARGET_EVENT_ARG13(...) + #define TARGET_EVENT_ARG14(...) + #define TARGET_EVENT_ARG15(...) + #define TARGET_EVENT_ARG16(...) + #define TARGET_EVENT_ARG17(...) + #define TARGET_EVENT_ARG18(...) + #define TARGET_EVENT_ARG19(...) + #define TARGET_EVENT_ARG20(...) +#else + #include "EventBus.h" + #include "EventTarget.h" +#endif \ No newline at end of file diff --git a/native/tools/simulator/libsimulator/lib/CustomAppEvent.cpp b/native/cocos/core/event/EventBus.cpp similarity index 55% rename from native/tools/simulator/libsimulator/lib/CustomAppEvent.cpp rename to native/cocos/core/event/EventBus.cpp index 0c5c51c5305..db78fee1a21 100644 --- a/native/tools/simulator/libsimulator/lib/CustomAppEvent.cpp +++ b/native/cocos/core/event/EventBus.cpp @@ -1,8 +1,8 @@ /**************************************************************************** - Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. - + Copyright (c) 2022 Xiamen Yaji Software Co., Ltd. + http://www.cocos.com - + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated engine source code (the "Software"), a limited, worldwide, royalty-free, non-assignable, revocable and non-exclusive license @@ -10,10 +10,10 @@ not use Cocos Creator software for developing other software or tools that's used for developing games. You are not granted to publish, distribute, sublicense, and/or sell copies of Cocos Creator. - + The software or tools in this License Agreement are licensed, not sold. Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. - + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -22,38 +22,40 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ****************************************************************************/ - -// -// CustomAppEvent.cpp -// Simulator -// -// - -#include "CustomAppEvent.h" - -CustomAppEvent::CustomAppEvent(const std::string& eventName, int type) -: CustomEvent() -, _eventName(eventName) -{ - name = eventName; - setEventType(type); -} - -void CustomAppEvent::setEventType(int type) -{ - _eventType = type; -} -int CustomAppEvent::getEventType() -{ - return _eventType; +#include "EventBus.h" +#include +#include "intl/List.h" + +namespace cc { +namespace event { + +bool BusEventListenerContainer::addListener(BusEventListenerBase *lis) { + if (_isBroadcasting) { + intl::listAppend(&_pendingNew, lis); + return true; + } + return doAddListener(lis); } -void CustomAppEvent::setDataString(std::string data) -{ - _dataString = data; +bool BusEventListenerContainer::removeListener(BusEventListenerBase *lis) { + if (_isBroadcasting) { + intl::listAppend(&_pendingDel, lis); + return true; + } + return doRemoveListener(lis); } -std::string CustomAppEvent::getDataString() -{ - return _dataString; +void BusEventListenerContainer::fixPendings() { + EVENT_LIST_LOOP_REV_BEGIN(curr, _pendingDel) + intl::detachFromList(&_pendingDel, curr); + doRemoveListener(curr); + EVENT_LIST_LOOP_REV_END(curr, _pendingDel) + EVENT_LIST_LOOP_REV_BEGIN(curr, _pendingNew) + intl::detachFromList(&_pendingNew, curr); + doAddListener(curr); + EVENT_LIST_LOOP_REV_END(curr, _pendingNew) + _pendingDel = nullptr; + _pendingNew = nullptr; } +} // namespace event +} // namespace cc \ No newline at end of file diff --git a/native/cocos/core/event/EventBus.h b/native/cocos/core/event/EventBus.h new file mode 100644 index 00000000000..88eb4429950 --- /dev/null +++ b/native/cocos/core/event/EventBus.h @@ -0,0 +1,215 @@ +/**************************************************************************** + Copyright (c) 2022 Xiamen Yaji Software Co., Ltd. + + http://www.cocos.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated engine source code (the "Software"), a limited, + worldwide, royalty-free, non-assignable, revocable and non-exclusive license + to use Cocos Creator solely to develop games on your target platforms. You shall + not use Cocos Creator software for developing other software or tools that's + used for developing games. You are not granted to publish, distribute, + sublicense, and/or sell copies of Cocos Creator. + + The software or tools in this License Agreement are licensed, not sold. + Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + ****************************************************************************/ +#pragma once + +#include +#include +#include + +#include "intl/EventIntl.h" +#include "intl/List.h" + +namespace cc { +namespace event { + +class BusEventListenerBase { +public: + BusEventListenerBase *next{nullptr}; + BusEventListenerBase *prev{nullptr}; +}; + +class BusEventListenerContainer { +public: + BusEventListenerContainer() = default; + virtual ~BusEventListenerContainer() = default; + bool addListener(BusEventListenerBase *); + bool removeListener(BusEventListenerBase *); + + template + bool broadcast(ARGS &&...args); + +private: + bool doAddListener(BusEventListenerBase *listener) { + return intl::listAppend(&_arr, listener); + } + bool doRemoveListener(BusEventListenerBase *listener) { + return intl::detachFromList(&_arr, listener); + } + bool hasPending() const { + return _pendingDel || _pendingNew; + } + void fixPendings(); + +protected: + BusEventListenerBase *_arr{nullptr}; + BusEventListenerBase *_pendingNew{nullptr}; + BusEventListenerBase *_pendingDel{nullptr}; + int _isBroadcasting = 0; +}; + +template +class BusEventBroadcaster : public BusEventListenerContainer { +public: + bool doBroadcast(ARGS &&...args); +}; + +template +bool BusEventListenerContainer::broadcast(ARGS &&...args) { + using BusType = BusEventBroadcaster; + _isBroadcasting++; + auto ret = static_cast(this)->doBroadcast(std::forward(args)...); + _isBroadcasting--; + if (!_isBroadcasting && hasPending()) { + fixPendings(); + } + return false; +} + +template +class BusEventListenerDB final { +public: + static BusEventListenerContainer *container() { + if (ctn == nullptr) { + ctn = new BusEventListenerContainer; + } + return ctn; + } + +private: + static BusEventListenerContainer *ctn; +}; + +template +BusEventListenerContainer *BusEventListenerDB::ctn = nullptr; + +template +struct BusEventTrait { + using bus_type = BusType; + using return_type = R; + using argument_tuple_types = std::tuple; + constexpr static int ARG_COUNT = sizeof...(ARGS); +}; +/** + * Bus Event Listener + */ +template +class Listener : public BusEventListenerBase { +public: + using bus_type = typename EHandler::bus_type; + using return_type = typename EHandler::return_type; + using argument_tuple_types = typename EHandler::argument_tuple_types; + using _argument_wrapper = typename intl::TupleExtractor; + // using func_type = typename _argument_wrapper::func_type; + using std_func_type = typename _argument_wrapper::std_func_type; + + constexpr static const char *BUS_NAME = EHandler::BUS_NAME; + constexpr static const char *HANDLE_CLASS = EHandler::HANDLE_CLASS; + + Listener(); + ~Listener(); + + inline bool isEnabled() const { return _enabled; } + inline void enable() { _enabled = true; } + inline void disable() { _enabled = false; } + inline void reset() { _callback = nullptr; } + + template + bool bind(Fn &&func) { + _callback = intl::convertLambda(std::forward(func)); + return true; + } + + template + void invoke(ARGS &&...args) { + if (_callback && _enabled) { + _callback(std::forward(args)...); + } else { + std::cerr << "[ERROR] listener has no bound function or disabled!" << std::endl; + } + } + + const char *getBusName() const { return BUS_NAME; } + const char *getHanlderName() const { return HANDLE_CLASS; } + +private: + bool _enabled{true}; + std_func_type _callback; +}; + +template +Listener::Listener() { + BusEventListenerDB::container()->addListener(this); +} + +template +Listener::~Listener() { + BusEventListenerDB::container()->removeListener(this); +} + +template +bool BusEventBroadcaster::doBroadcast(ARGS &&...args) { + // broadcast events to all listeners + EVENT_LIST_LOOP_BEGIN(curr, _arr) + static_cast *>(curr)->invoke(std::forward(args)...); + EVENT_LIST_LOOP_END(curr, _arr) + return true; +} + +template +void broadcast(ARGS &&...args) { + static_assert(sizeof...(ARGS) == EHandler::ARG_COUNT, "parameter count incorrect"); + event::intl::validateParameters<0, EHandler, ARGS...>(std::forward(args)...); + auto *listenerSet = BusEventListenerDB::container(); + listenerSet->template broadcast(std::forward(args)...); +} + +} // namespace event +} // namespace cc + +// NOLINTNEXTLINE +#define EventBusName_(n) n##_ebus + +#define DECLARE_EVENT_BUS(EventBusClass) \ + struct EventBusClass##_ebus { \ + constexpr static const char *BUS_NAME = #EventBusClass; \ + }; + +// NOLINTNEXTLINE +#define _DECLARE_BUS_EVENT_VA(BusEventClass, EventBusClass, ...) \ + struct BusEventClass final : cc::event::BusEventTrait { \ + using bus_type = EventBusName_(EventBusClass); \ + using Listener = cc::event::Listener; \ + constexpr static const char *BUS_NAME = EventBusName_(EventBusClass)::BUS_NAME; \ + constexpr static const char *HANDLE_CLASS = #BusEventClass; \ + constexpr static size_t TypeID() { \ + return cc::event::intl::hash(#BusEventClass); \ + } \ + template \ + static inline void emit(ARGS &&...args) { \ + cc::event::emit(std::forward(args)...); \ + } \ + }; + +#include "intl/EventBusMacros.h" diff --git a/native/cocos/core/event/EventTarget.h b/native/cocos/core/event/EventTarget.h new file mode 100644 index 00000000000..c391d8e45e5 --- /dev/null +++ b/native/cocos/core/event/EventTarget.h @@ -0,0 +1,599 @@ +/**************************************************************************** + Copyright (c) 2022 Xiamen Yaji Software Co., Ltd. + + http://www.cocos.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated engine source code (the "Software"), a limited, + worldwide, royalty-free, non-assignable, revocable and non-exclusive license + to use Cocos Creator solely to develop games on your target platforms. You shall + not use Cocos Creator software for developing other software or tools that's + used for developing games. You are not granted to publish, distribute, + sublicense, and/or sell copies of Cocos Creator. + + The software or tools in this License Agreement are licensed, not sold. + Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + ****************************************************************************/ +#pragma once + +#include +#include +#include "base/Macros.h" +#include "intl/EventIntl.h" +#include "intl/List.h" + +namespace cc { +namespace event { + +class TgtEventTraitClass {}; + +enum class EventPhaseType { + CAPTUREING_PHASE = 1, + AT_TARGET = 2, + BUBBLING_PHASE = 3, +}; + +struct TgtEventInfo { + EventPhaseType eventPhase; + bool bubbles{true}; + bool cancelable; + void stopPropagation() { + propagationStopped = true; + } + void preventDefault(); + bool propagationStopped{false}; +}; + +template +struct Event : TgtEventInfo { + using emitter_type = typename TgtEvent::emitter_type; + using argument_tuple_types = typename TgtEvent::argument_tuple_types; + using argument_temp_types = typename TgtEvent::argument_temp_types; + emitter_type *target; + emitter_type *currentTarget; + argument_temp_types args; + + Event() = default; + + explicit Event(const argument_tuple_types &argsIn) : args(argsIn) { + } + + template + auto get() const { + return std::get(args); + } + template + auto get() { + return std::get(args); + } + + template + void set(A &&value) { + std::get(args) = value; + } + void initEvent(bool canBubbleArg, bool cancelableArg) { + // TODO() + } + + template + void update(ARGS &&...values) { + args = std::make_tuple<>(std::forward(values)...); + } +}; + +template +class TgtEventTrait : public TgtEventTraitClass { +public: + using emitter_type = EmitterType; + using argument_tuple_types = std::tuple; + using argument_temp_types = std::tuple>...>; + constexpr static int ARG_COUNT = sizeof...(ARGS); +}; + +class TgtMemberFnCmp { +public: + virtual ~TgtMemberFnCmp() = default; + virtual void *getContext() = 0; + virtual bool equals(TgtMemberFnCmp *) const = 0; +}; + +template +class TgtMemberHandleFn final : public TgtMemberFnCmp { +public: + ~TgtMemberHandleFn() override = default; + void *getContext() override { return context; } + bool equals(TgtMemberFnCmp *other) const override { + auto *fake = reinterpret_cast(other); + return context == fake->context && func == fake->func; + } + Fn func; + void *context; +}; + +class TargetEventListenerBase { +public: + enum class RunState { + NORMAL, + PENDING_ONCE, + ONCE_DONE, + }; + virtual ~TargetEventListenerBase() = default; + virtual void *getContext() const = 0; + virtual const char *getEventType() const { return nullptr; } + + bool isEnabled() const { return _enabled; } + void setOnce() { _state = RunState::PENDING_ONCE; } + inline size_t getEventTypeID() const { return _eventTypeID; } + + int32_t id{-1}; + + TargetEventListenerBase *next{nullptr}; + TargetEventListenerBase *prev{nullptr}; + +protected: + bool _enabled = true; + RunState _state{RunState::NORMAL}; + size_t _eventTypeID; +}; + +template +class TargetEventListener : public TargetEventListenerBase { +public: + using emitter_type = typename TgtEvent::emitter_type; + using event_type = typename TgtEvent::event_type; + using persist_function_type = typename TgtEvent::persist_function_type; + explicit TargetEventListener(persist_function_type func) : _func(func) { + _eventTypeID = TgtEvent::TypeID(); + } + + ~TargetEventListener() override { + delete _fnCmptor; + } + + template + void setMemberFuncAddr(Fn func, void *context) { + auto fctx = new TgtMemberHandleFn; + fctx->func = func; + fctx->context = context; + _fnCmptor = fctx; + } + + void *getContext() const override { + if (_fnCmptor) return _fnCmptor->getContext(); + return nullptr; + } + + void apply(emitter_type *self, event_type *evobj) { + switch (_state) { + case RunState::ONCE_DONE: + return; + case RunState::PENDING_ONCE: + _state = RunState::ONCE_DONE; + break; + default: + break; + } + _func(self, evobj); + } + +protected: + persist_function_type _func; + TgtMemberFnCmp *_fnCmptor{nullptr}; +}; + +using target_event_id_type = int32_t; + +template +class TargetEventID final { +public: + using handle_type = TgtEvent; + using id_type = target_event_id_type; + TargetEventID() = default; + TargetEventID(id_type eventId) : _eventId(eventId) {} // NOLINT + + TargetEventID(const TargetEventID &) = default; + TargetEventID(TargetEventID &&) noexcept = default; + + TargetEventID &operator=(const TargetEventID &) = default; + TargetEventID &operator=(TargetEventID &&) noexcept = default; + + id_type value() { return _eventId; } + +private: + id_type _eventId{}; +}; + +class EventTarget { +public: + static constexpr bool HAS_PARENT = false; + + template + TargetEventID addEventListener(Fn &&func, bool useCapture, bool once) { + // CC_ASSERT(!_emittingEvent); + using func_type = std::conditional_t::IS_LAMBDA, + typename intl::lambda_without_class_t, Fn>; + using wrap_type = intl::TgtEvtFnTrait; + auto stdfn = wrap_type::template wrap(intl::convertLambda(std::forward(func))); + auto *newHandler = new event::TargetEventListener(stdfn); + auto newId = ++_handlerId; + newHandler->id = newId; + if (once) { + newHandler->setOnce(); + } + if constexpr (wrap_type::IS_MEMBER_FUNC) { + newHandler->setMemberFuncAddr(std::forward(func), nullptr); + } + if (useCapture) { + intl::listAppend(&_capturingHandlersMap[TgtEvent::TypeID()], newHandler); + } else { + intl::listAppend(&_bubblingHandlersMap[TgtEvent::TypeID()], newHandler); + } + return TargetEventID(newId); + } + + template + TargetEventID once(Fn &&func, bool useCapture) { + return this->template addEventListener(std::forward(func), useCapture, true); + } + + template + TargetEventID addEventListener(Fn &&func, O *ctx, bool useCapture, bool once) { + // CC_ASSERT(!_emittingEvent); + using wrap_type = event::intl::TgtEvtFnTrait; + auto stdfn = wrap_type::template wrapWithContext(std::forward(func), ctx); + auto *newHandler = new event::TargetEventListener(stdfn); + auto newId = ++_handlerId; + newHandler->id = newId; + if (once) { + newHandler->setOnce(); + } + if constexpr (wrap_type::IS_MEMBER_FUNC) { + newHandler->setMemberFuncAddr(std::forward(func), ctx); + } + if (useCapture) { + intl::listAppend(&_capturingHandlersMap[TgtEvent::TypeID()], newHandler); + } else { + intl::listAppend(&_bubblingHandlersMap[TgtEvent::TypeID()], newHandler); + } + return TargetEventID(newId); + } + + template + TargetEventID once(Fn &&func, O *ctx) { + return this->template addEventListener(std::forward(func), ctx, true); + } + + template + bool off(TargetEventID eventId) { + CC_ASSERT(!_emittingEvent); + + TargetEventListenerBase *&bubblingHandlers = _bubblingHandlersMap[TgtEvent::TypeID()]; + + EVENT_LIST_LOOP_REV_BEGIN(handle, bubblingHandlers) + if (handle && handle->id == eventId.value()) { + CC_ASSERT(handle->getEventTypeID() == TgtEvent::TypeID()); + intl::detachFromList(&bubblingHandlers, handle); + delete handle; + return true; + } + EVENT_LIST_LOOP_REV_END(handle, bubblingHandlers) + TargetEventListenerBase *&capturingHandlers = _capturingHandlersMap[TgtEvent::TypeID()]; + EVENT_LIST_LOOP_REV_BEGIN(handle, capturingHandlers) + if (handle && handle->id == eventId.value()) { + CC_ASSERT(handle->getEventTypeID() == TgtEvent::TypeID()); + intl::detachFromList(&capturingHandlers, handle); + delete handle; + return true; + } + EVENT_LIST_LOOP_REV_END(handle, capturingHandlers) + return false; + } + + void offAll() { + CC_ASSERT(!_emittingEvent); + for (auto &itr : _bubblingHandlersMap) { + TargetEventListenerBase *&handlers = itr.second; + EVENT_LIST_LOOP_REV_BEGIN(handle, handlers) + delete handle; + EVENT_LIST_LOOP_REV_END(handle, handlers) + } + + for (auto &itr : _capturingHandlersMap) { + TargetEventListenerBase *&handlers = itr.second; + EVENT_LIST_LOOP_REV_BEGIN(handle, handlers) + delete handle; + EVENT_LIST_LOOP_REV_END(handle, handlers) + } + + _bubblingHandlersMap.clear(); + _capturingHandlersMap.clear(); + } + + template + void off() { + static_assert(std::is_base_of_v, "incorrect template argument"); + CC_ASSERT(!_emittingEvent); + TargetEventListenerBase *&bubblingHandlers = _bubblingHandlersMap[TgtEvent::TypeID()]; + + EVENT_LIST_LOOP_REV_BEGIN(handle, bubblingHandlers) + if (handle) { + intl::detachFromList(&bubblingHandlers, handle); + delete handle; + } + EVENT_LIST_LOOP_REV_END(handle, bubblingHandlers) + + TargetEventListenerBase *&capturingHandlers = _capturingHandlersMap[TgtEvent::TypeID()]; + EVENT_LIST_LOOP_REV_BEGIN(handle, capturingHandlers) + if (handle) { + intl::detachFromList(&capturingHandlers, handle); + delete handle; + } + EVENT_LIST_LOOP_REV_END(handle, capturingHandlers) + } + + template + void emit(ARGS &&...args) { + // TODO(): statistics + using handler_type = event::TargetEventListener; + using event_type = typename TgtEvent::event_type; + static_assert(sizeof...(ARGS) == TgtEvent::ARG_COUNT, "Parameter count incorrect for function EventTarget::emit"); + event::intl::validateParameters<0, TgtEvent, ARGS...>(std::forward(args)...); + event_type eventObj(std::make_tuple(std::forward(args)...)); + eventObj.target = static_cast(this); + eventObj.currentTarget = static_cast(this); + + emitEvtObj(&eventObj); + } + template + void emitEvtObj(EvtObj *eventObj) { + using event_type = typename TgtEvent::event_type; + using handler_type = event::TargetEventListener; + static_assert(std::is_same_v, "Event type mismatch"); + _emittingEvent++; + if constexpr (useCapture) { + TargetEventListenerBase *&handlers = _capturingHandlersMap[TgtEvent::TypeID()]; + EVENT_LIST_LOOP_BEGIN(handle, handlers) + if (handle && handle->getEventTypeID() == TgtEvent::TypeID() && handle->isEnabled()) { + static_cast(handle)->apply(static_cast(this), eventObj); + } + EVENT_LIST_LOOP_END(handle, handlers); + } else { + TargetEventListenerBase *&handlers = _bubblingHandlersMap[TgtEvent::TypeID()]; + EVENT_LIST_LOOP_BEGIN(handle, handlers) + if (handle && handle->getEventTypeID() == TgtEvent::TypeID() && handle->isEnabled()) { + static_cast(handle)->apply(static_cast(this), eventObj); + } + EVENT_LIST_LOOP_END(handle, handlers); + } + _emittingEvent--; + } + template + std::enable_if_t>, void> + dispatchEvent(EvtType &eventObj) { + if constexpr (Self::HAS_PARENT) { + std::vector parents; + Self *curr = static_cast(this)->Self::evGetParent(); + while (curr) { + if (curr->template hasEventHandler()) { + parents.emplace_back(curr); + } + curr = curr->evGetParent(); + } + for (auto itr = parents.rbegin(); itr != parents.rend(); itr++) { + eventObj.currentTarget = *itr; + (*itr)->template emitEvtObj(&eventObj); + if (eventObj.propagationStopped) { + return; + } + } + } + + eventObj.eventPhase = EventPhaseType::AT_TARGET; + eventObj.currentTarget = static_cast(this); + + emitEvtObj(&eventObj); + if (!eventObj.propagationStopped) { + emitEvtObj(&eventObj); + } + + if constexpr (Self::HAS_PARENT) { + if (!eventObj.propagationStopped && eventObj.bubbles) { + auto *curr = static_cast(this)->Self::evGetParent(); + std::vector parents; + + while (curr) { + if (curr->template hasEventHandler()) { + parents.emplace_back(curr); + } + curr = curr->evGetParent(); + } + for (auto itr = parents.begin(); itr != parents.end(); itr++) { + eventObj.currentTarget = *itr; + (*itr)->template emitEvtObj(&eventObj); + if (eventObj.propagationStopped) { + return; + } + } + } + } + } + + template + std::enable_if_t::head>>), void> + dispatchEvent(ARGS &&...args) { + using handler_type = event::TargetEventListener; + using event_type = typename TgtEvent::event_type; + static_assert(sizeof...(ARGS) == TgtEvent::ARG_COUNT, "Parameter count incorrect for function EventTarget::emit"); + event::intl::validateParameters<0, TgtEvent, ARGS...>(std::forward(args)...); + event_type eventObj(std::make_tuple(std::forward(args)...)); + eventObj.target = static_cast(this); + eventObj.currentTarget = static_cast(this); + eventObj.eventPhase = EventPhaseType::CAPTUREING_PHASE; + dispatchEvent(eventObj); + } + + template + void dispatchEvent() { + using handler_type = event::TargetEventListener; + using event_type = typename TgtEvent::event_type; + static_assert(0 == TgtEvent::ARG_COUNT, "Parameter count incorrect for function EventTarget::emit"); + event_type eventObj; + eventObj.target = static_cast(this); + eventObj.currentTarget = static_cast(this); + eventObj.eventPhase = EventPhaseType::CAPTUREING_PHASE; + dispatchEvent(eventObj); + } + + template + bool hasEventHandler() { + TargetEventListenerBase *&bubblingHandlers = _bubblingHandlersMap[TgtEvent::TypeID()]; + EVENT_LIST_LOOP_BEGIN(handle, bubblingHandlers) + if (handle && handle->isEnabled()) { + return true; + } + EVENT_LIST_LOOP_END(handle, bubblingHandlers); + TargetEventListenerBase *&capturingHandlers = _capturingHandlersMap[TgtEvent::TypeID()]; + EVENT_LIST_LOOP_BEGIN(handle, capturingHandlers) + if (handle && handle->isEnabled()) { + return true; + } + EVENT_LIST_LOOP_END(handle, capturingHandlers); + return false; + } + + template + bool hasEventHandler(Fn func, C *target) { + using wrap_type = event::intl::TgtEvtFnTrait; + using handler_type = event::TargetEventListener; + static_assert(std::is_same::value, "member function type mismatch"); + + TargetEventListenerBase *&bubblingHandlers = _bubblingHandlersMap[TgtEvent::TypeID()]; + EVENT_LIST_LOOP_BEGIN(handle, bubblingHandlers) + if (handle && handle->isEnabled() && handle->getContext() == target) { + auto *ptr = static_cast(handle); + return ptr->getMemberFuncAddr() == func; + } + EVENT_LIST_LOOP_END(handle, bubblingHandlers); + TargetEventListenerBase *&capturingHandlers = _capturingHandlersMap[TgtEvent::TypeID()]; + EVENT_LIST_LOOP_BEGIN(handle, capturingHandlers) + if (handle && handle->isEnabled() && handle->getContext() == target) { + auto *ptr = static_cast(handle); + return ptr->getMemberFuncAddr() == func; + } + EVENT_LIST_LOOP_END(handle, capturingHandlers); + + return false; + } + virtual ~EventTarget() { offAll(); } + +protected: + std::unordered_map _bubblingHandlersMap; + std::unordered_map _capturingHandlersMap; + + target_event_id_type _handlerId{1}; + int _emittingEvent{0}; +}; + +} // namespace event +} // namespace cc + +#define TARGET_EVENT_ARG0(EventType) \ + class EventType final : public cc::event::TgtEventTrait { \ + public: \ + using base_type = cc::event::TgtEventTrait; \ + using event_type = cc::event::Event; \ + using persist_function_type = std::function; \ + using handler_type = std::function; \ + constexpr static const char *EVENT_NAME = #EventType; \ + constexpr static size_t TypeID() { \ + return cc::event::intl::hash(#EventType); \ + } \ + }; + +// NOLINTNEXTLINE +#define _DECLARE_TARGET_EVENT_INTER(EventType, ...) \ + class EventType final : public cc::event::TgtEventTrait { \ + public: \ + using base_type = cc::event::TgtEventTrait; \ + using event_type = cc::event::Event; \ + using EventID = cc::event::TargetEventID; \ + using persist_function_type = std::function; \ + using handler_type = std::function; \ + constexpr static const char *EVENT_NAME = #EventType; \ + constexpr static size_t TypeID() { \ + return cc::event::intl::hash(#EventType); \ + } \ + }; + +// NOLINTNEXTLINE +#define _IMPL_EVENT_TARGET_(TargetClass) \ + template \ + cc::event::TargetEventID on(Fn &&func, bool useCapture = false) { \ + static_assert(std::is_base_of::value, "mismatch target type"); \ + return EventTarget::template addEventListener(std::forward(func), useCapture, false); \ + } \ + template \ + cc::event::TargetEventID on(Fn &&func, O *ctx, bool useCapture = false) { \ + return EventTarget::template addEventListener(std::forward(func), ctx, useCapture, false); \ + } \ + template \ + cc::event::TargetEventID once(Fn &&func, bool useCapture = false) { \ + static_assert(std::is_base_of::value, "mismatch target type"); \ + return EventTarget::template addEventListener(std::forward(func), useCapture, true); \ + } \ + template \ + cc::event::TargetEventID once(Fn func, O *ctx, bool useCapture = false) { \ + return EventTarget::template addEventListener(std::forward(func), ctx, useCapture, true); \ + } \ + template \ + void off() { \ + static_assert(std::is_base_of::value, "mismatch target type"); \ + EventTarget::template off(); \ + } \ + \ + template \ + bool off(cc::event::TargetEventID eventID) { \ + return EventTarget::off(eventID); \ + } \ + \ + template \ + void emit(ARGS &&...args) { \ + static_assert(std::is_base_of::value, "mismatch target type"); \ + EventTarget::template emit(std::forward(args)...); \ + } \ + template \ + void dispatchEvent(ARGS &&...args) { \ + EventTarget::template dispatchEvent(std::forward(args)...); \ + } + +#define IMPL_EVENT_TARGET(TargetClass) \ +public: \ + static constexpr bool HAS_PARENT = false; \ + _IMPL_EVENT_TARGET_(TargetClass) + +#define IMPL_EVENT_TARGET_WITH_PARENT(TargetClass, getParentMethod) \ +public: \ + static constexpr bool HAS_PARENT = true; \ + TargetClass *evGetParent() { \ + if constexpr (HAS_PARENT) { \ + return getParentMethod(); \ + } else { \ + return nullptr; \ + } \ + } \ + _IMPL_EVENT_TARGET_(TargetClass) + +#define DECLARE_TARGET_EVENT_BEGIN(TargetClass) \ + using EmitterType = TargetClass; + +#define DECLARE_TARGET_EVENT_END() + +#include "intl/EventTargetMacros.h" diff --git a/native/cocos/core/event/EventTypesToJS.cpp b/native/cocos/core/event/EventTypesToJS.cpp deleted file mode 100644 index ae21f2a8f74..00000000000 --- a/native/cocos/core/event/EventTypesToJS.cpp +++ /dev/null @@ -1,69 +0,0 @@ -/**************************************************************************** - Copyright (c) 2021 Xiamen Yaji Software Co., Ltd. - - http://www.cocos.com - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated engine source code (the "Software"), a limited, - worldwide, royalty-free, non-assignable, revocable and non-exclusive license - to use Cocos Creator solely to develop games on your target platforms. You shall - not use Cocos Creator software for developing other software or tools that's - used for developing games. You are not granted to publish, distribute, - sublicense, and/or sell copies of Cocos Creator. - - The software or tools in this License Agreement are licensed, not sold. - Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. - ****************************************************************************/ - -#include "core/event/EventTypesToJS.h" - -namespace cc { - -// Internal NodeEventType : 0~99 -// Internal EventTypesToJS : 100~199 -// Internal Game event : 200~299 -// Internal Director Event Type: 300~399 -const CallbacksInvoker::KeyType EventTypesToJS::NODE_REATTACH{104}; //{"NODE_REATTACH"}; -const CallbacksInvoker::KeyType EventTypesToJS::NODE_REMOVE_PERSIST_ROOT_NODE{105}; //{"NODE_REMOVE_PERSIST_ROOT_NODE"}; -const CallbacksInvoker::KeyType EventTypesToJS::NODE_DESTROY_COMPONENTS{106}; //{"NODE_DESTROY_COMPONENTS"}; -const CallbacksInvoker::KeyType EventTypesToJS::NODE_UI_TRANSFORM_DIRTY{107}; //{"NODE_UI_TRANSFORM_DIRTY"}; -const CallbacksInvoker::KeyType EventTypesToJS::NODE_ACTIVE_NODE{108}; //{"NODE_ACTIVE_NODE"}; -const CallbacksInvoker::KeyType EventTypesToJS::NODE_ON_BATCH_CREATED{109}; //{"NODE_ON_BATCH_CREATED"}; - -const CallbacksInvoker::KeyType EventTypesToJS::MODEL_UPDATE_TRANSFORM{110}; //{"MODEL_UPDATE_TRANSFORM"}; -const CallbacksInvoker::KeyType EventTypesToJS::MODEL_UPDATE_UBO{111}; //{"MODEL_UPDATE_UBO"}; -const CallbacksInvoker::KeyType EventTypesToJS::MODEL_UPDATE_LOCAL_DESCRIPTORS{112}; //{"MODEL_UPDATE_LOCAL_DESCRIPTORS"}; -const CallbacksInvoker::KeyType EventTypesToJS::MODEL_UPDATE_LOCAL_SH_DESCRIPTORS{113}; //{"MODEL_UPDATE_LOCAL_SH_DESCRIPTORS"}; -const CallbacksInvoker::KeyType EventTypesToJS::MODEL_UPDATE_WORLD_BOUND_DESCRIPTORS{114}; //{"MODEL_UPDATE_WORLD_BOUND_DESCRIPTORS"}; -const CallbacksInvoker::KeyType EventTypesToJS::MODEL_UPDATE_INSTANCED_ATTRIBUTES{115}; //{"MODEL_UPDATE_INSTANCED_ATTRIBUTES"}; -const CallbacksInvoker::KeyType EventTypesToJS::MODEL_GET_MACRO_PATCHES{116}; //{"MODEL_GET_MACRO_PATCHES"}; - -const CallbacksInvoker::KeyType EventTypesToJS::DIRECTOR_BEFORE_COMMIT{117}; //{"MODEL_GET_MACRO_PATCHES"}; - -const CallbacksInvoker::KeyType EventTypesToJS::SIMPLE_TEXTURE_GFX_TEXTURE_UPDATED{118}; -const CallbacksInvoker::KeyType EventTypesToJS::TEXTURE_BASE_GFX_SAMPLER_UPDATED{119}; - -const CallbacksInvoker::KeyType EventTypesToJS::NODE_SCENE_UPDATED{120}; - -const CallbacksInvoker::KeyType EventTypesToJS::MATERIAL_PASSES_UPDATED{121}; - -const CallbacksInvoker::KeyType EventTypesToJS::NODE_LOCAL_POSITION_UPDATED{122}; -const CallbacksInvoker::KeyType EventTypesToJS::NODE_LOCAL_ROTATION_UPDATED{123}; -const CallbacksInvoker::KeyType EventTypesToJS::NODE_LOCAL_SCALE_UPDATED{124}; -const CallbacksInvoker::KeyType EventTypesToJS::NODE_LOCAL_POSITION_ROTATION_SCALE_UPDATED{125}; - -const CallbacksInvoker::KeyType EventTypesToJS::SIMPLE_TEXTURE_AFTER_ASSIGN_IMAGE{126}; - -const CallbacksInvoker::KeyType EventTypesToJS::NODE_EDITOR_ATTACHED{127}; - -const CallbacksInvoker::KeyType EventTypesToJS::DIRECTOR_BEFORE_RENDER{128}; - -} // namespace cc diff --git a/native/cocos/core/event/EventTypesToJS.h b/native/cocos/core/event/EventTypesToJS.h deleted file mode 100644 index 5485b26849c..00000000000 --- a/native/cocos/core/event/EventTypesToJS.h +++ /dev/null @@ -1,66 +0,0 @@ -/**************************************************************************** - Copyright (c) 2021 Xiamen Yaji Software Co., Ltd. - - http://www.cocos.com - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated engine source code (the "Software"), a limited, - worldwide, royalty-free, non-assignable, revocable and non-exclusive license - to use Cocos Creator solely to develop games on your target platforms. You shall - not use Cocos Creator software for developing other software or tools that's - used for developing games. You are not granted to publish, distribute, - sublicense, and/or sell copies of Cocos Creator. - - The software or tools in this License Agreement are licensed, not sold. - Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. - ****************************************************************************/ - -#pragma once - -#include "base/std/container/string.h" -#include "core/event/CallbacksInvoker.h" - -namespace cc { - -class EventTypesToJS final { -public: - static const CallbacksInvoker::KeyType NODE_REATTACH; - static const CallbacksInvoker::KeyType NODE_REMOVE_PERSIST_ROOT_NODE; - static const CallbacksInvoker::KeyType NODE_DESTROY_COMPONENTS; - static const CallbacksInvoker::KeyType NODE_UI_TRANSFORM_DIRTY; - static const CallbacksInvoker::KeyType NODE_ACTIVE_NODE; - static const CallbacksInvoker::KeyType NODE_ON_BATCH_CREATED; - static const CallbacksInvoker::KeyType NODE_SCENE_UPDATED; - static const CallbacksInvoker::KeyType NODE_LOCAL_POSITION_UPDATED; - static const CallbacksInvoker::KeyType NODE_LOCAL_ROTATION_UPDATED; - static const CallbacksInvoker::KeyType NODE_LOCAL_SCALE_UPDATED; - static const CallbacksInvoker::KeyType NODE_LOCAL_POSITION_ROTATION_SCALE_UPDATED; - static const CallbacksInvoker::KeyType NODE_EDITOR_ATTACHED; - - static const CallbacksInvoker::KeyType MODEL_UPDATE_TRANSFORM; - static const CallbacksInvoker::KeyType MODEL_UPDATE_UBO; - static const CallbacksInvoker::KeyType MODEL_UPDATE_LOCAL_DESCRIPTORS; - static const CallbacksInvoker::KeyType MODEL_UPDATE_LOCAL_SH_DESCRIPTORS; - static const CallbacksInvoker::KeyType MODEL_UPDATE_WORLD_BOUND_DESCRIPTORS; - static const CallbacksInvoker::KeyType MODEL_UPDATE_INSTANCED_ATTRIBUTES; - static const CallbacksInvoker::KeyType MODEL_GET_MACRO_PATCHES; - - static const CallbacksInvoker::KeyType DIRECTOR_BEFORE_COMMIT; - static const CallbacksInvoker::KeyType DIRECTOR_BEFORE_RENDER; - - static const CallbacksInvoker::KeyType SIMPLE_TEXTURE_GFX_TEXTURE_UPDATED; - static const CallbacksInvoker::KeyType TEXTURE_BASE_GFX_SAMPLER_UPDATED; - - static const CallbacksInvoker::KeyType MATERIAL_PASSES_UPDATED; - static const CallbacksInvoker::KeyType SIMPLE_TEXTURE_AFTER_ASSIGN_IMAGE; -}; - -} // namespace cc diff --git a/native/cocos/core/event/intl/EventBusMacros.h b/native/cocos/core/event/intl/EventBusMacros.h new file mode 100644 index 00000000000..e013de71257 --- /dev/null +++ b/native/cocos/core/event/intl/EventBusMacros.h @@ -0,0 +1,295 @@ +// generated code + +#define DECLARE_BUS_EVENT_ARG0(BusEventClass, EventBusClass) \ + struct BusEventClass final : cc::event::BusEventTrait { \ + using bus_type = EventBusName_(EventBusClass); \ + using Listener = cc::event::Listener; \ + constexpr static const char *BUS_NAME = EventBusName_(EventBusClass)::BUS_NAME; \ + constexpr static const char *HANDLE_CLASS = #BusEventClass; \ + constexpr static size_t TypeID() { \ + return cc::event::intl::hash(#BusEventClass); \ + } \ + static inline void broadcast() { \ + cc::event::broadcast(); \ + } \ + }; + +#define DECLARE_BUS_EVENT_ARG1(BusEventClass, EventBusClass, ArgType0) \ + struct BusEventClass final : cc::event::BusEventTrait { \ + using bus_type = EventBusName_(EventBusClass); \ + using Listener = cc::event::Listener; \ + constexpr static const char *BUS_NAME = EventBusName_(EventBusClass)::BUS_NAME; \ + constexpr static const char *HANDLE_CLASS = #BusEventClass; \ + constexpr static size_t TypeID() { \ + return cc::event::intl::hash(#BusEventClass); \ + } \ + static inline void broadcast(ArgType0 arg0) { \ + cc::event::broadcast(arg0); \ + } \ + }; + +#define DECLARE_BUS_EVENT_ARG2(BusEventClass, EventBusClass, ArgType0, ArgType1) \ + struct BusEventClass final : cc::event::BusEventTrait { \ + using bus_type = EventBusName_(EventBusClass); \ + using Listener = cc::event::Listener; \ + constexpr static const char *BUS_NAME = EventBusName_(EventBusClass)::BUS_NAME; \ + constexpr static const char *HANDLE_CLASS = #BusEventClass; \ + constexpr static size_t TypeID() { \ + return cc::event::intl::hash(#BusEventClass); \ + } \ + static inline void broadcast(ArgType0 arg0, ArgType1 arg1) { \ + cc::event::broadcast(arg0, arg1); \ + } \ + }; + +#define DECLARE_BUS_EVENT_ARG3(BusEventClass, EventBusClass, ArgType0, ArgType1, ArgType2) \ + struct BusEventClass final : cc::event::BusEventTrait { \ + using bus_type = EventBusName_(EventBusClass); \ + using Listener = cc::event::Listener; \ + constexpr static const char *BUS_NAME = EventBusName_(EventBusClass)::BUS_NAME; \ + constexpr static const char *HANDLE_CLASS = #BusEventClass; \ + constexpr static size_t TypeID() { \ + return cc::event::intl::hash(#BusEventClass); \ + } \ + static inline void broadcast(ArgType0 arg0, ArgType1 arg1, ArgType2 arg2) { \ + cc::event::broadcast(arg0, arg1, arg2); \ + } \ + }; + +#define DECLARE_BUS_EVENT_ARG4(BusEventClass, EventBusClass, ArgType0, ArgType1, ArgType2, ArgType3) \ + struct BusEventClass final : cc::event::BusEventTrait { \ + using bus_type = EventBusName_(EventBusClass); \ + using Listener = cc::event::Listener; \ + constexpr static const char *BUS_NAME = EventBusName_(EventBusClass)::BUS_NAME; \ + constexpr static const char *HANDLE_CLASS = #BusEventClass; \ + constexpr static size_t TypeID() { \ + return cc::event::intl::hash(#BusEventClass); \ + } \ + static inline void broadcast(ArgType0 arg0, ArgType1 arg1, ArgType2 arg2, ArgType3 arg3) { \ + cc::event::broadcast(arg0, arg1, arg2, arg3); \ + } \ + }; + +#define DECLARE_BUS_EVENT_ARG5(BusEventClass, EventBusClass, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4) \ + struct BusEventClass final : cc::event::BusEventTrait { \ + using bus_type = EventBusName_(EventBusClass); \ + using Listener = cc::event::Listener; \ + constexpr static const char *BUS_NAME = EventBusName_(EventBusClass)::BUS_NAME; \ + constexpr static const char *HANDLE_CLASS = #BusEventClass; \ + constexpr static size_t TypeID() { \ + return cc::event::intl::hash(#BusEventClass); \ + } \ + static inline void broadcast(ArgType0 arg0, ArgType1 arg1, ArgType2 arg2, ArgType3 arg3, ArgType4 arg4) { \ + cc::event::broadcast(arg0, arg1, arg2, arg3, arg4); \ + } \ + }; + +#define DECLARE_BUS_EVENT_ARG6(BusEventClass, EventBusClass, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5) \ + struct BusEventClass final : cc::event::BusEventTrait { \ + using bus_type = EventBusName_(EventBusClass); \ + using Listener = cc::event::Listener; \ + constexpr static const char *BUS_NAME = EventBusName_(EventBusClass)::BUS_NAME; \ + constexpr static const char *HANDLE_CLASS = #BusEventClass; \ + constexpr static size_t TypeID() { \ + return cc::event::intl::hash(#BusEventClass); \ + } \ + static inline void broadcast(ArgType0 arg0, ArgType1 arg1, ArgType2 arg2, ArgType3 arg3, ArgType4 arg4, ArgType5 arg5) { \ + cc::event::broadcast(arg0, arg1, arg2, arg3, arg4, arg5); \ + } \ + }; + +#define DECLARE_BUS_EVENT_ARG7(BusEventClass, EventBusClass, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6) \ + struct BusEventClass final : cc::event::BusEventTrait { \ + using bus_type = EventBusName_(EventBusClass); \ + using Listener = cc::event::Listener; \ + constexpr static const char *BUS_NAME = EventBusName_(EventBusClass)::BUS_NAME; \ + constexpr static const char *HANDLE_CLASS = #BusEventClass; \ + constexpr static size_t TypeID() { \ + return cc::event::intl::hash(#BusEventClass); \ + } \ + static inline void broadcast(ArgType0 arg0, ArgType1 arg1, ArgType2 arg2, ArgType3 arg3, ArgType4 arg4, ArgType5 arg5, ArgType6 arg6) { \ + cc::event::broadcast(arg0, arg1, arg2, arg3, arg4, arg5, arg6); \ + } \ + }; + +#define DECLARE_BUS_EVENT_ARG8(BusEventClass, EventBusClass, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7) \ + struct BusEventClass final : cc::event::BusEventTrait { \ + using bus_type = EventBusName_(EventBusClass); \ + using Listener = cc::event::Listener; \ + constexpr static const char *BUS_NAME = EventBusName_(EventBusClass)::BUS_NAME; \ + constexpr static const char *HANDLE_CLASS = #BusEventClass; \ + constexpr static size_t TypeID() { \ + return cc::event::intl::hash(#BusEventClass); \ + } \ + static inline void broadcast(ArgType0 arg0, ArgType1 arg1, ArgType2 arg2, ArgType3 arg3, ArgType4 arg4, ArgType5 arg5, ArgType6 arg6, ArgType7 arg7) { \ + cc::event::broadcast(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); \ + } \ + }; + +#define DECLARE_BUS_EVENT_ARG9(BusEventClass, EventBusClass, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8) \ + struct BusEventClass final : cc::event::BusEventTrait { \ + using bus_type = EventBusName_(EventBusClass); \ + using Listener = cc::event::Listener; \ + constexpr static const char *BUS_NAME = EventBusName_(EventBusClass)::BUS_NAME; \ + constexpr static const char *HANDLE_CLASS = #BusEventClass; \ + constexpr static size_t TypeID() { \ + return cc::event::intl::hash(#BusEventClass); \ + } \ + static inline void broadcast(ArgType0 arg0, ArgType1 arg1, ArgType2 arg2, ArgType3 arg3, ArgType4 arg4, ArgType5 arg5, ArgType6 arg6, ArgType7 arg7, ArgType8 arg8) { \ + cc::event::broadcast(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); \ + } \ + }; + +#define DECLARE_BUS_EVENT_ARG10(BusEventClass, EventBusClass, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9) \ + struct BusEventClass final : cc::event::BusEventTrait { \ + using bus_type = EventBusName_(EventBusClass); \ + using Listener = cc::event::Listener; \ + constexpr static const char *BUS_NAME = EventBusName_(EventBusClass)::BUS_NAME; \ + constexpr static const char *HANDLE_CLASS = #BusEventClass; \ + constexpr static size_t TypeID() { \ + return cc::event::intl::hash(#BusEventClass); \ + } \ + static inline void broadcast(ArgType0 arg0, ArgType1 arg1, ArgType2 arg2, ArgType3 arg3, ArgType4 arg4, ArgType5 arg5, ArgType6 arg6, ArgType7 arg7, ArgType8 arg8, ArgType9 arg9) { \ + cc::event::broadcast(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); \ + } \ + }; + +#define DECLARE_BUS_EVENT_ARG11(BusEventClass, EventBusClass, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9, ArgType10) \ + struct BusEventClass final : cc::event::BusEventTrait { \ + using bus_type = EventBusName_(EventBusClass); \ + using Listener = cc::event::Listener; \ + constexpr static const char *BUS_NAME = EventBusName_(EventBusClass)::BUS_NAME; \ + constexpr static const char *HANDLE_CLASS = #BusEventClass; \ + constexpr static size_t TypeID() { \ + return cc::event::intl::hash(#BusEventClass); \ + } \ + static inline void broadcast(ArgType0 arg0, ArgType1 arg1, ArgType2 arg2, ArgType3 arg3, ArgType4 arg4, ArgType5 arg5, ArgType6 arg6, ArgType7 arg7, ArgType8 arg8, ArgType9 arg9, ArgType10 arg10) { \ + cc::event::broadcast(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10); \ + } \ + }; + +#define DECLARE_BUS_EVENT_ARG12(BusEventClass, EventBusClass, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9, ArgType10, ArgType11) \ + struct BusEventClass final : cc::event::BusEventTrait { \ + using bus_type = EventBusName_(EventBusClass); \ + using Listener = cc::event::Listener; \ + constexpr static const char *BUS_NAME = EventBusName_(EventBusClass)::BUS_NAME; \ + constexpr static const char *HANDLE_CLASS = #BusEventClass; \ + constexpr static size_t TypeID() { \ + return cc::event::intl::hash(#BusEventClass); \ + } \ + static inline void broadcast(ArgType0 arg0, ArgType1 arg1, ArgType2 arg2, ArgType3 arg3, ArgType4 arg4, ArgType5 arg5, ArgType6 arg6, ArgType7 arg7, ArgType8 arg8, ArgType9 arg9, ArgType10 arg10, ArgType11 arg11) { \ + cc::event::broadcast(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11); \ + } \ + }; + +#define DECLARE_BUS_EVENT_ARG13(BusEventClass, EventBusClass, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9, ArgType10, ArgType11, ArgType12) \ + struct BusEventClass final : cc::event::BusEventTrait { \ + using bus_type = EventBusName_(EventBusClass); \ + using Listener = cc::event::Listener; \ + constexpr static const char *BUS_NAME = EventBusName_(EventBusClass)::BUS_NAME; \ + constexpr static const char *HANDLE_CLASS = #BusEventClass; \ + constexpr static size_t TypeID() { \ + return cc::event::intl::hash(#BusEventClass); \ + } \ + static inline void broadcast(ArgType0 arg0, ArgType1 arg1, ArgType2 arg2, ArgType3 arg3, ArgType4 arg4, ArgType5 arg5, ArgType6 arg6, ArgType7 arg7, ArgType8 arg8, ArgType9 arg9, ArgType10 arg10, ArgType11 arg11, ArgType12 arg12) { \ + cc::event::broadcast(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12); \ + } \ + }; + +#define DECLARE_BUS_EVENT_ARG14(BusEventClass, EventBusClass, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9, ArgType10, ArgType11, ArgType12, ArgType13) \ + struct BusEventClass final : cc::event::BusEventTrait { \ + using bus_type = EventBusName_(EventBusClass); \ + using Listener = cc::event::Listener; \ + constexpr static const char *BUS_NAME = EventBusName_(EventBusClass)::BUS_NAME; \ + constexpr static const char *HANDLE_CLASS = #BusEventClass; \ + constexpr static size_t TypeID() { \ + return cc::event::intl::hash(#BusEventClass); \ + } \ + static inline void broadcast(ArgType0 arg0, ArgType1 arg1, ArgType2 arg2, ArgType3 arg3, ArgType4 arg4, ArgType5 arg5, ArgType6 arg6, ArgType7 arg7, ArgType8 arg8, ArgType9 arg9, ArgType10 arg10, ArgType11 arg11, ArgType12 arg12, ArgType13 arg13) { \ + cc::event::broadcast(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13); \ + } \ + }; + +#define DECLARE_BUS_EVENT_ARG15(BusEventClass, EventBusClass, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9, ArgType10, ArgType11, ArgType12, ArgType13, ArgType14) \ + struct BusEventClass final : cc::event::BusEventTrait { \ + using bus_type = EventBusName_(EventBusClass); \ + using Listener = cc::event::Listener; \ + constexpr static const char *BUS_NAME = EventBusName_(EventBusClass)::BUS_NAME; \ + constexpr static const char *HANDLE_CLASS = #BusEventClass; \ + constexpr static size_t TypeID() { \ + return cc::event::intl::hash(#BusEventClass); \ + } \ + static inline void broadcast(ArgType0 arg0, ArgType1 arg1, ArgType2 arg2, ArgType3 arg3, ArgType4 arg4, ArgType5 arg5, ArgType6 arg6, ArgType7 arg7, ArgType8 arg8, ArgType9 arg9, ArgType10 arg10, ArgType11 arg11, ArgType12 arg12, ArgType13 arg13, ArgType14 arg14) { \ + cc::event::broadcast(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14); \ + } \ + }; + +#define DECLARE_BUS_EVENT_ARG16(BusEventClass, EventBusClass, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9, ArgType10, ArgType11, ArgType12, ArgType13, ArgType14, ArgType15) \ + struct BusEventClass final : cc::event::BusEventTrait { \ + using bus_type = EventBusName_(EventBusClass); \ + using Listener = cc::event::Listener; \ + constexpr static const char *BUS_NAME = EventBusName_(EventBusClass)::BUS_NAME; \ + constexpr static const char *HANDLE_CLASS = #BusEventClass; \ + constexpr static size_t TypeID() { \ + return cc::event::intl::hash(#BusEventClass); \ + } \ + static inline void broadcast(ArgType0 arg0, ArgType1 arg1, ArgType2 arg2, ArgType3 arg3, ArgType4 arg4, ArgType5 arg5, ArgType6 arg6, ArgType7 arg7, ArgType8 arg8, ArgType9 arg9, ArgType10 arg10, ArgType11 arg11, ArgType12 arg12, ArgType13 arg13, ArgType14 arg14, ArgType15 arg15) { \ + cc::event::broadcast(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15); \ + } \ + }; + +#define DECLARE_BUS_EVENT_ARG17(BusEventClass, EventBusClass, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9, ArgType10, ArgType11, ArgType12, ArgType13, ArgType14, ArgType15, ArgType16) \ + struct BusEventClass final : cc::event::BusEventTrait { \ + using bus_type = EventBusName_(EventBusClass); \ + using Listener = cc::event::Listener; \ + constexpr static const char *BUS_NAME = EventBusName_(EventBusClass)::BUS_NAME; \ + constexpr static const char *HANDLE_CLASS = #BusEventClass; \ + constexpr static size_t TypeID() { \ + return cc::event::intl::hash(#BusEventClass); \ + } \ + static inline void broadcast(ArgType0 arg0, ArgType1 arg1, ArgType2 arg2, ArgType3 arg3, ArgType4 arg4, ArgType5 arg5, ArgType6 arg6, ArgType7 arg7, ArgType8 arg8, ArgType9 arg9, ArgType10 arg10, ArgType11 arg11, ArgType12 arg12, ArgType13 arg13, ArgType14 arg14, ArgType15 arg15, ArgType16 arg16) { \ + cc::event::broadcast(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16); \ + } \ + }; + +#define DECLARE_BUS_EVENT_ARG18(BusEventClass, EventBusClass, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9, ArgType10, ArgType11, ArgType12, ArgType13, ArgType14, ArgType15, ArgType16, ArgType17) \ + struct BusEventClass final : cc::event::BusEventTrait { \ + using bus_type = EventBusName_(EventBusClass); \ + using Listener = cc::event::Listener; \ + constexpr static const char *BUS_NAME = EventBusName_(EventBusClass)::BUS_NAME; \ + constexpr static const char *HANDLE_CLASS = #BusEventClass; \ + constexpr static size_t TypeID() { \ + return cc::event::intl::hash(#BusEventClass); \ + } \ + static inline void broadcast(ArgType0 arg0, ArgType1 arg1, ArgType2 arg2, ArgType3 arg3, ArgType4 arg4, ArgType5 arg5, ArgType6 arg6, ArgType7 arg7, ArgType8 arg8, ArgType9 arg9, ArgType10 arg10, ArgType11 arg11, ArgType12 arg12, ArgType13 arg13, ArgType14 arg14, ArgType15 arg15, ArgType16 arg16, ArgType17 arg17) { \ + cc::event::broadcast(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17); \ + } \ + }; + +#define DECLARE_BUS_EVENT_ARG19(BusEventClass, EventBusClass, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9, ArgType10, ArgType11, ArgType12, ArgType13, ArgType14, ArgType15, ArgType16, ArgType17, ArgType18) \ + struct BusEventClass final : cc::event::BusEventTrait { \ + using bus_type = EventBusName_(EventBusClass); \ + using Listener = cc::event::Listener; \ + constexpr static const char *BUS_NAME = EventBusName_(EventBusClass)::BUS_NAME; \ + constexpr static const char *HANDLE_CLASS = #BusEventClass; \ + constexpr static size_t TypeID() { \ + return cc::event::intl::hash(#BusEventClass); \ + } \ + static inline void broadcast(ArgType0 arg0, ArgType1 arg1, ArgType2 arg2, ArgType3 arg3, ArgType4 arg4, ArgType5 arg5, ArgType6 arg6, ArgType7 arg7, ArgType8 arg8, ArgType9 arg9, ArgType10 arg10, ArgType11 arg11, ArgType12 arg12, ArgType13 arg13, ArgType14 arg14, ArgType15 arg15, ArgType16 arg16, ArgType17 arg17, ArgType18 arg18) { \ + cc::event::broadcast(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18); \ + } \ + }; + +#define DECLARE_BUS_EVENT_ARG20(BusEventClass, EventBusClass, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9, ArgType10, ArgType11, ArgType12, ArgType13, ArgType14, ArgType15, ArgType16, ArgType17, ArgType18, ArgType19) \ + struct BusEventClass final : cc::event::BusEventTrait { \ + using bus_type = EventBusName_(EventBusClass); \ + using Listener = cc::event::Listener; \ + constexpr static const char *BUS_NAME = EventBusName_(EventBusClass)::BUS_NAME; \ + constexpr static const char *HANDLE_CLASS = #BusEventClass; \ + constexpr static size_t TypeID() { \ + return cc::event::intl::hash(#BusEventClass); \ + } \ + static inline void broadcast(ArgType0 arg0, ArgType1 arg1, ArgType2 arg2, ArgType3 arg3, ArgType4 arg4, ArgType5 arg5, ArgType6 arg6, ArgType7 arg7, ArgType8 arg8, ArgType9 arg9, ArgType10 arg10, ArgType11 arg11, ArgType12 arg12, ArgType13 arg13, ArgType14 arg14, ArgType15 arg15, ArgType16 arg16, ArgType17 arg17, ArgType18 arg18, ArgType19 arg19) { \ + cc::event::broadcast(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19); \ + } \ + }; diff --git a/native/cocos/core/event/intl/EventIntl.h b/native/cocos/core/event/intl/EventIntl.h new file mode 100644 index 00000000000..ee8720eae60 --- /dev/null +++ b/native/cocos/core/event/intl/EventIntl.h @@ -0,0 +1,470 @@ +/**************************************************************************** + Copyright (c) 2022 Xiamen Yaji Software Co., Ltd. + + http://www.cocos.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated engine source code (the "Software"), a limited, + worldwide, royalty-free, non-assignable, revocable and non-exclusive license + to use Cocos Creator solely to develop games on your target platforms. You shall + not use Cocos Creator software for developing other software or tools that's + used for developing games. You are not granted to publish, distribute, + sublicense, and/or sell copies of Cocos Creator. + + The software or tools in this License Agreement are licensed, not sold. + Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + ****************************************************************************/ +#pragma once + +#include +#include +#include +#include +namespace cc { +namespace event { +namespace intl { +template +struct hash_calc { // NOLINT + static constexpr size_t apply(const char (&str)[N]) { + return (hash_calc::apply(str) ^ str[I]) * 16777619U; + }; +}; + +template +struct hash_calc { // NOLINT + static constexpr size_t apply(const char (&/*used*/)[N]) { + return 2166136261U; + }; +}; + +template +constexpr size_t hash(const char (&str)[N]) { + return hash_calc::apply(str); +} + +template +struct HeadType; + +template +struct HeadType { + using head = Head; + using remain = HeadType; +}; + +template +struct HeadType { + using head = Head; + using remain = HeadType<>; +}; + +template <> +struct HeadType<> { + using head = void; + using remain = HeadType<>; +}; + +template +constexpr bool validateParameters() { + return true; +} + +template +constexpr bool validateParameters(Head && /*unused*/) { + using element_t = std::remove_reference_t>; + using head = std::remove_reference_t; + constexpr bool assignable = std::is_assignable_v || std::is_convertible_v; + constexpr bool ret = assignable; + static_assert(ret, "Parameter type incorrect"); + return ret; +} + +template +constexpr bool validateParameters(Head &&head, ARGS &&...remain) { + return validateParameters(std::forward(head)) && validateParameters(std::forward(remain)...); +} + +template +struct TupleExtractor { + using func_type = void(); +}; + +template +struct TupleExtractor> { + using func_type = void(ARGS...); + using std_func_type = std::function; +}; + +template +struct FunctionTrait : public FunctionTrait { + constexpr static bool IS_LAMBDA = true; +}; + +template +struct FunctionTrait { + constexpr static bool IS_LAMBDA = false; + using function_type = R (C::*)(ARGS...); +}; + +template +struct FunctionTrait { + constexpr static bool IS_LAMBDA = false; + using function_type = R (C::*)(ARGS...) const; +}; + +template +struct FunctionTrait { + using function_type = R (*)(ARGS...); + constexpr static bool IS_LAMBDA = false; +}; + +template +struct FunctionTrait { + using function_type = R(ARGS...); + constexpr static bool IS_LAMBDA = false; +}; +template +struct FunctionTrait> { + using function_type = std::function; + constexpr static bool IS_LAMBDA = false; +}; + +template +struct RemoveClass { + using type = T; +}; + +template +struct RemoveClass { + using type = std::function; +}; +template +struct RemoveClass { + using type = std::function; +}; + +template +using function_type_t = typename FunctionTrait::function_type; + +template +using lambda_without_class_t = typename RemoveClass>::type; + +template +inline auto convertLambda(F &&lambda) { + if constexpr (FunctionTrait::IS_LAMBDA) { + return static_cast>(std::forward(lambda)); + } else { + return static_cast>(std::forward(lambda)); + } +} +template +struct TgtEvtFnTrait; + +template +struct TgtEvtFnTrait { + using param0_type = C; + using src_func_type = R(C *, ARGS...); + constexpr static bool IS_MEMBER_FUNC = false; + template + static constexpr bool accept() { + if constexpr (sizeof...(ARGS) == 0) { + using event_type = typename TgtEvent::event_type; + return std::is_same_v; + } else { + return false; + } + } + template + static auto wrap(src_func_type func) { + using event_type = typename TgtEvent::event_type; + using persist_function_type = typename TgtEvent::persist_function_type; + using emitter_type = typename TgtEvent::emitter_type; + persist_function_type ret; + if constexpr (accept()) { + ret = [&func](emitter_type * /*self*/, event_type *event) { + func(event); + }; + } else { + static_assert(std::is_same_v, "mismatch emitter type"); + ret = [func](emitter_type *self, event_type *event) { + return std::apply([self, func](auto &&...args) { func(self, args...); }, event->args); + }; + } + return ret; + } +}; +template +struct TgtEvtFnTrait { + using param0_type = C; + using src_func_type = R(const C *, ARGS...); + constexpr static bool IS_MEMBER_FUNC = false; + template + static constexpr bool accept() { + if constexpr (sizeof...(ARGS) == 0) { + using event_type = typename TgtEvent::event_type; + return std::is_same_v; + } else { + return false; + } + } + template + static auto wrap(src_func_type func) { + using event_type = typename TgtEvent::event_type; + using emitter_type = typename TgtEvent::emitter_type; + using persist_function_type = typename TgtEvent::persist_function_type; + persist_function_type ret; + if constexpr (accept()) { + ret = [func](emitter_type * /*self*/, event_type *event) { + func(event); + }; + } else { + static_assert(std::is_same_v, "mismatch emitter type"); + ret = [func](emitter_type *self, event_type *event) { return std::apply([self, func](auto &&...args) { func(self, args...); }, event->args); }; + } + return ret; + } +}; +template +struct TgtEvtFnTrait { + using param0_type = C; + using src_func_type = R (*)(C *, ARGS...); + constexpr static bool IS_MEMBER_FUNC = false; + template + static constexpr bool accept() { + if constexpr (sizeof...(ARGS) == 0) { + using event_type = typename TgtEvent::event_type; + return std::is_same_v; + } else { + return false; + } + } + template + static auto wrap(src_func_type func) { + using event_type = typename TgtEvent::event_type; + using persist_function_type = typename TgtEvent::persist_function_type; + using emitter_type = typename TgtEvent::emitter_type; + persist_function_type ret; + if constexpr (accept()) { + auto ret2 = [func](emitter_type * /*self*/, event_type *event) { + func(event); + }; + ret = ret2; + } else { + static_assert(std::is_same_v, "mismatch emitter type"); + ret = [func](emitter_type *self, event_type *event) { + return std::apply([self, func](auto &&...args) { func(self, args...); }, event->args); + }; + } + return ret; + } +}; +template +struct TgtEvtFnTrait { + using src_func_type = R (*)(const C *, ARGS...); + using param0_type = C; + constexpr static bool IS_MEMBER_FUNC = false; + template + static constexpr bool accept() { + if constexpr (sizeof...(ARGS) == 0) { + using event_type = typename TgtEvent::event_type; + return std::is_same_v; + } else { + return false; + } + } + template + static auto wrap(src_func_type func) { + using event_type = typename TgtEvent::event_type; + using emitter_type = typename TgtEvent::emitter_type; + using persist_function_type = typename TgtEvent::persist_function_type; + persist_function_type ret; + if constexpr (accept()) { + ret = [&func](emitter_type * /*self*/, event_type *event) { + func(event); + }; + return ret; + } else { + static_assert(std::is_same_v, "mismatch emitter type"); + ret = [func](emitter_type *self, event_type *event) { + return std::apply([self, func](auto &&...args) { func(self, args...); }, event->args); + }; + } + return ret; + } +}; +template +struct TgtEvtFnTrait> { + using src_func_type = std::function; + using param0_type = C; + constexpr static bool IS_MEMBER_FUNC = false; + template + static constexpr bool accept() { + if constexpr (sizeof...(ARGS) == 0) { + using event_type = typename TgtEvent::event_type; + return std::is_same_v; + } else { + return false; + } + } + template + static auto wrap(src_func_type func) { + using event_type = typename TgtEvent::event_type; + using emitter_type = typename TgtEvent::emitter_type; + using persist_function_type = typename TgtEvent::persist_function_type; + persist_function_type ret; + if constexpr (accept()) { + ret = [&func](emitter_type * /*self*/, event_type *event) { + func(event); + }; + } else { + static_assert(std::is_same_v, "mismatch emitter type"); + ret = [func](emitter_type *self, event_type *event) { + return std::apply([self, func](auto &&...args) { func(self, args...); }, event->args); + }; + } + return ret; + } +}; +template +struct TgtEvtFnTrait> { + using param0_type = C; + using src_func_type = std::function; + constexpr static bool IS_MEMBER_FUNC = false; + template + static constexpr bool accept() { + if constexpr (sizeof...(ARGS) == 0) { + using event_type = typename TgtEvent::event_type; + return std::is_same_v; + } else { + return false; + } + } + template + static auto wrap(src_func_type func) { + using event_type = typename TgtEvent::event_type; + using emitter_type = typename TgtEvent::emitter_type; + using persist_function_type = typename TgtEvent::persist_function_type; + persist_function_type ret; + if constexpr (accept()) { + ret = [&func](emitter_type * /*self*/, event_type *event) { + func(event); + }; + } else { + static_assert(std::is_same_v, "mismatch emitter type"); + ret = [func](emitter_type *self, event_type *event) { + return std::apply([self, func](auto &&...args) { func(self, args...); }, event->args); + }; + } + return ret; + } +}; +template +struct TgtEvtFnTrait { + using src_func_type = R (C::*)(ARGS...); + using context_type = C; + using param0_type = typename intl::HeadType::head; + constexpr static bool IS_MEMBER_FUNC = true; + template + static constexpr bool accept() { + if constexpr (sizeof...(ARGS) == 1) { + using event_type = typename TgtEvent::event_type; + return std::is_same_v; + } else { + return false; + } + } + + template + static auto wrap(src_func_type func) { + using event_type = typename TgtEvent::event_type; + using emitter_type = typename TgtEvent::emitter_type; + using persist_function_type = typename TgtEvent::persist_function_type; + persist_function_type ret; + static_assert(std::is_same_v, "mismatch emitter type"); + if constexpr (accept()) { + ret = [&func](emitter_type *self, event_type *event) { + (self->*func)(event); + }; + } else { + ret = [func](emitter_type *self, event_type *event) { + return std::apply([&self, func](auto &&...args) { (self->*func)(args...); }, event->args); + }; + } + return ret; + } + template + static auto wrapWithContext(src_func_type func, context_type *ctx) { + using emitter_type = typename TgtEvent::emitter_type; + using event_type = typename TgtEvent::event_type; + using persist_function_type = typename TgtEvent::persist_function_type; + persist_function_type ret; + if constexpr (accept()) { + ret = [func, ctx](emitter_type * /*self*/, event_type *event) { + (ctx->*func)(event); + }; + } else { + ret = [func, ctx](emitter_type * /*self*/, event_type *event) { + return std::apply([ctx, func](auto... args) { (ctx->*func)(args...); }, event->args); + }; + } + return ret; + } +}; +template +struct TgtEvtFnTrait { + using src_func_type = R (C::*)(ARGS...) const; + using context_type = C; + using param0_type = typename intl::HeadType::head; + constexpr static bool IS_MEMBER_FUNC = true; + + template + static constexpr bool accept() { + if constexpr (sizeof...(ARGS) == 1) { + using event_type = typename TgtEvent::event_type; + return std::is_same_v; + } else { + return false; + } + } + + template + static auto wrap(src_func_type func) { + using event_type = typename TgtEvent::event_type; + using persist_function_type = typename TgtEvent::persist_function_type; + using emitter_type = typename TgtEvent::emitter_type; + persist_function_type ret; + static_assert(std::is_same_v, "mismatch emitter type"); + if constexpr (accept()) { + ret = [&func](context_type *self, event_type *event) { + (self->*func)(event); + }; + } else { + ret = [&func](context_type *self, event_type *event) { + return std::apply([self, func](auto &&...args) { (self->*func)(args...); }, event->args); + }; + } + return ret; + } + + template + static auto wrapWithContext(src_func_type func, context_type *ctx) { + using emitter_type = typename TgtEvent::emitter_type; + using event_type = typename TgtEvent::event_type; + using persist_function_type = typename TgtEvent::persist_function_type; + persist_function_type ret = [func, ctx](emitter_type * /*self*/, event_type *event) { + return std::apply([ctx, func](auto &&...args) { (ctx->*func)(args...); }, event->args); + }; + return ret; + } +}; + +} // namespace intl +} // namespace event +} // namespace cc \ No newline at end of file diff --git a/native/cocos/core/event/intl/EventTargetMacros.h b/native/cocos/core/event/intl/EventTargetMacros.h new file mode 100644 index 00000000000..610ce306394 --- /dev/null +++ b/native/cocos/core/event/intl/EventTargetMacros.h @@ -0,0 +1,64 @@ +// generated code + +#define TARGET_EVENT_ARG1(EventType, ArgType0) \ + _DECLARE_TARGET_EVENT_INTER(EventType, ArgType0) + +#define TARGET_EVENT_ARG2(EventType, ArgType0, ArgType1) \ + _DECLARE_TARGET_EVENT_INTER(EventType, ArgType0, ArgType1) + +#define TARGET_EVENT_ARG3(EventType, ArgType0, ArgType1, ArgType2) \ + _DECLARE_TARGET_EVENT_INTER(EventType, ArgType0, ArgType1, ArgType2) + +#define TARGET_EVENT_ARG4(EventType, ArgType0, ArgType1, ArgType2, ArgType3) \ + _DECLARE_TARGET_EVENT_INTER(EventType, ArgType0, ArgType1, ArgType2, ArgType3) + +#define TARGET_EVENT_ARG5(EventType, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4) \ + _DECLARE_TARGET_EVENT_INTER(EventType, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4) + +#define TARGET_EVENT_ARG6(EventType, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5) \ + _DECLARE_TARGET_EVENT_INTER(EventType, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5) + +#define TARGET_EVENT_ARG7(EventType, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6) \ + _DECLARE_TARGET_EVENT_INTER(EventType, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6) + +#define TARGET_EVENT_ARG8(EventType, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7) \ + _DECLARE_TARGET_EVENT_INTER(EventType, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7) + +#define TARGET_EVENT_ARG9(EventType, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8) \ + _DECLARE_TARGET_EVENT_INTER(EventType, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8) + +#define TARGET_EVENT_ARG10(EventType, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9) \ + _DECLARE_TARGET_EVENT_INTER(EventType, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9) + +#define TARGET_EVENT_ARG11(EventType, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9, ArgType10) \ + _DECLARE_TARGET_EVENT_INTER(EventType, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9, ArgType10) + +#define TARGET_EVENT_ARG12(EventType, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9, ArgType10, ArgType11) \ + _DECLARE_TARGET_EVENT_INTER(EventType, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9, ArgType10, ArgType11) + +#define TARGET_EVENT_ARG13(EventType, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9, ArgType10, ArgType11, ArgType12) \ + _DECLARE_TARGET_EVENT_INTER(EventType, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9, ArgType10, ArgType11, ArgType12) + +#define TARGET_EVENT_ARG14(EventType, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9, ArgType10, ArgType11, ArgType12, ArgType13) \ + _DECLARE_TARGET_EVENT_INTER(EventType, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9, ArgType10, ArgType11, ArgType12, ArgType13) + +#define TARGET_EVENT_ARG15(EventType, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9, ArgType10, ArgType11, ArgType12, ArgType13, ArgType14) \ + _DECLARE_TARGET_EVENT_INTER(EventType, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9, ArgType10, ArgType11, ArgType12, ArgType13, ArgType14) + +#define TARGET_EVENT_ARG16(EventType, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9, ArgType10, ArgType11, ArgType12, ArgType13, ArgType14, ArgType15) \ + _DECLARE_TARGET_EVENT_INTER(EventType, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9, ArgType10, ArgType11, ArgType12, ArgType13, ArgType14, ArgType15) + +#define TARGET_EVENT_ARG17(EventType, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9, ArgType10, ArgType11, ArgType12, ArgType13, ArgType14, ArgType15, ArgType16) \ + _DECLARE_TARGET_EVENT_INTER(EventType, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9, ArgType10, ArgType11, ArgType12, ArgType13, ArgType14, ArgType15, ArgType16) + +#define TARGET_EVENT_ARG18(EventType, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9, ArgType10, ArgType11, ArgType12, ArgType13, ArgType14, ArgType15, ArgType16, ArgType17) \ + _DECLARE_TARGET_EVENT_INTER(EventType, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9, ArgType10, ArgType11, ArgType12, ArgType13, ArgType14, ArgType15, ArgType16, ArgType17) + +#define TARGET_EVENT_ARG19(EventType, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9, ArgType10, ArgType11, ArgType12, ArgType13, ArgType14, ArgType15, ArgType16, ArgType17, ArgType18) \ + _DECLARE_TARGET_EVENT_INTER(EventType, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9, ArgType10, ArgType11, ArgType12, ArgType13, ArgType14, ArgType15, ArgType16, ArgType17, ArgType18) + +#define TARGET_EVENT_ARG20(EventType, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9, ArgType10, ArgType11, ArgType12, ArgType13, ArgType14, ArgType15, ArgType16, ArgType17, ArgType18, ArgType19) \ + _DECLARE_TARGET_EVENT_INTER(EventType, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9, ArgType10, ArgType11, ArgType12, ArgType13, ArgType14, ArgType15, ArgType16, ArgType17, ArgType18, ArgType19) + +#define TARGET_EVENT_ARG21(EventType, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9, ArgType10, ArgType11, ArgType12, ArgType13, ArgType14, ArgType15, ArgType16, ArgType17, ArgType18, ArgType19, ArgType20) \ + _DECLARE_TARGET_EVENT_INTER(EventType, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9, ArgType10, ArgType11, ArgType12, ArgType13, ArgType14, ArgType15, ArgType16, ArgType17, ArgType18, ArgType19, ArgType20) diff --git a/native/cocos/core/event/intl/List.h b/native/cocos/core/event/intl/List.h new file mode 100644 index 00000000000..58f0f8afb57 --- /dev/null +++ b/native/cocos/core/event/intl/List.h @@ -0,0 +1,106 @@ +/**************************************************************************** + Copyright (c) 2022 Xiamen Yaji Software Co., Ltd. + + http://www.cocos.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated engine source code (the "Software"), a limited, + worldwide, royalty-free, non-assignable, revocable and non-exclusive license + to use Cocos Creator solely to develop games on your target platforms. You shall + not use Cocos Creator software for developing other software or tools that's + used for developing games. You are not granted to publish, distribute, + sublicense, and/or sell copies of Cocos Creator. + + The software or tools in this License Agreement are licensed, not sold. + Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + ****************************************************************************/ + #pragma once + +#include "base/Macros.h" +namespace cc { +namespace event { +namespace intl { + +template +bool listAppend(ListNode **head, ListNode *newNode) { + if (newNode->next != nullptr || newNode->prev != nullptr) { + CC_ASSERT(false); + return false; + } + if (*head == nullptr) { + newNode->next = newNode; + newNode->prev = newNode; + *head = newNode; + } else { + auto *first = *head; + auto *last = (*head)->prev; + newNode->prev = last; + newNode->next = first; + first->prev = newNode; + last->next = newNode; + } + return true; +} + +template +bool detachFromList(ListNode **head, ListNode *node) { + if (*head == nullptr || node->prev == nullptr || node->next == nullptr) { + CC_ASSERT(false); + return false; + } + if (node->prev == node && node->next == node) { // the only node + CC_ASSERT(node == *head); // should be the first + *head = nullptr; + } else { + auto *nextNode = node->next; + auto *prevNode = node->prev; + nextNode->prev = prevNode; + prevNode->next = nextNode; + if (node == *head) { + *head = nextNode; + } + } + node->prev = nullptr; + node->next = nullptr; + return true; +} + +} // namespace intl +} // namespace event +} // namespace cc + +#define EVENT_LIST_LOOP_BEGIN(tempVar, list) \ + if (list) { \ + auto *tempVar = list; \ + do { \ + auto *nextCopy = tempVar->next; + +#define EVENT_LIST_LOOP_END(tempVar, list) \ + tempVar = nextCopy; \ + } \ + while (tempVar != list) \ + ; \ + } + +#define EVENT_LIST_LOOP_REV_BEGIN(tempVar, list) \ + if (list) { \ + auto *tempVar = list->prev; \ + bool isLastListNode = false; \ + do { \ + auto *nextCopy = tempVar->prev; \ + isLastListNode = tempVar == list; + +#define EVENT_LIST_LOOP_REV_END(tempVar, list) \ + tempVar = nextCopy; \ + } \ + while (!isLastListNode) \ + ; \ + } diff --git a/native/cocos/core/scene-graph/Node.cpp b/native/cocos/core/scene-graph/Node.cpp index 5cde1129fd9..1859f4ccf8e 100644 --- a/native/cocos/core/scene-graph/Node.cpp +++ b/native/cocos/core/scene-graph/Node.cpp @@ -62,11 +62,10 @@ Node::Node(const ccstd::string &name) { } else { _name = name; } - _eventProcessor = ccnew NodeEventProcessor(this); + // _eventProcessor = ccnew NodeEventProcessor(this); } Node::~Node() { - CC_SAFE_DELETE(_eventProcessor); if (!_children.empty()) { // Reset children's _parent to nullptr to avoid dangerous pointer for (const auto &child : _children) { @@ -78,7 +77,7 @@ Node::~Node() { void Node::onBatchCreated(bool dontChildPrefab) { // onBatchCreated was implemented in TS, so code should never go here. CC_ASSERT(false); - emit(EventTypesToJS::NODE_ON_BATCH_CREATED, dontChildPrefab); + emit(dontChildPrefab); } Node *Node::instantiate(Node *cloned, bool isSyncedNode) { @@ -112,7 +111,7 @@ void Node::onHierarchyChangedBase(Node *oldParent) { // NOLINT(misc-unused-param Node *newParent = _parent; auto *scene = dynamic_cast(newParent); if (isPersistNode() && scene == nullptr) { - emit(EventTypesToJS::NODE_REMOVE_PERSIST_ROOT_NODE); + emit(); #if CC_EDITOR debug::warnID(1623); #endif @@ -135,62 +134,7 @@ void Node::onHierarchyChangedBase(Node *oldParent) { // NOLINT(misc-unused-param bool shouldActiveNow = isActive() && !!(newParent && newParent->isActiveInHierarchy()); if (isActiveInHierarchy() != shouldActiveNow) { // Director::getInstance()->getNodeActivator()->activateNode(this, shouldActiveNow); // TODO(xwx): use TS temporarily - emit(EventTypesToJS::NODE_ACTIVE_NODE, shouldActiveNow); - } -} - -void Node::off(const CallbacksInvoker::KeyType &type, bool useCapture) { - _eventProcessor->offAll(type, useCapture); - bool hasListeners = _eventProcessor->hasEventListener(type); - if (!hasListeners) { - if (type == NodeEventType::TRANSFORM_CHANGED) { - _eventMask &= ~TRANSFORM_ON; - } - } -} - -void Node::off(const CallbacksInvoker::KeyType &type, const CallbackID &cbID, bool useCapture) { - _eventProcessor->off(type, cbID, useCapture); - bool hasListeners = _eventProcessor->hasEventListener(type); - if (!hasListeners) { - if (type == NodeEventType::TRANSFORM_CHANGED) { - _eventMask &= ~TRANSFORM_ON; - } - } -} - -void Node::off(const CallbacksInvoker::KeyType &type, void *target, bool useCapture) { - _eventProcessor->off(type, target, useCapture); - bool hasListeners = _eventProcessor->hasEventListener(type); - if (!hasListeners) { - if (type == NodeEventType::TRANSFORM_CHANGED) { - _eventMask &= ~TRANSFORM_ON; - } - } -} - -//void Node::dispatchEvent(event::Event *eve) { -// _eventProcessor->dispatchEvent(eve); -//} - -bool Node::hasEventListener(const CallbacksInvoker::KeyType &type) const { - return _eventProcessor->hasEventListener(type); -} - -bool Node::hasEventListener(const CallbacksInvoker::KeyType &type, const CallbackID &cbID) const { - return _eventProcessor->hasEventListener(type, cbID); -} -bool Node::hasEventListener(const CallbacksInvoker::KeyType &type, void *target) const { - return _eventProcessor->hasEventListener(type, target); -} -bool Node::hasEventListener(const CallbacksInvoker::KeyType &type, void *target, const CallbackID &cbID) const { - return _eventProcessor->hasEventListener(type, target, cbID); -} - -void Node::targetOff(const CallbacksInvoker::KeyType &type) { - _eventProcessor->targetOff(type); - if ((_eventMask & TRANSFORM_ON) && !_eventProcessor->hasEventListener(NodeEventType::TRANSFORM_CHANGED)) { - _eventMask &= ~TRANSFORM_ON; + emit(shouldActiveNow); } } @@ -203,7 +147,7 @@ void Node::setActive(bool isActive) { bool couldActiveInScene = parent->isActiveInHierarchy(); if (couldActiveInScene) { // Director::getInstance()->getNodeActivator()->activateNode(this, isActive); // TODO(xwx): use TS temporarily - emit(EventTypesToJS::NODE_ACTIVE_NODE, isActive); + emit(isActive); } } } @@ -228,7 +172,7 @@ void Node::setParent(Node *parent, bool isKeepWorld /* = false */) { _parent = newParent; _siblingIndex = 0; onSetParent(oldParent, isKeepWorld); - emit(NodeEventType::PARENT_CHANGED, oldParent); + emit(oldParent); if (oldParent) { if (!(oldParent->_objFlags & Flags::DESTROYING)) { index_t removeAt = getIdxOfChild(oldParent->_children, this); @@ -242,7 +186,7 @@ void Node::setParent(Node *parent, bool isKeepWorld /* = false */) { } oldParent->_children.erase(oldParent->_children.begin() + removeAt); oldParent->updateSiblingIndex(); - oldParent->emit(NodeEventType::CHILD_REMOVED, this); + oldParent->emit(this); } } if (newParent) { @@ -253,7 +197,7 @@ void Node::setParent(Node *parent, bool isKeepWorld /* = false */) { #endif newParent->_children.emplace_back(this); _siblingIndex = static_cast(newParent->_children.size() - 1); - newParent->emit(NodeEventType::CHILD_ADDED, this); + newParent->emit(this); } onHierarchyChanged(oldParent); } @@ -262,7 +206,7 @@ void Node::walk(const WalkCallback &preFunc) { walk(preFunc, nullptr); } -void Node::walk(const WalkCallback &preFunc, const WalkCallback &postFunc) { //NOLINT(misc-no-recursion) +void Node::walk(const WalkCallback &preFunc, const WalkCallback &postFunc) { // NOLINT(misc-no-recursion) if (preFunc) { preFunc(this); } @@ -278,23 +222,23 @@ void Node::walk(const WalkCallback &preFunc, const WalkCallback &postFunc) { //N } } -//Component *Node::addComponent(Component *comp) { -// comp->_node = this; // cjh TODO: shared_ptr -// _components.emplace_back(comp); +// Component *Node::addComponent(Component *comp) { +// comp->_node = this; // cjh TODO: shared_ptr +// _components.emplace_back(comp); // -// if (isActiveInHierarchy()) { -// NodeActivator::activateComp(comp); -// } +// if (isActiveInHierarchy()) { +// NodeActivator::activateComp(comp); +// } // -// return comp; -//} +// return comp; +// } // -//void Node::removeComponent(Component *comp) { -// auto iteComp = std::find(_components.begin(), _components.end(), comp); -// if (iteComp != _components.end()) { -// _components.erase(iteComp); -// } -//} +// void Node::removeComponent(Component *comp) { +// auto iteComp = std::find(_components.begin(), _components.end(), comp); +// if (iteComp != _components.end()) { +// _components.erase(iteComp); +// } +// } bool Node::onPreDestroyBase() { Flags destroyingFlag = Flags::DESTROYING; @@ -306,31 +250,31 @@ bool Node::onPreDestroyBase() { } #endif if (isPersistNode()) { - emit(EventTypesToJS::NODE_REMOVE_PERSIST_ROOT_NODE); + emit(); } if (!destroyByParent) { if (_parent) { - emit(NodeEventType::PARENT_CHANGED, this); + emit(this); index_t childIdx = getIdxOfChild(_parent->_children, this); if (childIdx != -1) { _parent->_children.erase(_parent->_children.begin() + childIdx); } _siblingIndex = 0; _parent->updateSiblingIndex(); - _parent->emit(NodeEventType::CHILD_REMOVED, this); + _parent->emit(this); } } - //NOTE: The following code is not needed now since we override Node._onPreDestroy in node.jsb.ts - // and the logic will be done in TS. - // emit(NodeEventType::NODE_DESTROYED, this); - // for (const auto &child : _children) { - // child->destroyImmediate(); - // } + // NOTE: The following code is not needed now since we override Node._onPreDestroy in node.jsb.ts + // and the logic will be done in TS. + // emit(NodeEventType::NODE_DESTROYED, this); + // for (const auto &child : _children) { + // child->destroyImmediate(); + // } // - // emit(EventTypesToJS::NODE_DESTROY_COMPONENTS); + // emit(EventTypesToJS::NODE_DESTROY_COMPONENTS); - _eventProcessor->destroy(); + offAll(); return destroyByParent; } @@ -356,7 +300,7 @@ void Node::updateScene() { return; } _scene = _parent->_scene; - emit(EventTypesToJS::NODE_SCENE_UPDATED, _scene); + emit(_scene); } /* static */ @@ -458,7 +402,7 @@ void Node::setPositionInternal(float x, float y, float z, bool calledFromJS) { invalidateChildren(TransformBit::POSITION); if (_eventMask & TRANSFORM_ON) { - emit(NodeEventType::TRANSFORM_CHANGED, TransformBit::POSITION); + emit(TransformBit::POSITION); } if (!calledFromJS) { @@ -473,7 +417,7 @@ void Node::setRotationInternal(float x, float y, float z, float w, bool calledFr invalidateChildren(TransformBit::ROTATION); if (_eventMask & TRANSFORM_ON) { - emit(NodeEventType::TRANSFORM_CHANGED, TransformBit::ROTATION); + emit(TransformBit::ROTATION); } if (!calledFromJS) { @@ -487,7 +431,7 @@ void Node::setRotationFromEuler(float x, float y, float z) { _eulerDirty = false; invalidateChildren(TransformBit::ROTATION); if (_eventMask & TRANSFORM_ON) { - emit(NodeEventType::TRANSFORM_CHANGED, TransformBit::ROTATION); + emit(TransformBit::ROTATION); } notifyLocalRotationUpdated(); @@ -498,19 +442,19 @@ void Node::setScaleInternal(float x, float y, float z, bool calledFromJS) { invalidateChildren(TransformBit::SCALE); if (_eventMask & TRANSFORM_ON) { - emit(NodeEventType::TRANSFORM_CHANGED, TransformBit::SCALE); + emit(TransformBit::SCALE); } if (!calledFromJS) { notifyLocalScaleUpdated(); } } -void Node::updateWorldTransform() { //NOLINT(misc-no-recursion) +void Node::updateWorldTransform() { // NOLINT(misc-no-recursion) uint32_t dirtyBits = 0; updateWorldTransformRecursive(dirtyBits); } -void Node::updateWorldTransformRecursive(uint32_t &dirtyBits) { //NOLINT(misc-no-recursion) +void Node::updateWorldTransformRecursive(uint32_t &dirtyBits) { // NOLINT(misc-no-recursion) const uint32_t currDirtyBits = getDirtyFlag(); if (!currDirtyBits) { return; @@ -561,7 +505,7 @@ void Node::updateWorldTransformRecursive(uint32_t &dirtyBits) { //NOLINT(misc-no setDirtyFlag(static_cast(TransformBit::NONE)); } -const Mat4 &Node::getWorldMatrix() const { //NOLINT(misc-no-recursion) +const Mat4 &Node::getWorldMatrix() const { // NOLINT(misc-no-recursion) const_cast(this)->updateWorldTransform(); return _worldMatrix; } @@ -580,14 +524,14 @@ Mat4 Node::getWorldRT() { return target; } -void Node::invalidateChildren(TransformBit dirtyBit) { //NOLINT(misc-no-recursion) +void Node::invalidateChildren(TransformBit dirtyBit) { // NOLINT(misc-no-recursion) auto curDirtyBit{static_cast(dirtyBit)}; const uint32_t hasChangedFlags = getChangedFlags(); const uint32_t dirtyFlags = getDirtyFlag(); if (isValid() && (dirtyFlags & hasChangedFlags & curDirtyBit) != curDirtyBit) { setDirtyFlag(dirtyFlags | curDirtyBit); setChangedFlags(hasChangedFlags | curDirtyBit); - emit(NodeEventType::ANCESTOR_TRANSFORM_CHANGED, dirtyBit); + emit(dirtyBit); for (Node *child : getChildren()) { child->invalidateChildren(dirtyBit | TransformBit::POSITION); @@ -610,7 +554,8 @@ void Node::setWorldPosition(float x, float y, float z) { invalidateChildren(TransformBit::POSITION); if (_eventMask & TRANSFORM_ON) { - emit(NodeEventType::TRANSFORM_CHANGED, TransformBit::POSITION); + emit(TransformBit::POSITION); + } } @@ -634,13 +579,13 @@ void Node::setWorldRotation(float x, float y, float z, float w) { invalidateChildren(TransformBit::ROTATION); if (_eventMask & TRANSFORM_ON) { - emit(NodeEventType::TRANSFORM_CHANGED, TransformBit::ROTATION); + emit(TransformBit::ROTATION); } notifyLocalRotationUpdated(); } -const Quaternion &Node::getWorldRotation() const { //NOLINT(misc-no-recursion) +const Quaternion &Node::getWorldRotation() const { // NOLINT(misc-no-recursion) const_cast(this)->updateWorldTransform(); return _worldRotation; } @@ -672,7 +617,7 @@ void Node::setWorldScale(float x, float y, float z) { invalidateChildren(TransformBit::SCALE); if (_eventMask & TRANSFORM_ON) { - emit(NodeEventType::TRANSFORM_CHANGED, TransformBit::SCALE); + emit(TransformBit::SCALE); } } @@ -695,7 +640,7 @@ void Node::setAngle(float val) { _eulerDirty = false; invalidateChildren(TransformBit::ROTATION); if (_eventMask & TRANSFORM_ON) { - emit(NodeEventType::TRANSFORM_CHANGED, TransformBit::ROTATION); + emit(TransformBit::ROTATION); } notifyLocalRotationUpdated(); @@ -747,7 +692,7 @@ void Node::rotate(const Quaternion &rot, NodeSpace ns /* = NodeSpace::LOCAL*/, b _eulerDirty = true; invalidateChildren(TransformBit::ROTATION); if (_eventMask & TRANSFORM_ON) { - emit(NodeEventType::TRANSFORM_CHANGED, TransformBit::ROTATION); + emit(TransformBit::ROTATION); } if (!calledFromJS) { @@ -764,13 +709,13 @@ void Node::lookAt(const Vec3 &pos, const Vec3 &up) { setWorldRotation(qTemp); } -Vec3 Node::inverseTransformPoint(const Vec3 &p) { //NOLINT(misc-no-recursion) +Vec3 Node::inverseTransformPoint(const Vec3 &p) { // NOLINT(misc-no-recursion) Vec3 out(p); inverseTransformPointRecursive(out); return out; } -void Node::inverseTransformPointRecursive(Vec3 &out) const { //NOLINT(misc-no-recursion) +void Node::inverseTransformPointRecursive(Vec3 &out) const { // NOLINT(misc-no-recursion) auto *parent = getParent(); if (!parent) { return; @@ -786,7 +731,7 @@ void Node::setMatrix(const Mat4 &val) { invalidateChildren(TransformBit::TRS); _eulerDirty = true; if (_eventMask & TRANSFORM_ON) { - emit(NodeEventType::TRANSFORM_CHANGED, TransformBit::TRS); + emit(TransformBit::TRS); } } @@ -802,7 +747,7 @@ void Node::setWorldRotationFromEuler(float x, float y, float z) { invalidateChildren(TransformBit::ROTATION); if (_eventMask & TRANSFORM_ON) { - emit(NodeEventType::TRANSFORM_CHANGED, TransformBit::ROTATION); + emit(TransformBit::ROTATION); } notifyLocalRotationUpdated(); @@ -831,7 +776,7 @@ void Node::setRTSInternal(Quaternion *rot, Vec3 *pos, Vec3 *scale, bool calledFr if (dirtyBit) { invalidateChildren(static_cast(dirtyBit)); if (_eventMask & TRANSFORM_ON) { - emit(NodeEventType::TRANSFORM_CHANGED, dirtyBit); + emit(static_cast(dirtyBit)); } } } @@ -885,7 +830,7 @@ void Node::translate(const Vec3 &trans, NodeSpace ns) { invalidateChildren(TransformBit::POSITION); if (_eventMask & TRANSFORM_ON) { - emit(NodeEventType::TRANSFORM_CHANGED, TransformBit::POSITION); + emit(TransformBit::POSITION); } } @@ -896,15 +841,14 @@ bool Node::onPreDestroy() { } void Node::onHierarchyChanged(Node *oldParent) { - emit(EventTypesToJS::NODE_REATTACH); - _eventProcessor->reattach(); + emit(); onHierarchyChangedBase(oldParent); } /* static */ -//Node *Node::find(const ccstd::string &path, Node *referenceNode /* = nullptr*/) { -// return cc::find(path, referenceNode); -//} +// Node *Node::find(const ccstd::string &path, Node *referenceNode /* = nullptr*/) { +// return cc::find(path, referenceNode); +// } // For deserialization // void Node::_setChild(index_t i, Node *child) { diff --git a/native/cocos/core/scene-graph/Node.h b/native/cocos/core/scene-graph/Node.h index dda15d5b454..58df086bbf6 100644 --- a/native/cocos/core/scene-graph/Node.h +++ b/native/cocos/core/scene-graph/Node.h @@ -31,12 +31,9 @@ //#include "core/components/Component.h" //#include "core/event/Event.h" #include "core/data/Object.h" -#include "core/event/EventTypesToJS.h" +#include "core/event/EventTarget.h" #include "core/scene-graph/Layers.h" #include "core/scene-graph/NodeEnum.h" -#include "core/scene-graph/NodeEvent.h" -#include "core/scene-graph/NodeEventProcessor.h" - #include "math/Mat3.h" #include "math/Mat4.h" #include "math/Quaternion.h" @@ -46,18 +43,57 @@ namespace cc { class Scene; -class NodeEventProcessor; - /** * Event types emitted by Node */ -using EventType = NodeEventType; /** * Bit masks for Node transformation parts */ using TransformDirtyBit = TransformBit; -class Node : public CCObject { +class Node : public CCObject, public event::EventTarget { + IMPL_EVENT_TARGET_WITH_PARENT(Node, getParent) + DECLARE_TARGET_EVENT_BEGIN(Node) + TARGET_EVENT_ARG0(TouchStart) + TARGET_EVENT_ARG0(TouchMove) + TARGET_EVENT_ARG0(TouchEnd) + TARGET_EVENT_ARG0(TouchCancel) + TARGET_EVENT_ARG0(MouseDown) + TARGET_EVENT_ARG0(MouseMove) + TARGET_EVENT_ARG0(MouseUp) + TARGET_EVENT_ARG0(MouseWheel) + TARGET_EVENT_ARG0(MouseEnter) + TARGET_EVENT_ARG0(MouseLeave) + TARGET_EVENT_ARG0(KeyDown) + TARGET_EVENT_ARG0(KeyUp) + TARGET_EVENT_ARG0(DeviceMotion) + TARGET_EVENT_ARG1(TransformChanged, TransformBit) + TARGET_EVENT_ARG0(SceneChangedForPersist) + TARGET_EVENT_ARG0(SizeChanged) + TARGET_EVENT_ARG0(AnchorChanged) + TARGET_EVENT_ARG0(ColorChanged) + TARGET_EVENT_ARG1(ChildAdded, Node *) + TARGET_EVENT_ARG1(ChildRemoved, Node *) + TARGET_EVENT_ARG1(ParentChanged, Node *) + TARGET_EVENT_ARG0(NodeDestroyed) + TARGET_EVENT_ARG1(LayerChanged, uint32_t) + TARGET_EVENT_ARG0(SiblingOrderChanged) + TARGET_EVENT_ARG0(ActiveInHierarchyChanged) + TARGET_EVENT_ARG0(MobilityChanged) + TARGET_EVENT_ARG1(AncestorTransformChanged, TransformBit) + TARGET_EVENT_ARG0(Reattach) + TARGET_EVENT_ARG0(RemovePersistRootNode) + TARGET_EVENT_ARG0(DestroyComponents) + TARGET_EVENT_ARG0(UITransformDirty) + TARGET_EVENT_ARG1(ActiveNode, bool) + TARGET_EVENT_ARG1(BatchCreated, bool) + TARGET_EVENT_ARG1(SceneUpdated, cc::Scene *) + TARGET_EVENT_ARG3(LocalPositionUpdated, float, float, float) + TARGET_EVENT_ARG4(LocalRotationUpdated, float, float, float, float) + TARGET_EVENT_ARG3(LocalScaleUpdated, float, float, float) + TARGET_EVENT_ARG10(LocalRTSUpdated, float, float, float, float, float, float, float, float, float, float) + TARGET_EVENT_ARG1(EditorAttached, bool) + DECLARE_TARGET_EVENT_END() public: class UserData : public RefCounted { public: @@ -110,97 +146,6 @@ class Node : public CCObject { void walk(const WalkCallback &preFunc); void walk(const WalkCallback &preFunc, const WalkCallback &postFunc); - //NOTE: swig could not parse template function in a class. - // It will trigger an error: cocos/core/scene-graph/Node.h:115: Error: Syntax error in input(3). - // Therefore, hide them in swig environment. -#ifndef SWIGCOCOS - template - void on(const CallbacksInvoker::KeyType &type, void (Target::*memberFn)(Args...), Target *target, bool useCapture = false); - - template - void on(const CallbacksInvoker::KeyType &type, std::function &&callback, CallbackID &cbID, bool useCapture = false); - - template - void on(const CallbacksInvoker::KeyType &type, std::function &&callback, Target *target, CallbackID &cbID, bool useCapture = false); - - template - std::enable_if_t::value, void> - on(const CallbacksInvoker::KeyType &type, LambdaType &&callback, Target *target, CallbackID &cbID, bool useCapture = false); - - template - std::enable_if_t::value, void> - on(const CallbacksInvoker::KeyType &type, LambdaType &&callback, CallbackID &cbID, bool useCapture = false); - - template - void on(const CallbacksInvoker::KeyType &type, std::function &&callback, bool useCapture = false); - - template - void on(const CallbacksInvoker::KeyType &type, std::function &&callback, Target *target, bool useCapture = false); - - template - std::enable_if_t::value, void> - on(const CallbacksInvoker::KeyType &type, LambdaType &&callback, Target *target, bool useCapture = false); - - template - std::enable_if_t::value, void> - on(const CallbacksInvoker::KeyType &type, LambdaType &&callback, bool useCapture = false); - - template - void once(const CallbacksInvoker::KeyType &type, void (Target::*memberFn)(Args...), Target *target, bool useCapture = false); - - template - void once(const CallbacksInvoker::KeyType &type, std::function &&callback, CallbackID &cbID, bool useCapture = false); - - template - void once(const CallbacksInvoker::KeyType &type, std::function &&callback, Target *target, CallbackID &cbID, bool useCapture = false); - - template - std::enable_if_t::value, void> - once(const CallbacksInvoker::KeyType &type, LambdaType &&callback, CallbackID &cbID, bool useCapture = false); - - template - std::enable_if_t::value, void> - once(const CallbacksInvoker::KeyType &type, LambdaType &&callback, Target *target, CallbackID &cbID, bool useCapture = false); - - template - void once(const CallbacksInvoker::KeyType &type, std::function &&callback, bool useCapture = false); - - template - void once(const CallbacksInvoker::KeyType &type, std::function &&callback, Target *target, bool useCapture = false); - - template - std::enable_if_t::value, void> - once(const CallbacksInvoker::KeyType &type, LambdaType &&callback, bool useCapture = false); - - template - std::enable_if_t::value, void> - once(const CallbacksInvoker::KeyType &type, LambdaType &&callback, Target *target, bool useCapture = false); - - void off(const CallbacksInvoker::KeyType &type, bool useCapture = false); - - void off(const CallbacksInvoker::KeyType &type, const CallbackID &cbID, bool useCapture = false); - - void off(const CallbacksInvoker::KeyType &type, void *target, bool useCapture = false); - - template - void off(const CallbacksInvoker::KeyType &type, void (Target::*memberFn)(Args...), Target *target, bool useCapture = false); - - template - void emit(const CallbacksInvoker::KeyType &type, Args &&...args); - - // void dispatchEvent(event::Event *event); - bool hasEventListener(const CallbacksInvoker::KeyType &type) const; - bool hasEventListener(const CallbacksInvoker::KeyType &type, const CallbackID &cbID) const; - bool hasEventListener(const CallbacksInvoker::KeyType &type, void *target) const; - bool hasEventListener(const CallbacksInvoker::KeyType &type, void *target, const CallbackID &cbID) const; - - template - bool hasEventListener(const CallbacksInvoker::KeyType &type, void (Target::*memberFn)(Args...), Target *target) const; - - void targetOff(const CallbacksInvoker::KeyType &type); - -#endif // SWIGCOCOS - bool destroy() override { if (CCObject::destroy()) { setActive(false); @@ -220,7 +165,7 @@ class Node : public CCObject { for (const auto &child : _children) { child->_siblingIndex = i++; } - emit(NodeEventType::SIBLING_ORDER_CHANGED); + emit(); } inline void addChild(Node *node) { node->setParent(this); } @@ -265,7 +210,7 @@ class Node : public CCObject { inline const ccstd::vector> &getChildren() const { return _children; } inline Node *getParent() const { return _parent; } - inline NodeEventProcessor *getEventProcessor() const { return _eventProcessor; } + // inline NodeEventProcessor *getEventProcessor() const { return _eventProcessor; } Node *getChildByUuid(const ccstd::string &uuid) const; Node *getChildByName(const ccstd::string &name) const; @@ -510,7 +455,7 @@ class Node : public CCObject { inline void setMobility(MobilityMode m) { _mobility = m; - emit(NodeEventType::MOBILITY_CHANGED); + emit(); } /** @@ -529,7 +474,7 @@ class Node : public CCObject { inline uint32_t getDirtyFlag() const { return _dirtyFlag; } inline void setLayer(uint32_t layer) { _layer = layer; - emit(NodeEventType::LAYER_CHANGED, layer); + emit(layer); } inline uint32_t getLayer() const { return _layer; } @@ -655,27 +600,27 @@ class Node : public CCObject { void updateWorldTransformRecursive(uint32_t &superDirtyBits); inline void notifyLocalPositionUpdated() { - emit(EventTypesToJS::NODE_LOCAL_POSITION_UPDATED, _localPosition.x, _localPosition.y, _localPosition.z); + emit(_localPosition.x, _localPosition.y, _localPosition.z); } inline void notifyLocalRotationUpdated() { - emit(EventTypesToJS::NODE_LOCAL_ROTATION_UPDATED, _localRotation.x, _localRotation.y, _localRotation.z, _localRotation.w); + emit(_localRotation.x, _localRotation.y, _localRotation.z, _localRotation.w); } inline void notifyLocalScaleUpdated() { - emit(EventTypesToJS::NODE_LOCAL_SCALE_UPDATED, _localScale.x, _localScale.y, _localScale.z); + emit(_localScale.x, _localScale.y, _localScale.z); } inline void notifyLocalPositionRotationScaleUpdated() { - emit(EventTypesToJS::NODE_LOCAL_POSITION_ROTATION_SCALE_UPDATED, - _localPosition.x, _localPosition.y, _localPosition.z, - _localRotation.x, _localRotation.y, _localRotation.z, _localRotation.w, - _localScale.x, _localScale.y, _localScale.z); + emit( + _localPosition.x, _localPosition.y, _localPosition.z, + _localRotation.x, _localRotation.y, _localRotation.z, _localRotation.w, + _localScale.x, _localScale.y, _localScale.z); } #if CC_EDITOR inline void notifyEditorAttached(bool attached) { - emit(EventTypesToJS::NODE_EDITOR_ATTACHED, attached); + emit(attached); } #endif @@ -686,7 +631,6 @@ class Node : public CCObject { static uint32_t clearRound; Scene *_scene{nullptr}; - NodeEventProcessor *_eventProcessor{nullptr}; IntrusivePtr _userData; ccstd::vector> _children; @@ -731,149 +675,4 @@ template bool Node::isNode(T *obj) { return dynamic_cast(obj) != nullptr && dynamic_cast(obj) == nullptr; } - -#ifndef SWIGCOCOS - -template -void Node::emit(const CallbacksInvoker::KeyType &type, Args &&...args) { - _eventProcessor->emit(type, std::forward(args)...); -} - -template -void Node::on(const CallbacksInvoker::KeyType &type, void (Target::*memberFn)(Args...), Target *target, bool useCapture) { - if (type == NodeEventType::TRANSFORM_CHANGED) { - _eventMask |= TRANSFORM_ON; - } - _eventProcessor->on(type, memberFn, target, useCapture); -} - -template -void Node::on(const CallbacksInvoker::KeyType &type, std::function &&callback, CallbackID &cbID, bool useCapture) { - if (type == NodeEventType::TRANSFORM_CHANGED) { - _eventMask |= TRANSFORM_ON; - } - _eventProcessor->on(type, std::forward>(callback), cbID, useCapture); -} - -template -void Node::on(const CallbacksInvoker::KeyType &type, std::function &&callback, Target *target, CallbackID &cbID, bool useCapture) { - if (type == NodeEventType::TRANSFORM_CHANGED) { - _eventMask |= TRANSFORM_ON; - } - _eventProcessor->on(type, std::forward>(callback), target, cbID, useCapture); -} - -template -std::enable_if_t::value, void> -Node::on(const CallbacksInvoker::KeyType &type, LambdaType &&callback, Target *target, CallbackID &cbID, bool useCapture) { - if (type == NodeEventType::TRANSFORM_CHANGED) { - _eventMask |= TRANSFORM_ON; - } - _eventProcessor->on(type, callback, target, cbID, useCapture); -} - -template -std::enable_if_t::value, void> -Node::on(const CallbacksInvoker::KeyType &type, LambdaType &&callback, CallbackID &cbID, bool useCapture) { - if (type == NodeEventType::TRANSFORM_CHANGED) { - _eventMask |= TRANSFORM_ON; - } - _eventProcessor->on(type, callback, cbID, useCapture); -} - -template -void Node::on(const CallbacksInvoker::KeyType &type, std::function &&callback, bool useCapture) { - CallbackID unusedID{0}; - on(type, callback, unusedID, useCapture); -} - -template -void Node::on(const CallbacksInvoker::KeyType &type, std::function &&callback, Target *target, bool useCapture) { - CallbackID unusedID{0}; - on(type, callback, target, unusedID, useCapture); -} - -template -std::enable_if_t::value, void> -Node::on(const CallbacksInvoker::KeyType &type, LambdaType &&callback, Target *target, bool useCapture) { - CallbackID unusedID{0}; - on(type, callback, target, unusedID, useCapture); -} - -template -std::enable_if_t::value, void> -Node::on(const CallbacksInvoker::KeyType &type, LambdaType &&callback, bool useCapture) { - CallbackID unusedID{0}; - on(type, callback, unusedID, useCapture); -} -template -void Node::once(const CallbacksInvoker::KeyType &type, void (Target::*memberFn)(Args...), Target *target, bool useCapture) { - _eventProcessor->once(type, memberFn, target, useCapture); -} -template -void Node::once(const CallbacksInvoker::KeyType &type, std::function &&callback, CallbackID &cbID, bool useCapture) { - _eventProcessor->once(type, callback, cbID, useCapture); -} - -template -void Node::once(const CallbacksInvoker::KeyType &type, std::function &&callback, Target *target, CallbackID &cbID, bool useCapture) { - _eventProcessor->once(type, std::forward>(callback), target, cbID, useCapture); -} - -template -std::enable_if_t::value, void> -Node::once(const CallbacksInvoker::KeyType &type, LambdaType &&callback, CallbackID &cbID, bool useCapture) { - _eventProcessor->once(type, callback, cbID, useCapture); -} - -template -std::enable_if_t::value, void> -Node::once(const CallbacksInvoker::KeyType &type, LambdaType &&callback, Target *target, CallbackID &cbID, bool useCapture) { - _eventProcessor->once(type, callback, target, cbID, useCapture); -} - -template -void Node::once(const CallbacksInvoker::KeyType &type, std::function &&callback, bool useCapture) { - CallbackID unusedID{0}; - once(type, callback, unusedID, useCapture); -} - -template -void Node::once(const CallbacksInvoker::KeyType &type, std::function &&callback, Target *target, bool useCapture) { - CallbackID unusedID{0}; - once(type, callback, target, unusedID, useCapture); -} - -template -std::enable_if_t::value, void> -Node::once(const CallbacksInvoker::KeyType &type, LambdaType &&callback, bool useCapture) { - CallbackID unusedID{0}; - once(type, callback, unusedID, useCapture); -} - -template -std::enable_if_t::value, void> -Node::once(const CallbacksInvoker::KeyType &type, LambdaType &&callback, Target *target, bool useCapture) { - CallbackID unusedID{0}; - once(type, callback, target, unusedID, useCapture); -} - -template -void Node::off(const CallbacksInvoker::KeyType &type, void (Target::*memberFn)(Args...), Target *target, bool useCapture) { - _eventProcessor->off(type, memberFn, target, useCapture); - bool hasListeners = _eventProcessor->hasEventListener(type); - if (!hasListeners) { - if (type == NodeEventType::TRANSFORM_CHANGED) { - _eventMask &= ~TRANSFORM_ON; - } - } -} - -template -bool Node::hasEventListener(const CallbacksInvoker::KeyType &type, void (Target::*memberFn)(Args...), Target *target) const { - return _eventProcessor->hasEventListener(type, memberFn, target); -} - -#endif // SWIGCOCOS - } // namespace cc diff --git a/native/cocos/core/scene-graph/NodeEvent.cpp b/native/cocos/core/scene-graph/NodeEvent.cpp deleted file mode 100644 index 3d68c15d54e..00000000000 --- a/native/cocos/core/scene-graph/NodeEvent.cpp +++ /dev/null @@ -1,63 +0,0 @@ -/**************************************************************************** - Copyright (c) 2021 Xiamen Yaji Software Co., Ltd. - - http://www.cocos.com - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated engine source code (the "Software"), a limited, - worldwide, royalty-free, non-assignable, revocable and non-exclusive license - to use Cocos Creator solely to develop games on your target platforms. You shall - not use Cocos Creator software for developing other software or tools that's - used for developing games. You are not granted to publish, distribute, - sublicense, and/or sell copies of Cocos Creator. - - The software or tools in this License Agreement are licensed, not sold. - Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. - ****************************************************************************/ - -#include "core/scene-graph/NodeEvent.h" - -namespace cc { - -// Internal NodeEventType : 0~99 -// Internal EventTypesToJS : 100~199 -// Internal Game event : 200~299 -// Internal Director Event Type: 300~399 -const CallbacksInvoker::KeyType NodeEventType::TOUCH_START{0}; //{"touch-start"}; -const CallbacksInvoker::KeyType NodeEventType::TOUCH_MOVE{1}; //{"touch-move"}; -const CallbacksInvoker::KeyType NodeEventType::TOUCH_END{2}; //{"touch-end"}; -const CallbacksInvoker::KeyType NodeEventType::TOUCH_CANCEL{3}; //{"touch-cancel"}; -const CallbacksInvoker::KeyType NodeEventType::MOUSE_DOWN{4}; //{"mouse-down"}; -const CallbacksInvoker::KeyType NodeEventType::MOUSE_MOVE{5}; //{"mouse-move"}; -const CallbacksInvoker::KeyType NodeEventType::MOUSE_UP{6}; //{"mouse-up"}; -const CallbacksInvoker::KeyType NodeEventType::MOUSE_WHEEL{7}; //{"mouse-wheel"}; -const CallbacksInvoker::KeyType NodeEventType::MOUSE_ENTER{8}; //{"mouse-enter"}; -const CallbacksInvoker::KeyType NodeEventType::MOUSE_LEAVE{9}; //{"mouse-leave"}; -const CallbacksInvoker::KeyType NodeEventType::KEY_DOWN{10}; //{"keydown"}; -const CallbacksInvoker::KeyType NodeEventType::KEY_UP{11}; //{"keyup"}; -const CallbacksInvoker::KeyType NodeEventType::DEVICEMOTION{12}; //{"devicemotion"}; -const CallbacksInvoker::KeyType NodeEventType::TRANSFORM_CHANGED{13}; //{"transform-changed"}; -const CallbacksInvoker::KeyType NodeEventType::ANCESTOR_TRANSFORM_CHANGED{14}; //{"ancestor-transform-changed"}; -const CallbacksInvoker::KeyType NodeEventType::MOBILITY_CHANGED{15}; //{"mobility-changed"}; -const CallbacksInvoker::KeyType NodeEventType::SCENE_CHANGED_FOR_PERSISTS{16}; //{"scene-changed-for-persists"}; -const CallbacksInvoker::KeyType NodeEventType::SIZE_CHANGED{17}; //{"size-changed"}; -const CallbacksInvoker::KeyType NodeEventType::ANCHOR_CHANGED{18}; //{"anchor-changed"}; -const CallbacksInvoker::KeyType NodeEventType::COLOR_CHANGED{19}; //{"color-changed"}; -const CallbacksInvoker::KeyType NodeEventType::CHILD_ADDED{20}; //{"child-added"}; -const CallbacksInvoker::KeyType NodeEventType::CHILD_REMOVED{21}; //{"child-removed"}; -const CallbacksInvoker::KeyType NodeEventType::PARENT_CHANGED{22}; //{"parent-changed"}; -const CallbacksInvoker::KeyType NodeEventType::NODE_DESTROYED{23}; //{"node-destroyed"}; -const CallbacksInvoker::KeyType NodeEventType::LAYER_CHANGED{24}; //{"layer-changed"}; -const CallbacksInvoker::KeyType NodeEventType::SIBLING_ORDER_CHANGED{25}; //{"sibling-order-changed"}; -const CallbacksInvoker::KeyType NodeEventType::ACTIVE_IN_HIERARCHY_CHANGED{26}; //{"active-in-hierarchy-changed"}; -const CallbacksInvoker::KeyType NodeEventType::LIGHT_PROBE_CHANGED{27}; //{"light-probe-changed"}; - -} // namespace cc diff --git a/native/cocos/core/scene-graph/NodeEvent.h b/native/cocos/core/scene-graph/NodeEvent.h deleted file mode 100644 index 2fc0bbc3c18..00000000000 --- a/native/cocos/core/scene-graph/NodeEvent.h +++ /dev/null @@ -1,64 +0,0 @@ -/**************************************************************************** - Copyright (c) 2021 Xiamen Yaji Software Co., Ltd. - - http://www.cocos.com - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated engine source code (the "Software"), a limited, - worldwide, royalty-free, non-assignable, revocable and non-exclusive license - to use Cocos Creator solely to develop games on your target platforms. You shall - not use Cocos Creator software for developing other software or tools that's - used for developing games. You are not granted to publish, distribute, - sublicense, and/or sell copies of Cocos Creator. - - The software or tools in this License Agreement are licensed, not sold. - Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. - ****************************************************************************/ - -#pragma once -#include "base/std/container/string.h" -#include "core/event/CallbacksInvoker.h" - -namespace cc { - -class NodeEventType { -public: - static const CallbacksInvoker::KeyType TOUCH_START; - static const CallbacksInvoker::KeyType TOUCH_MOVE; - static const CallbacksInvoker::KeyType TOUCH_END; - static const CallbacksInvoker::KeyType TOUCH_CANCEL; - static const CallbacksInvoker::KeyType MOUSE_DOWN; - static const CallbacksInvoker::KeyType MOUSE_MOVE; - static const CallbacksInvoker::KeyType MOUSE_UP; - static const CallbacksInvoker::KeyType MOUSE_WHEEL; - static const CallbacksInvoker::KeyType MOUSE_ENTER; - static const CallbacksInvoker::KeyType MOUSE_LEAVE; - static const CallbacksInvoker::KeyType KEY_DOWN; - static const CallbacksInvoker::KeyType KEY_UP; - static const CallbacksInvoker::KeyType DEVICEMOTION; - static const CallbacksInvoker::KeyType TRANSFORM_CHANGED; - static const CallbacksInvoker::KeyType ANCESTOR_TRANSFORM_CHANGED; - static const CallbacksInvoker::KeyType MOBILITY_CHANGED; - static const CallbacksInvoker::KeyType SCENE_CHANGED_FOR_PERSISTS; - static const CallbacksInvoker::KeyType SIZE_CHANGED; - static const CallbacksInvoker::KeyType ANCHOR_CHANGED; - static const CallbacksInvoker::KeyType COLOR_CHANGED; - static const CallbacksInvoker::KeyType CHILD_ADDED; - static const CallbacksInvoker::KeyType CHILD_REMOVED; - static const CallbacksInvoker::KeyType PARENT_CHANGED; - static const CallbacksInvoker::KeyType NODE_DESTROYED; - static const CallbacksInvoker::KeyType LAYER_CHANGED; - static const CallbacksInvoker::KeyType SIBLING_ORDER_CHANGED; - static const CallbacksInvoker::KeyType ACTIVE_IN_HIERARCHY_CHANGED; - static const CallbacksInvoker::KeyType LIGHT_PROBE_CHANGED; -}; - -} // namespace cc diff --git a/native/cocos/core/scene-graph/NodeEventProcessor.cpp b/native/cocos/core/scene-graph/NodeEventProcessor.cpp deleted file mode 100644 index 356ee9bf7bb..00000000000 --- a/native/cocos/core/scene-graph/NodeEventProcessor.cpp +++ /dev/null @@ -1,584 +0,0 @@ -/**************************************************************************** - Copyright (c) 2021 Xiamen Yaji Software Co., Ltd. - - http://www.cocos.com - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated engine source code (the "Software"), a limited, - worldwide, royalty-free, non-assignable, revocable and non-exclusive license - to use Cocos Creator solely to develop games on your target platforms. You shall - not use Cocos Creator software for developing other software or tools that's - used for developing games. You are not granted to publish, distribute, - sublicense, and/or sell copies of Cocos Creator. - - The software or tools in this License Agreement are licensed, not sold. - Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. - ****************************************************************************/ - -#include "core/scene-graph/NodeEventProcessor.h" -// #include "2d/framework/UITransform.h" -// #include "core/Director.h" -//#include "core/components/Component.h" -#include "core/scene-graph/Node.h" -//#include "core/scene-graph/NodeUIProperties.h" -#include "math/Vec2.h" - -namespace { -ccstd::vector cachedArray(16); -cc::Node *currentHovered = nullptr; -cc::Vec2 pos; - -//bool touchStartHandler(cc::event::EventListener *listener, cc::event::Touch *touch, cc::event::Event *event) { -// auto *touchEvent = static_cast(event); -// auto *node = dynamic_cast(listener->owner); -// if (node == nullptr || !node->getUIProps()->getUITransformComp()) { -// return false; -// } -// -// pos = touch->getUILocation(); -// -// if (node->getUIProps()->getUITransformComp()->isHit(pos)) { -// touchEvent->setEventName(cc::NodeEventType::TOUCH_START); -// touchEvent->setTouch(touch); -// touchEvent->setUseBubbles(true); -// node->dispatchEvent(touchEvent); -// return true; -// } -// -// return false; -//} -// -//void touchMoveHandler(cc::event::EventListener *listener, cc::event::Touch *touch, cc::event::Event *event) { -// auto *touchEvent = static_cast(event); -// auto *node = dynamic_cast(listener->owner); -// if (node == nullptr || !node->getUIProps()->getUITransformComp()) { -// return; -// } -// -// touchEvent->setEventName(cc::NodeEventType::TOUCH_MOVE); -// touchEvent->setTouch(touch); -// touchEvent->setUseBubbles(true); -// node->dispatchEvent(touchEvent); -//} -// -//void touchEndHandler(cc::event::EventListener *listener, cc::event::Touch *touch, cc::event::Event *event) { -// auto *touchEvent = static_cast(event); -// auto *node = dynamic_cast(listener->owner); -// if (node == nullptr || !node->getUIProps()->getUITransformComp()) { -// return; -// } -// -// pos = touch->getUILocation(); -// -// if (node->getUIProps()->getUITransformComp()->isHit(pos)) { -// event->setEventName(cc::NodeEventType::TOUCH_END); -// } else { -// event->setEventName(cc::NodeEventType::TOUCH_CANCEL); -// } -// -// touchEvent->setTouch(touch); -// touchEvent->setUseBubbles(true); -// node->dispatchEvent(touchEvent); -//} -// -//void touchCancelHandler(cc::event::EventListener *listener, cc::event::Touch *touch, cc::event::Event *event) { -// auto *touchEvent = static_cast(event); -// auto *node = dynamic_cast(listener->owner); -// if (node == nullptr || !node->getUIProps()->getUITransformComp()) { -// return; -// } -// -// touchEvent->setEventName(cc::NodeEventType::TOUCH_CANCEL); -// touchEvent->setTouch(touch); -// touchEvent->setUseBubbles(true); -// node->dispatchEvent(event); -//} -// -//void mouseDownHandler(cc::event::EventListener *listener, cc::event::EventMouse *mouseEvent) { -// auto *node = dynamic_cast(listener->owner); -// if (node == nullptr || !node->getUIProps()->getUITransformComp()) { -// return; -// } -// -// pos = mouseEvent->getUILocation(); -// -// if (node->getUIProps()->getUITransformComp()->isHit(pos)) { -// mouseEvent->setEventName(cc::NodeEventType::MOUSE_DOWN); -// mouseEvent->setUseBubbles(true); -// node->dispatchEvent(mouseEvent); -// } -//} -// -//void mouseMoveHandler(cc::event::EventListener *listener, cc::event::EventMouse *mouseEvent) { -// auto *node = dynamic_cast(listener->owner); -// if (node == nullptr || !node->getUIProps()->getUITransformComp()) { -// return; -// } -// -// pos = mouseEvent->getUILocation(); -// -// if (node->getUIProps()->getUITransformComp()->isHit(pos)) { -// if (!listener->_previousIn) { -// // Fix issue when hover node switched, previous hovered node won't get MOUSE_LEAVE notification -// if (currentHovered && currentHovered->getEventProcessor()->getMouseListener()) { -// mouseEvent->setEventName(cc::NodeEventType::MOUSE_LEAVE); -// currentHovered->dispatchEvent(mouseEvent); -// if (currentHovered->getEventProcessor()->getMouseListener()) { -// currentHovered->getEventProcessor()->getMouseListener()->_previousIn = false; -// } -// } -// currentHovered = node; -// mouseEvent->setEventName(cc::NodeEventType::MOUSE_ENTER); -// node->dispatchEvent(mouseEvent); -// listener->_previousIn = true; -// } -// mouseEvent->setEventName(cc::NodeEventType::MOUSE_MOVE); -// mouseEvent->setUseBubbles(true); -// node->dispatchEvent(mouseEvent); -// } else if (listener->_previousIn) { -// mouseEvent->setEventName(cc::NodeEventType::MOUSE_LEAVE); -// node->dispatchEvent(mouseEvent); -// listener->_previousIn = false; -// currentHovered = nullptr; -// } else { -// // continue dispatching -// return; -// } -// -// // Event processed, cleanup -// mouseEvent->setPropagationStopped(true); -//} -//void mouseUpHandler(cc::event::EventListener *listener, cc::event::EventMouse *mouseEvent) { -// auto *node = dynamic_cast(listener->owner); -// if (node == nullptr || !node->getUIProps()->getUITransformComp()) { -// return; -// } -// -// pos = mouseEvent->getUILocation(); -// -// if (node->getUIProps()->getUITransformComp()->isHit(pos)) { -// mouseEvent->setEventName(cc::NodeEventType::MOUSE_UP); -// mouseEvent->setUseBubbles(true); -// node->dispatchEvent(mouseEvent); -// mouseEvent->setPropagationStopped(true); -// } -//} -// -//void mouseWheelHandler(cc::event::EventListener *listener, cc::event::EventMouse *mouseEvent) { -// auto *node = dynamic_cast(listener->owner); -// if (node == nullptr || !node->getUIProps()->getUITransformComp()) { -// return; -// } -// -// pos = mouseEvent->getUILocation(); -// -// if (node->getUIProps()->getUITransformComp()->isHit(pos)) { -// mouseEvent->setEventName(cc::NodeEventType::MOUSE_WHEEL); -// mouseEvent->setUseBubbles(true); -// node->dispatchEvent(mouseEvent); -// mouseEvent->setPropagationStopped(true); -// } -//} -// -//void doDispatchEvent(cc::Node *owner, cc::event::Event *event) { -// cc::Node *target = nullptr; -// event->setTarget(owner); -// -// // Event.CAPTURING_PHASE -// cachedArray.clear(); -// owner->getEventProcessor()->getCapturingTargets(event->getEventName(), cachedArray); -// // capturing -// event->setEventPhase(cc::event::Event::Phase::CAPTURING); -// for (auto i = static_cast(cachedArray.size() - 1); i >= 0; --i) { -// target = cachedArray[i]; -// if (target->getEventProcessor()->getCapturingTargets()) { -// event->setCurrentTarget(target); -// // fire event -// target->getEventProcessor()->getCapturingTargets()->emit(event->getEventName(), event, cachedArray); -// // check if propagation stopped -// if (event->isPropagationStopped()) { -// cachedArray.clear(); -// return; -// } -// } -// } -// cachedArray.clear(); -// -// // Event.AT_TARGET -// // checks if destroyed in capturing callbacks -// event->setEventPhase(cc::event::Event::Phase::AT_TARGET); -// event->setCurrentTarget(owner); -// if (owner->getEventProcessor()->getCapturingTargets()) { -// owner->getEventProcessor()->getCapturingTargets()->emit(event->getEventName(), event); -// } -// if (!event->isPropagationImmediateStopped() && owner->getEventProcessor()->getBubblingTargets()) { -// owner->getEventProcessor()->getBubblingTargets()->emit(event->getEventName(), event); -// } -// -// if (!event->isPropagationStopped() && event->isUseBubbles()) { -// // Event.BUBBLING_PHASE -// owner->getEventProcessor()->getBubblingTargets(event->getEventName(), cachedArray); -// // propagate -// event->setEventPhase(cc::event::Event::Phase::BUBBLING); -// for (uint32_t i = 0; i < cachedArray.size(); ++i) { -// target = cachedArray[i]; -// if (target->getEventProcessor()->getBubblingTargets()) { -// event->setCurrentTarget(target); -// // fire event -// target->getEventProcessor()->getBubblingTargets()->emit(event->getEventName(), event); -// // check if propagation stopped -// if (event->isPropagationStopped()) { -// cachedArray.clear(); -// return; -// } -// } -// } -// } -// cachedArray.clear(); -//} -// -//template ::value, T>> -//ccstd::vector searchComponentsInParent(cc::Node *node) { -// index_t index = 0; -// ccstd::vector list; -// -// for (cc::Node *curr = node; curr != nullptr && cc::Node::isNode(curr); curr = curr->getParent(), ++index) { -// auto *comp = curr->getComponent(); -// if (comp != nullptr) { -// list.emplace_back(); -// auto &info = list.back(); -// info.index = index; -// info.comp = comp; -// } -// } -// return list.empty() ? ccstd::vector() : list; -//} - -} // namespace -namespace cc { -NodeEventProcessor::NodeEventProcessor(Node *node) : _node(node) {} - -NodeEventProcessor::~NodeEventProcessor() { - delete _bubblingTargets; - delete _capturingTargets; - // delete _touchListener; - // delete _mouseListener; -} - -bool NodeEventProcessor::checkListeners(cc::Node *node, const ccstd::vector &events) { - if (!node->isPersistNode()) { - if (node->getEventProcessor()->_bubblingTargets) { - for (const auto &event : events) { - if (node->getEventProcessor()->_bubblingTargets->hasEventListener(event)) { - return true; - } - } - } - if (node->getEventProcessor()->_bubblingTargets) { - for (const auto &event : events) { - if (node->getEventProcessor()->_bubblingTargets->hasEventListener(event)) { - return true; - } - } - } - return false; - } - return true; -} - -void NodeEventProcessor::reattach() { - // ccstd::vector currMask; - // _node->walk( - // [&](Node *node) { - // if (currMask.empty()) { - // currMask = searchComponentsInParent(node); - // } - // if (node->getEventProcessor()->_touchListener != nullptr) { - // node->getEventProcessor()->_touchListener->mask = currMask; - // } - // if (node->getEventProcessor()->_mouseListener != nullptr) { - // node->getEventProcessor()->_mouseListener->mask = currMask; - // } - // }); -} - -void NodeEventProcessor::destroy() { - if (currentHovered == _node) { - currentHovered = nullptr; - } - - // Remove all event listeners if necessary - // if (_touchListener || _mouseListener) { - // event::EventManager::getInstance()->removeEventListenersForTarget(_node); - // if (_touchListener) { - // _touchListener->owner = nullptr; - // _touchListener->mask.clear(); - // _touchListener = nullptr; - // } - // if (_mouseListener) { - // _mouseListener->owner = nullptr; - // _mouseListener->mask.clear(); - // _mouseListener = nullptr; - // } - // } - - if (_capturingTargets) _capturingTargets->offAll(); - if (_bubblingTargets) _bubblingTargets->offAll(); -} - -void NodeEventProcessor::off(const CallbacksInvoker::KeyType &type, void *target, bool /*useCapture*/ /* = false*/) { - // bool touchEventExist = std::find(TOUCH_EVENTS.begin(), TOUCH_EVENTS.end(), type) != TOUCH_EVENTS.end(); - // bool mouseEventExist = std::find(MOUSE_EVENTS.begin(), MOUSE_EVENTS.end(), type) != MOUSE_EVENTS.end(); - // if (touchEventExist || mouseEventExist) { - // offDispatch(type, target, useCapture); - // - // if (touchEventExist) { - // if (_touchListener && !checkListeners(_node, TOUCH_EVENTS)) { - // event::EventManager::getInstance()->removeEventListener(_touchListener); - // _touchListener = nullptr; - // } - // } else if (mouseEventExist) { - // if (_mouseListener && !checkListeners(_node, MOUSE_EVENTS)) { - // event::EventManager::getInstance()->removeEventListener(_mouseListener); - // _mouseListener = nullptr; - // } - // } - // } else - if (_bubblingTargets != nullptr) { - _bubblingTargets->offAll(type, target); - } -} - -void NodeEventProcessor::off(const CallbacksInvoker::KeyType &type, const CallbackID &cbID, bool /*useCapture*/) { - // bool touchEventExist = std::find(TOUCH_EVENTS.begin(), TOUCH_EVENTS.end(), type) != TOUCH_EVENTS.end(); - // bool mouseEventExist = std::find(MOUSE_EVENTS.begin(), MOUSE_EVENTS.end(), type) != MOUSE_EVENTS.end(); - // if (touchEventExist || mouseEventExist) { - // offDispatch(type, cbID, useCapture); - // - // if (touchEventExist) { - // if (_touchListener && !checkListeners(_node, TOUCH_EVENTS)) { - // event::EventManager::getInstance()->removeEventListener(_touchListener); - // _touchListener = nullptr; - // } - // } else if (mouseEventExist) { - // if (_mouseListener && !checkListeners(_node, MOUSE_EVENTS)) { - // event::EventManager::getInstance()->removeEventListener(_mouseListener); - // _mouseListener = nullptr; - // } - // } - // } else - if (_bubblingTargets != nullptr) { - _bubblingTargets->off(type, cbID); - } -} - -void NodeEventProcessor::offAll(const CallbacksInvoker::KeyType &type, bool /* useCapture = false*/) { - // bool touchEventExist = std::find(TOUCH_EVENTS.begin(), TOUCH_EVENTS.end(), type) != TOUCH_EVENTS.end(); - // bool mouseEventExist = std::find(MOUSE_EVENTS.begin(), MOUSE_EVENTS.end(), type) != MOUSE_EVENTS.end(); - // if (touchEventExist || mouseEventExist) { - // offDispatch(type, target, useCapture); - // - // if (touchEventExist) { - // if (_touchListener && !checkListeners(_node, TOUCH_EVENTS)) { - // event::EventManager::getInstance()->removeEventListener(_touchListener); - // _touchListener = nullptr; - // } - // } else if (mouseEventExist) { - // if (_mouseListener && !checkListeners(_node, MOUSE_EVENTS)) { - // event::EventManager::getInstance()->removeEventListener(_mouseListener); - // _mouseListener = nullptr; - // } - // } - // } else - if (_bubblingTargets != nullptr) { - _bubblingTargets->offAll(type); - } -} - -//void NodeEventProcessor::dispatchEvent(event::Event *event) { -// doDispatchEvent(_node, event); -// cachedArray.clear(); -//} - -bool NodeEventProcessor::hasEventListener(const CallbacksInvoker::KeyType &type) const { - bool has = false; - if (_bubblingTargets) { - has = _bubblingTargets->hasEventListener(type); - } - if (!has && _capturingTargets) { - has = _capturingTargets->hasEventListener(type); - } - return has; -} - -bool NodeEventProcessor::hasEventListener(const CallbacksInvoker::KeyType &type, const CallbackID &cbID) const { - bool has = false; - if (_bubblingTargets) { - has = _bubblingTargets->hasEventListener(type, cbID); - } - if (!has && _capturingTargets) { - has = _capturingTargets->hasEventListener(type, cbID); - } - return has; -} - -bool NodeEventProcessor::hasEventListener(const CallbacksInvoker::KeyType &type, void *target) const { - bool has = false; - if (_bubblingTargets) { - has = _bubblingTargets->hasEventListener(type, target); - } - if (!has && _capturingTargets) { - has = _capturingTargets->hasEventListener(type, target); - } - return has; -} -bool NodeEventProcessor::hasEventListener(const CallbacksInvoker::KeyType &type, void *target, const CallbackID &cbID) const { - bool has = false; - if (_bubblingTargets) { - has = _bubblingTargets->hasEventListener(type, target, cbID); - } - if (!has && _capturingTargets) { - has = _capturingTargets->hasEventListener(type, target, cbID); - } - return has; -} - -void NodeEventProcessor::targetOff(const CallbacksInvoker::KeyType &target) { - if (_capturingTargets) { - _capturingTargets->offAll(target); - } - if (_bubblingTargets) { - _bubblingTargets->offAll(target); - } - - // if (_touchListener && !checkListeners(_node, TOUCH_EVENTS)) { - // event::EventManager::getInstance()->removeEventListener(_touchListener); - // _touchListener = nullptr; - // } - // if (_mouseListener && !checkListeners(_node, MOUSE_EVENTS)) { - // event::EventManager::getInstance()->removeEventListener(_mouseListener); - // _mouseListener = nullptr; - // } -} - -void NodeEventProcessor::getCapturingTargets(const CallbacksInvoker::KeyType &type, ccstd::vector &targets) const { - auto *parent = _node->getParent(); - while (parent != nullptr) { - if (parent->getEventProcessor()->_capturingTargets != nullptr && parent->getEventProcessor()->_capturingTargets->hasEventListener(type)) { - targets.emplace_back(parent); - } - parent = parent->getParent(); - } -} - -void NodeEventProcessor::getBubblingTargets(const CallbacksInvoker::KeyType &type, ccstd::vector &targets) const { - auto *parent = _node->getParent(); - while (parent != nullptr) { - if (parent->getEventProcessor()->_bubblingTargets != nullptr && parent->getEventProcessor()->_bubblingTargets->hasEventListener(type)) { - targets.emplace_back(parent); - } - parent = parent->getParent(); - } -} - -//bool NodeEventProcessor::checknSetupSysEvent(const CallbacksInvoker::KeyType &type) { -// bool newAdded = false; -// bool forDispatch = false; -// // just for ui -// -// auto *eventManager = event::EventManager::getInstance(); -// if (std::find(TOUCH_EVENTS.begin(), TOUCH_EVENTS.end(), type) != TOUCH_EVENTS.end()) { -// if (_touchListener != nullptr) { -// _touchListener = event::EventListenerTouchOneByOne::create(); -// _touchListener->setSwallowTouches(true); -// _touchListener->owner = _node; -// //cjh TODO: _touchListener->mask = searchComponentsInParent(_node, NodeEventProcessor._comp), -// event::EventListener *listener = _touchListener; -// _touchListener->onTouchBegan = [=](event::Touch *touch, event::Event *event) -> bool { -// return touchStartHandler(listener, touch, event); -// }; -// _touchListener->onTouchMoved = [=](event::Touch *touch, event::Event *event) { -// touchMoveHandler(listener, touch, event); -// }; -// _touchListener->onTouchEnded = [=](event::Touch *touch, event::Event *event) { -// touchEndHandler(listener, touch, event); -// }; -// _touchListener->onTouchCancelled = [=](event::Touch *touch, event::Event *event) { -// touchCancelHandler(listener, touch, event); -// }; -// eventManager->addEventListenerWithSceneGraphPriority(_touchListener, _node); -// newAdded = true; -// } -// forDispatch = true; -// } else if (std::find(MOUSE_EVENTS.begin(), MOUSE_EVENTS.end(), type) != MOUSE_EVENTS.end()) { -// if (_mouseListener != nullptr) { -// _mouseListener = event::EventListenerMouse::create(); -// _mouseListener->_previousIn = false; -// _mouseListener->owner = _node; -// //cjh _mouseListener->mask = searchComponentsInParent(_node, NodeEventProcessor._comp), -// -// event::EventListener *listener = _mouseListener; -// _mouseListener->onMouseDown = [=](event::EventMouse *event) { -// mouseDownHandler(listener, event); -// }; -// -// _mouseListener->onMouseMove = [=](event::EventMouse *event) { -// mouseMoveHandler(listener, event); -// }; -// -// _mouseListener->onMouseUp = [=](event::EventMouse *event) { -// mouseUpHandler(listener, event); -// }; -// -// _mouseListener->onMouseScroll = [=](event::EventMouse *event) { -// mouseWheelHandler(listener, event); -// }; -// -// eventManager->addEventListenerWithSceneGraphPriority(_mouseListener, _node); -// newAdded = true; -// } -// forDispatch = true; -// } -// // TODO(xwx): not sure use scheduler -// // if (newAdded && !_node->isActiveInHierarchy()) { -// // Director::getInstance()->getScheduler()->schedule([](){ -// // if (!_node->isActiveInHierarchy()) { -// // eventManager.pauseTarget(_node); -// // } -// // }, _node, 0, 0, 0, false); -// // } -// return forDispatch; -//} - -void NodeEventProcessor::offDispatch(const CallbacksInvoker::KeyType &type, const CallbackID &cbID, bool useCapture) { - if (cbID.value == 0) { - if (_capturingTargets != nullptr) { - _capturingTargets->offAll(type); - } - if (_bubblingTargets != nullptr) { - _bubblingTargets->offAll(type); - } - } else { - CallbacksInvoker *listeners = useCapture ? _capturingTargets : _bubblingTargets; - if (listeners != nullptr) { - listeners->off(type, cbID); - } - } -} - -void NodeEventProcessor::offDispatch(const CallbacksInvoker::KeyType &type, void *target, bool useCapture) { - CallbacksInvoker *listeners = useCapture ? _capturingTargets : _bubblingTargets; - if (listeners != nullptr) { - listeners->offAll(type, target); - } -} - -} // namespace cc diff --git a/native/cocos/core/scene-graph/NodeEventProcessor.h b/native/cocos/core/scene-graph/NodeEventProcessor.h deleted file mode 100644 index ea233fb1a2f..00000000000 --- a/native/cocos/core/scene-graph/NodeEventProcessor.h +++ /dev/null @@ -1,439 +0,0 @@ -/**************************************************************************** - Copyright (c) 2021 Xiamen Yaji Software Co., Ltd. - - http://www.cocos.com - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated engine source code (the "Software"), a limited, - worldwide, royalty-free, non-assignable, revocable and non-exclusive license - to use Cocos Creator solely to develop games on your target platforms. You shall - not use Cocos Creator software for developing other software or tools that's - used for developing games. You are not granted to publish, distribute, - sublicense, and/or sell copies of Cocos Creator. - - The software or tools in this License Agreement are licensed, not sold. - Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. - ****************************************************************************/ - -#pragma once - -#include -#include "base/memory/Memory.h" -#include "base/std/any.h" -#include "base/std/container/string.h" -#include "core/event/CallbacksInvoker.h" -//#include "core/event/Event.h" -#include "core/scene-graph/NodeEvent.h" - -namespace cc { -const ccstd::vector TOUCH_EVENTS{ - cc::NodeEventType::TOUCH_START, - cc::NodeEventType::TOUCH_MOVE, - cc::NodeEventType::TOUCH_END, - cc::NodeEventType::TOUCH_CANCEL}; - -const ccstd::vector MOUSE_EVENTS{ - cc::NodeEventType::MOUSE_DOWN, - cc::NodeEventType::MOUSE_ENTER, - cc::NodeEventType::MOUSE_MOVE, - cc::NodeEventType::MOUSE_LEAVE, - cc::NodeEventType::MOUSE_UP, - cc::NodeEventType::MOUSE_WHEEL}; - -class Node; - -class NodeEventProcessor final { -public: - NodeEventProcessor() = default; - explicit NodeEventProcessor(Node *node); - ~NodeEventProcessor(); - - inline Node *getNode() { return _node; } - void reattach(); - void destroy(); - - /** - * @zh - * 分发事件到事件流中。 - * - * @param event - 分派到事件流中的事件对象。 - */ - // void dispatchEvent(event::Event *event); - - bool hasEventListener(const CallbacksInvoker::KeyType &type) const; - - bool hasEventListener(const CallbacksInvoker::KeyType &type, const CallbackID &cbID) const; - - bool hasEventListener(const CallbacksInvoker::KeyType &type, void *target) const; - - bool hasEventListener(const CallbacksInvoker::KeyType &type, void *target, const CallbackID &cbID) const; - - template - bool hasEventListener(const CallbacksInvoker::KeyType &type, void (Target::*memberFn)(Args...), Target *target) const; - - static bool checkListeners(Node *node, const ccstd::vector &events); - - template - void on(const CallbacksInvoker::KeyType &type, std::function &&callback, CallbackID &cbID, bool useCapture = false); - - template - void on(const CallbacksInvoker::KeyType &type, void (Target::*memberFn)(Args...), Target *target, bool useCapture = false); - - template - void on(const CallbacksInvoker::KeyType &type, std::function &&callback, Target *target, CallbackID &cbID, bool useCapture = false); - - template - std::enable_if_t::value, void> - on(const CallbacksInvoker::KeyType &type, LambdaType &&callback, Target *target, CallbackID &cbID, bool useCapture = false); - - template - std::enable_if_t::value, void> - on(const CallbacksInvoker::KeyType &type, LambdaType &&callback, CallbackID &cbID, bool useCapture = false); - - template - void once(const CallbacksInvoker::KeyType &type, void (Target::*memberFn)(Args...), Target *target, bool useCapture = false); - - template - void once(const CallbacksInvoker::KeyType &type, std::function &&callback, CallbackID &cbID, bool useCapture = false); - - template - void once(const CallbacksInvoker::KeyType &type, std::function &&callback, Target *target, CallbackID &cbID, bool useCapture = false); - - template - std::enable_if_t::value, void> - once(const CallbacksInvoker::KeyType &type, LambdaType &&callback, Target *target, CallbackID &cbID, bool useCapture = false); - - template - std::enable_if_t::value, void> - once(const CallbacksInvoker::KeyType &type, LambdaType &&callback, CallbackID &cbID, bool useCapture = false); - - void off(const CallbacksInvoker::KeyType &type, const CallbackID &cbID, bool useCapture = false); - - void off(const CallbacksInvoker::KeyType &type, void *target, bool useCapture = false); - - void offAll(const CallbacksInvoker::KeyType &type, bool useCapture = false); - - template - void off(const CallbacksInvoker::KeyType &type, void (Target::*memberFn)(Args...), Target *target, bool useCapture = false); - - /** - * @zh - * 通过事件名发送自定义事件 - * - * @param type - event type - * @param args - The arguments to be passed to the callback - */ - template - void emit(const CallbacksInvoker::KeyType &type, Args &&...args); - - void targetOff(const CallbacksInvoker::KeyType &target); - - void getCapturingTargets(const CallbacksInvoker::KeyType &type, ccstd::vector &targets) const; - void getBubblingTargets(const CallbacksInvoker::KeyType &type, ccstd::vector &targets) const; - - inline CallbacksInvoker *getBubblingTargets() const { return _bubblingTargets; } - inline CallbacksInvoker *getCapturingTargets() const { return _capturingTargets; } - // inline event::EventListener *getTouchListener() const { return _touchListener; } - // inline event::EventListener *getMouseListener() const { return _mouseListener; } - -private: - /** - * @zh - * 节点冒泡事件监听器 - */ - CallbacksInvoker *_bubblingTargets{nullptr}; - - /** - * @zh - * 节点捕获事件监听器 - */ - CallbacksInvoker *_capturingTargets{nullptr}; - - // /** - // * @zh - // * 触摸监听器 - // */ - // event::EventListenerTouchOneByOne *_touchListener{nullptr}; - // - // /** - // * @zh - // * 鼠标监听器 - // */ - // event::EventListenerMouse *_mouseListener{nullptr}; - - Node *_node{nullptr}; - - // bool checknSetupSysEvent(const CallbacksInvoker::KeyType &type); - - template - void onDispatch(const CallbacksInvoker::KeyType &type, std::function &&callback, CallbackID &cbID, bool useCapture = false); - - template - void onDispatch(const CallbacksInvoker::KeyType &type, void (Target::*memberFn)(Args...), Target *target, bool useCapture = false); - - template - void onDispatch(const CallbacksInvoker::KeyType &type, std::function &&callback, Target *target, CallbackID &cbID, bool useCapture = false); - - void offDispatch(const CallbacksInvoker::KeyType &type, const CallbackID &cbID, bool useCapture = false); - void offDispatch(const CallbacksInvoker::KeyType &type, void *target, bool useCapture = false); - - template - void offDispatch(const CallbacksInvoker::KeyType &type, void (Target::*memberFn)(Args...), Target *target, bool useCapture = false); - - CC_DISALLOW_COPY_MOVE_ASSIGN(NodeEventProcessor); -}; - -template -void NodeEventProcessor::emit(const CallbacksInvoker::KeyType &type, Args &&...args) { - if (_bubblingTargets != nullptr) { - _bubblingTargets->emit(type, std::forward(args)...); - } -} -template -void NodeEventProcessor::onDispatch(const CallbacksInvoker::KeyType &type, std::function &&callback, CallbackID &cbID, bool useCapture) { - CallbacksInvoker *listeners = nullptr; - if (useCapture) { - if (_capturingTargets == nullptr) { - _capturingTargets = ccnew CallbacksInvoker(); - } - listeners = _capturingTargets; - } else { - if (_bubblingTargets == nullptr) { - _bubblingTargets = ccnew CallbacksInvoker(); - } - listeners = _bubblingTargets; - } - if (!listeners->hasEventListener(type)) { - listeners->on(type, std::forward>(callback), cbID); - } -} - -template -void NodeEventProcessor::onDispatch(const CallbacksInvoker::KeyType &type, std::function &&callback, Target *target, CallbackID &cbID, bool useCapture) { - CallbacksInvoker *listeners = nullptr; - if (useCapture) { - if (_capturingTargets == nullptr) { - _capturingTargets = ccnew CallbacksInvoker(); - } - listeners = _capturingTargets; - } else { - if (_bubblingTargets == nullptr) { - _bubblingTargets = ccnew CallbacksInvoker(); - } - listeners = _bubblingTargets; - } - if (!listeners->hasEventListener(type)) { - listeners->on(type, std::forward>(callback), target, cbID); - } -} - -template -void NodeEventProcessor::onDispatch(const CallbacksInvoker::KeyType &type, void (Target::*memberFn)(Args...), Target *target, bool useCapture) { - CallbacksInvoker *listeners = nullptr; - if (useCapture) { - if (_capturingTargets == nullptr) { - _capturingTargets = ccnew CallbacksInvoker(); - } - listeners = _capturingTargets; - } else { - if (_bubblingTargets == nullptr) { - _bubblingTargets = ccnew CallbacksInvoker(); - } - listeners = _bubblingTargets; - } - if (!listeners->hasEventListener(type)) { - listeners->on(type, memberFn, target); - } -} - -template -void NodeEventProcessor::on(const CallbacksInvoker::KeyType &type, std::function &&callback, CallbackID &cbID, bool /*useCapture*/) { - // bool forDispatch = checknSetupSysEvent(type); - // if (forDispatch) { - // onDispatch(type, std::forward>(callback), cbID, useCapture); - // } else - { - if (_bubblingTargets == nullptr) { - _bubblingTargets = ccnew CallbacksInvoker(); - } - _bubblingTargets->on(type, std::forward>(callback), cbID); - } -} - -template -void NodeEventProcessor::on(const CallbacksInvoker::KeyType &type, std::function &&callback, Target * /*target*/, CallbackID &cbID, bool /*useCapture*/) { - // bool forDispatch = checknSetupSysEvent(type); - // if (forDispatch) { - // onDispatch(type, std::forward>(callback), target, cbID, useCapture); - // } else - { - if (_bubblingTargets == nullptr) { - _bubblingTargets = ccnew CallbacksInvoker(); - } - _bubblingTargets->on(type, std::forward>(callback), cbID); - } -} - -template -std::enable_if_t::value, void> -NodeEventProcessor::on(const CallbacksInvoker::KeyType &type, LambdaType &&callback, Target *target, CallbackID &cbID, bool /*useCapture*/) { - // bool forDispatch = checknSetupSysEvent(type); - // if (forDispatch) { - // onDispatch(type, CallbacksInvoker::toFunction(std::forward(callback)), target, cbID, useCapture); - // } else - { - if (_bubblingTargets == nullptr) { - _bubblingTargets = ccnew CallbacksInvoker(); - } - _bubblingTargets->on(type, callback, target, cbID); - } -} - -template -std::enable_if_t::value, void> -NodeEventProcessor::on(const CallbacksInvoker::KeyType &type, LambdaType &&callback, CallbackID &cbID, bool /*useCapture*/) { - // bool forDispatch = checknSetupSysEvent(type); - // if (forDispatch) { - // onDispatch(type, CallbacksInvoker::toFunction(std::forward(callback)), cbID, useCapture); - // } else - { - if (_bubblingTargets == nullptr) { - _bubblingTargets = ccnew CallbacksInvoker(); - } - _bubblingTargets->on(type, callback, cbID); - } -} - -template -void NodeEventProcessor::on(const CallbacksInvoker::KeyType &type, void (Target::*memberFn)(Args...), Target *target, bool /*useCapture*/) { - using CallbackInfoType = CallbackInfo; - // bool forDispatch = checknSetupSysEvent(type); - // if (forDispatch) { - // onDispatch(type, memberFn, target, useCapture); - // } else - { - if (_bubblingTargets == nullptr) { - _bubblingTargets = ccnew CallbacksInvoker(); - } - _bubblingTargets->on(type, memberFn, target); - } -} - -template -void NodeEventProcessor::once(const CallbacksInvoker::KeyType &type, std::function &&callback, CallbackID &cbID, bool useCapture /* = false*/) { - once(type, std::forward(callback), nullptr, cbID, useCapture); -} - -template -void NodeEventProcessor::once(const CallbacksInvoker::KeyType &type, void (Target::*memberFn)(Args...), Target *target, bool useCapture) { - CallbacksInvoker *listeners = nullptr; - if (useCapture) { - if (_capturingTargets == nullptr) { - _capturingTargets = ccnew CallbacksInvoker(); - } - listeners = _capturingTargets; - } else { - if (_bubblingTargets == nullptr) { - _bubblingTargets = ccnew CallbacksInvoker(); - } - listeners = _bubblingTargets; - } - - listeners->on(type, memberFn, target, true); - listeners->on( - type, [=](Args... /*unused*/) { off(type, memberFn, target); }, true); -} - -template -void NodeEventProcessor::once(const CallbacksInvoker::KeyType &type, std::function &&callback, Target *target, CallbackID &cbID, bool useCapture) { - CallbacksInvoker *listeners = nullptr; - if (useCapture) { - if (_capturingTargets == nullptr) { - _capturingTargets = ccnew CallbacksInvoker(); - } - listeners = _capturingTargets; - } else { - if (_bubblingTargets == nullptr) { - _bubblingTargets = ccnew CallbacksInvoker(); - } - listeners = _bubblingTargets; - } - listeners->on(type, std::forward>(callback), target, cbID, true); - CallbackID cacheID{cbID}; - listeners->on( - type, [=](Args... /*unused*/) { off(type, cacheID); }, target, true); -} - -template -std::enable_if_t::value, void> -NodeEventProcessor::once(const CallbacksInvoker::KeyType &type, LambdaType &&callback, Target *target, CallbackID &cbID, bool useCapture) { - once(type, CallbacksInvoker::toFunction(callback), target, cbID, useCapture); -} - -template -std::enable_if_t::value, void> -NodeEventProcessor::once(const CallbacksInvoker::KeyType &type, LambdaType &&callback, CallbackID &cbID, bool useCapture) { - once(type, std::forward(callback), nullptr, cbID, useCapture); -} - -template -void NodeEventProcessor::off(const CallbacksInvoker::KeyType &type, void (Target::*memberFn)(Args...), Target *target, bool /*useCapture*/) { - // bool touchEventExist = std::find(TOUCH_EVENTS.begin(), TOUCH_EVENTS.end(), type) != TOUCH_EVENTS.end(); - // bool mouseEventExist = std::find(MOUSE_EVENTS.begin(), MOUSE_EVENTS.end(), type) != MOUSE_EVENTS.end(); - // if (touchEventExist || mouseEventExist) { - // offDispatch(type, memberFn, target, useCapture); - // - // if (touchEventExist) { - // if (_touchListener && !checkListeners(_node, TOUCH_EVENTS)) { - // event::EventManager::getInstance()->removeEventListener(_touchListener); - // _touchListener = nullptr; - // } - // } else if (mouseEventExist) { - // if (_mouseListener && !checkListeners(_node, MOUSE_EVENTS)) { - // event::EventManager::getInstance()->removeEventListener(_mouseListener); - // _mouseListener = nullptr; - // } - // } - // } else - if (_bubblingTargets != nullptr) { - _bubblingTargets->off(type, memberFn, target); - } -} - -template -void NodeEventProcessor::offDispatch(const CallbacksInvoker::KeyType &type, void (Target::*memberFn)(Args...), Target *target, bool useCapture) { - if (memberFn == nullptr) { - if (_capturingTargets != nullptr) { - _capturingTargets->offAll(type, target); - } - if (_bubblingTargets != nullptr) { - _bubblingTargets->offAll(type, target); - } - } else { - CallbacksInvoker *listeners = useCapture ? _capturingTargets : _bubblingTargets; - if (listeners != nullptr) { - listeners->off(type, memberFn, target); - } - } -} - -template -bool NodeEventProcessor::hasEventListener(const CallbacksInvoker::KeyType &type, void (Target::*memberFn)(Args...), Target *target) const { - bool has = false; - if (_bubblingTargets) { - has = _bubblingTargets->hasEventListener(type, memberFn, target); - } - if (!has && _capturingTargets) { - has = _capturingTargets->hasEventListener(type, memberFn, target); - } - return has; -} -} // namespace cc diff --git a/native/cocos/core/scene-graph/Scene.cpp b/native/cocos/core/scene-graph/Scene.cpp index c59c3596a7e..2ba63b82557 100644 --- a/native/cocos/core/scene-graph/Scene.cpp +++ b/native/cocos/core/scene-graph/Scene.cpp @@ -28,7 +28,7 @@ // #include "core/Director.h" #include "core/Root.h" //#include "core/scene-graph/NodeActivator.h" -#include "cocos/bindings/event/EventDispatcher.h" +#include "engine/EngineEvents.h" namespace cc { @@ -47,7 +47,7 @@ Scene::~Scene() = default; void Scene::setSceneGlobals(SceneGlobals *globals) { _globals = globals; } void Scene::load() { - EventDispatcher::dispatchSceneLoadEvent(); + events::SceneLoad::broadcast(); if (!_inited) { //cjh if (TEST) { // CC_ASSERT(!_activeInHierarchy, 'Should deactivate ActionManager by default'); diff --git a/native/cocos/core/scene-graph/SceneGraphModuleHeader.h b/native/cocos/core/scene-graph/SceneGraphModuleHeader.h index 9847e03b59c..08b0770e700 100644 --- a/native/cocos/core/scene-graph/SceneGraphModuleHeader.h +++ b/native/cocos/core/scene-graph/SceneGraphModuleHeader.h @@ -31,8 +31,8 @@ #include "core/scene-graph/Node.h" //#include "core/scene-graph/NodeActivator.h" #include "core/scene-graph/NodeEnum.h" -#include "core/scene-graph/NodeEvent.h" -#include "core/scene-graph/NodeEventProcessor.h" +// #include "core/scene-graph/NodeEvent.h" +// #include "core/scene-graph/NodeEventProcessor.h" //#include "core/scene-graph/NodeUIProperties.h" #include "core/scene-graph/Scene.h" #include "core/scene-graph/SceneGlobals.h" diff --git a/native/cocos/editor-support/TypedArrayPool.cpp b/native/cocos/editor-support/TypedArrayPool.cpp index 223baf31164..6377779a76d 100644 --- a/native/cocos/editor-support/TypedArrayPool.cpp +++ b/native/cocos/editor-support/TypedArrayPool.cpp @@ -29,7 +29,6 @@ #include "MiddlewareMacro.h" #include "base/Log.h" #include "base/Macros.h" -#include "cocos/bindings/event/CustomEventTypes.h" #include "cocos/bindings/event/EventDispatcher.h" #define POOL_DEBUG 0 @@ -51,7 +50,7 @@ const static std::size_t MAX_POOL_SIZE = 50; TypedArrayPool *TypedArrayPool::instance = nullptr; TypedArrayPool::TypedArrayPool() { - cc::EventDispatcher::addCustomEventListener(EVENT_CLOSE, [this](const CustomEvent &) { + _closeListener.bind([this]() { clearPool(); }); } diff --git a/native/cocos/editor-support/TypedArrayPool.h b/native/cocos/editor-support/TypedArrayPool.h index ecbf84f6e8b..f9dc1f8522b 100644 --- a/native/cocos/editor-support/TypedArrayPool.h +++ b/native/cocos/editor-support/TypedArrayPool.h @@ -28,6 +28,7 @@ #include #include "MiddlewareMacro.h" #include "SeApi.h" +#include "engine/EngineEvents.h" MIDDLEWARE_BEGIN /** @@ -75,6 +76,8 @@ class TypedArrayPool { typeMap _pool; bool _allowPush = true; + cc::events::Close::Listener _closeListener; + public: /** * @brief pop a js TypeArray by given type and size diff --git a/native/cocos/engine/BaseEngine.h b/native/cocos/engine/BaseEngine.h index e4e0288f4c4..0a0175c949c 100644 --- a/native/cocos/engine/BaseEngine.h +++ b/native/cocos/engine/BaseEngine.h @@ -29,13 +29,12 @@ #include "base/Scheduler.h" #include "base/TypeDef.h" -#include "core/event/CallbacksInvoker.h" +#include "core/event/EventTarget.h" #include "platform/BasePlatform.h" namespace cc { -class CC_DLL BaseEngine : public CallbacksInvoker, - public std::enable_shared_from_this { +class CC_DLL BaseEngine : public std::enable_shared_from_this, public event::EventTarget { public: enum EngineStatus { ON_START, @@ -47,6 +46,11 @@ class CC_DLL BaseEngine : public CallbacksInvoker, ~BaseEngine() override; using Ptr = std::shared_ptr; + IMPL_EVENT_TARGET(BaseEngine) + + DECLARE_TARGET_EVENT_BEGIN(BaseEngine) + TARGET_EVENT_ARG1(EngineStatusChange, EngineStatus) + DECLARE_TARGET_EVENT_END() /** @brief Get operating system interface template. */ @@ -94,16 +98,6 @@ class CC_DLL BaseEngine : public CallbacksInvoker, */ virtual void setPreferredFramesPerSecond(int fps) = 0; - using EventCb = std::function; - /** - @brief Add listening event callback. - */ - virtual void addEventCallback(OSEventType evtype, const EventCb &cb) = 0; - /** - @brief Remove listening event callback. - */ - virtual void removeEventCallback(OSEventType evtype) = 0; - using SchedulerPtr = std::shared_ptr; /** @brief Get engine scheduler. diff --git a/native/cocos/engine/Engine.cpp b/native/cocos/engine/Engine.cpp index 1e8a21167d2..ec2aa8e3461 100644 --- a/native/cocos/engine/Engine.cpp +++ b/native/cocos/engine/Engine.cpp @@ -32,6 +32,7 @@ #include "base/Macros.h" #include "bindings/jswrapper/SeApi.h" #include "core/builtin/BuiltinResMgr.h" +#include "engine/EngineEvents.h" #include "platform/BasePlatform.h" #include "platform/FileUtils.h" #include "renderer/GFXDeviceManager.h" @@ -57,6 +58,7 @@ #include "application/ApplicationManager.h" #include "application/BaseApplication.h" #include "base/Scheduler.h" +#include "bindings/event/EventDispatcher.h" #include "core/assets/FreeTypeFont.h" #include "network/HttpClient.h" #include "platform/UniversalPlatform.h" @@ -77,10 +79,10 @@ bool setCanvasCallback(se::Object * /*global*/) { auto handler = window->getWindowHandle(); auto viewSize = window->getViewSize(); auto dpr = cc::BasePlatform::getPlatform()->getInterface()->getDevicePixelRatio(); - + std::stringstream ss; { - ss << "window.innerWidth = " << static_cast(viewSize.x / dpr) << ";"; + ss << "window.innerWidth = " << static_cast(viewSize.x / dpr) << ";"; ss << "window.innerHeight = " << static_cast(viewSize.y / dpr) << ";"; ss << "window.windowHandler = "; if (sizeof(handler) == 8) { // use bigint @@ -101,6 +103,8 @@ namespace cc { Engine::Engine() { _scriptEngine = ccnew se::ScriptEngine(); + + _windowEventListener.bind([this](const cc::WindowEvent &ev) { redirectWindowEvent(ev); }); } Engine::~Engine() { @@ -129,14 +133,9 @@ int32_t Engine::init() { EventDispatcher::init(); BasePlatform *platform = BasePlatform::getPlatform(); - platform->setHandleEventCallback( - std::bind(&Engine::handleEvent, this, std::placeholders::_1)); // NOLINT(modernize-avoid-bind) - - platform->setHandleTouchEventCallback( - std::bind(&Engine::handleTouchEvent, this, std::placeholders::_1)); // NOLINT(modernize-avoid-bind) se::ScriptEngine::getInstance()->addRegisterCallback(setCanvasCallback); - emit(static_cast(ON_START)); + emit(ON_START); _inited = true; return 0; } @@ -232,7 +231,6 @@ void Engine::close() { // NOLINT cc::DeferredReleasePool::clear(); _scheduler->removeAllFunctionsToBePerformedInCocosThread(); _scheduler->unscheduleAll(); - BasePlatform::getPlatform()->setHandleEventCallback(nullptr); } uint Engine::getTotalFrames() const { @@ -248,21 +246,6 @@ void Engine::setPreferredFramesPerSecond(int fps) { _prefererredNanosecondsPerFrame = static_cast(1.0 / fps * NANOSECONDS_PER_SECOND); //NOLINT(google-runtime-int) } -void Engine::addEventCallback(OSEventType evType, const EventCb &cb) { - _eventCallbacks.insert(std::make_pair(evType, cb)); -} - -void Engine::removeEventCallback(OSEventType evType) { - auto it = _eventCallbacks.find(evType); - if (it != _eventCallbacks.end()) { - _eventCallbacks.erase(it); - return; - } - - // For debugging. Interface does not exist. - CC_ASSERT(false); -} - void Engine::tick() { CC_PROFILER_BEGIN_FRAME; { @@ -295,7 +278,7 @@ void Engine::tick() { _scheduler->update(dt); se::ScriptEngine::getInstance()->handlePromiseExceptions(); - cc::EventDispatcher::dispatchTickEvent(dt); + events::Tick::broadcast(dt); se::ScriptEngine::getInstance()->mainLoopUpdate(); cc::DeferredReleasePool::clear(); @@ -309,89 +292,43 @@ void Engine::tick() { } void Engine::doRestart() { - cc::EventDispatcher::dispatchRestartVM(); + events::RestartVM::broadcast(); destroy(); CC_CURRENT_APPLICATION()->init(); } -bool Engine::handleEvent(const OSEvent &ev) { - bool isHandled = false; - OSEventType type = ev.eventType(); - if (type == OSEventType::TOUCH_OSEVENT) { - cc::EventDispatcher::dispatchTouchEvent(OSEvent::castEvent(ev)); - isHandled = true; - } else if (type == OSEventType::MOUSE_OSEVENT) { - cc::EventDispatcher::dispatchMouseEvent(OSEvent::castEvent(ev)); - isHandled = true; - } else if (type == OSEventType::KEYBOARD_OSEVENT) { - cc::EventDispatcher::dispatchKeyboardEvent(OSEvent::castEvent(ev)); - isHandled = true; - } else if (type == OSEventType::CONTROLLER_OSEVENT) { - cc::EventDispatcher::dispatchControllerEvent(OSEvent::castEvent(ev)); - isHandled = true; - } else if (type == OSEventType::CUSTOM_OSEVENT) { - cc::EventDispatcher::dispatchCustomEvent(OSEvent::castEvent(ev)); - isHandled = true; - } else if (type == OSEventType::WINDOW_OSEVENT) { - isHandled = dispatchWindowEvent(OSEvent::castEvent(ev)); - } else if (type == OSEventType::DEVICE_OSEVENT) { - isHandled = dispatchDeviceEvent(OSEvent::castEvent(ev)); - } - isHandled = dispatchEventToApp(type, ev); - return isHandled; -} - -bool Engine::handleTouchEvent(const TouchEvent &ev) { // NOLINT(readability-convert-member-functions-to-static) - cc::EventDispatcher::dispatchTouchEvent(ev); - return dispatchEventToApp(OSEventType::TOUCH_OSEVENT, ev); -} - Engine::SchedulerPtr Engine::getScheduler() const { return _scheduler; } -bool Engine::dispatchDeviceEvent(const DeviceEvent &ev) { // NOLINT(readability-convert-member-functions-to-static) - bool isHandled = false; - if (ev.type == DeviceEvent::Type::MEMORY) { - cc::EventDispatcher::dispatchMemoryWarningEvent(); - isHandled = true; - } else if (ev.type == DeviceEvent::Type::ORIENTATION) { - cc::EventDispatcher::dispatchOrientationChangeEvent(ev.args[0].intVal); - isHandled = true; - } - return isHandled; -} - -bool Engine::dispatchWindowEvent(const WindowEvent &ev) { +bool Engine::redirectWindowEvent(const WindowEvent &ev) { bool isHandled = false; if (ev.type == WindowEvent::Type::SHOW || ev.type == WindowEvent::Type::RESTORED) { - emit(static_cast(ON_RESUME)); + emit(ON_RESUME); #if CC_PLATFORM == CC_PLATFORM_WINDOWS - ISystemWindow *window = CC_GET_SYSTEM_WINDOW(ev.windowId); - cc::EventDispatcher::dispatchRecreateWindowEvent(window); + events::WindowRecreated::broadcast(ev.windowId); #endif - cc::EventDispatcher::dispatchEnterForegroundEvent(); + events::EnterForeground::broadcast(); isHandled = true; } else if (ev.type == WindowEvent::Type::SIZE_CHANGED || ev.type == WindowEvent::Type::RESIZED) { - cc::EventDispatcher::dispatchResizeEvent(ev); + events::Resize::broadcast(ev.width, ev.height, ev.windowId); auto *w = CC_GET_SYSTEM_WINDOW(ev.windowId); CC_ASSERT(w); w->setViewSize(ev.width, ev.height); isHandled = true; } else if (ev.type == WindowEvent::Type::HIDDEN || ev.type == WindowEvent::Type::MINIMIZED) { - emit(static_cast(ON_PAUSE)); + emit(ON_PAUSE); #if CC_PLATFORM == CC_PLATFORM_WINDOWS - ISystemWindow *window = CC_GET_SYSTEM_WINDOW(ev.windowId); - cc::EventDispatcher::dispatchDestroyWindowEvent(window); + events::WindowDestroy::broadcast(ev.windowId); #endif - cc::EventDispatcher::dispatchEnterBackgroundEvent(); + events::EnterBackground::broadcast(); + isHandled = true; } else if (ev.type == WindowEvent::Type::CLOSE) { - emit(static_cast(ON_CLOSE)); - cc::EventDispatcher::dispatchCloseEvent(); + emit(ON_CLOSE); isHandled = true; } else if (ev.type == WindowEvent::Type::QUIT) { // There is no need to process the quit message, @@ -401,13 +338,4 @@ bool Engine::dispatchWindowEvent(const WindowEvent &ev) { return isHandled; } -bool Engine::dispatchEventToApp(OSEventType type, const OSEvent &ev) { - auto it = _eventCallbacks.find(type); - if (it != _eventCallbacks.end()) { - it->second(ev); - return true; - } - return false; -} - } // namespace cc diff --git a/native/cocos/engine/Engine.h b/native/cocos/engine/Engine.h index 2a37e22a9cd..067d5180b44 100644 --- a/native/cocos/engine/Engine.h +++ b/native/cocos/engine/Engine.h @@ -27,8 +27,8 @@ #include "base/Config.h" #include "base/TypeDef.h" -#include "bindings/event/EventDispatcher.h" #include "engine/BaseEngine.h" +#include "engine/EngineEvents.h" #include "math/Vec2.h" #include @@ -96,29 +96,6 @@ class CC_DLL Engine : public BaseEngine { @brief Gets the total number of frames in the main loop. */ uint getTotalFrames() const override; - /** - @brief Add Event Listening. - @param evtype:event type. - @param cb:event callback. - */ - void addEventCallback(OSEventType evtype, const EventCb &cb) override; - /** - @brief Remove Event Listening. - @param evtype:event type. - */ - void removeEventCallback(OSEventType evtype) override; - /** - @brief Event handling callback. - @param ev:Abstract event. - @return whether it's been handled. - */ - bool handleEvent(const OSEvent &ev); - /** - @brief Touch event handling callback. - @param ev:Touch event. - @return whether it's been handled. - */ - bool handleTouchEvent(const TouchEvent &ev); /** @brief Get engine scheduler. */ @@ -129,9 +106,7 @@ class CC_DLL Engine : public BaseEngine { private: void destroy(); void tick(); - bool dispatchWindowEvent(const WindowEvent &ev); - bool dispatchDeviceEvent(const DeviceEvent &ev); - bool dispatchEventToApp(OSEventType type, const OSEvent &ev); + bool redirectWindowEvent(const WindowEvent &ev); void doRestart(); bool _close{false}; @@ -158,7 +133,8 @@ class CC_DLL Engine : public BaseEngine { BuiltinResMgr *_builtinResMgr{nullptr}; ProgramLib *_programLib{nullptr}; - std::map _eventCallbacks; + events::WindowEvent::Listener _windowEventListener; + CC_DISALLOW_COPY_MOVE_ASSIGN(Engine); }; diff --git a/native/cocos/engine/EngineEvents.h b/native/cocos/engine/EngineEvents.h new file mode 100644 index 00000000000..fb6deef235f --- /dev/null +++ b/native/cocos/engine/EngineEvents.h @@ -0,0 +1,317 @@ +/**************************************************************************** + Copyright (c) 2022 Xiamen Yaji Software Co., Ltd. + + http://www.cocos.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated engine source code (the "Software"), a limited, + worldwide, royalty-free, non-assignable, revocable and non-exclusive license + to use Cocos Creator solely to develop games on your target platforms. You shall + not use Cocos Creator software for developing other software or tools that's + used for developing games. You are not granted to publish, distribute, + sublicense, and/or sell copies of Cocos Creator. + + The software or tools in this License Agreement are licensed, not sold. + Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +****************************************************************************/ +#pragma once + +#include +#include "base/std/container/string.h" +#include "base/std/container/unordered_map.h" +#include "base/std/container/vector.h" +#include "core/event/EventBus.h" + +namespace cc { + +class ISystemWindow; + +enum class OSEventType { + KEYBOARD_OSEVENT = 0, + TOUCH_OSEVENT = 1, + MOUSE_OSEVENT = 2, + CUSTOM_OSEVENT = 3, + DEVICE_OSEVENT = 4, + WINDOW_OSEVENT = 5, + APP_OSEVENT = 6, + CONTROLLER_OSEVENT = 7, + UNKNOWN_OSEVENT = 8 +}; + +class WindowEvent { +public: + WindowEvent() = default; + enum class Type { + QUIT = 0, + SHOW, + RESTORED, + SIZE_CHANGED, + RESIZED, + HIDDEN, + MINIMIZED, + CLOSE, + UNKNOWN, + }; + Type type = Type::UNKNOWN; + int width = 0; + int height = 0; + uint32_t windowId = 0; +}; +// Touch event related + +class TouchInfo { +public: + float x = 0; + float y = 0; + int index = 0; + + TouchInfo(float x, float y, int index) + : x(x), + y(y), + index(index) {} +}; + +class TouchEvent { +public: + TouchEvent() = default; + enum class Type { + BEGAN, + MOVED, + ENDED, + CANCELLED, + UNKNOWN + }; + + ccstd::vector touches; + Type type = Type::UNKNOWN; + uint32_t windowId = 0; +}; + +enum class StickKeyCode { + UNDEFINE = 0, + A, + B, + X, + Y, + L1, + R1, + MINUS, + PLUS, + L3, + R3, + MENU, + START, + TRIGGER_LEFT, + TRIGGER_RIGHT, +}; + +enum class StickAxisCode { + UNDEFINE = 0, + X, + Y, + LEFT_STICK_X, + LEFT_STICK_Y, + RIGHT_STICK_X, + RIGHT_STICK_Y, + L2, + R2, + LEFT_GRIP, + RIGHT_GRIP, +}; + +struct ControllerInfo { + struct AxisInfo { + StickAxisCode axis{StickAxisCode::UNDEFINE}; + float value{0.F}; + AxisInfo(StickAxisCode axis, float value) : axis(axis), value(value) {} + }; + struct ButtonInfo { + StickKeyCode key{StickKeyCode::UNDEFINE}; + bool isPress{false}; + ButtonInfo(StickKeyCode key, bool isPress) : key(key), isPress(isPress) {} + }; + + int napdId{0}; + std::vector axisInfos; + std::vector buttonInfos; +}; + +struct ControllerEvent { + ControllerEvent() = default; + enum class Type { + GAMEPAD, + HANDLE, + UNKNOWN + }; + Type type = Type::UNKNOWN; + std::vector> controllerInfos; +}; + +class MouseEvent { +public: + MouseEvent() = default; + enum class Type { + DOWN, + UP, + MOVE, + WHEEL, + UNKNOWN + }; + + float x = 0.0F; + float y = 0.0F; + // The button number that was pressed when the mouse event was fired: Left button=0, middle button=1 (if present), right button=2. + // For mice configured for left handed use in which the button actions are reversed the values are instead read from right to left. + uint16_t button = 0; + Type type = Type::UNKNOWN; + uint32_t windowId = 0; +}; + +enum class KeyCode { + /** + * @en The back key on mobile phone + * @zh 移动端返回键 + */ + MOBILE_BACK = 6, + BACKSPACE = 8, + TAB = 9, + NUM_LOCK = 12, + NUMPAD_ENTER = 20013, + ENTER = 13, + SHIFT_RIGHT = 20016, + SHIFT_LEFT = 16, + CONTROL_LEFT = 17, + CONTROL_RIGHT = 20017, + ALT_RIGHT = 20018, + ALT_LEFT = 18, + PAUSE = 19, + CAPS_LOCK = 20, + ESCAPE = 27, + SPACE = 32, + PAGE_UP = 33, + PAGE_DOWN = 34, + END = 35, + HOME = 36, + ARROW_LEFT = 37, + ARROW_UP = 38, + ARROW_RIGHT = 39, + ARROW_DOWN = 40, + INSERT = 45, + DELETE_KEY = 46, // DELETE has conflict + META_LEFT = 91, + CONTEXT_MENU = 20093, + PRINT_SCREEN = 20094, + META_RIGHT = 93, + NUMPAD_MULTIPLY = 106, + NUMPAD_PLUS = 107, + NUMPAD_MINUS = 109, + NUMPAD_DECIMAL = 110, + NUMPAD_DIVIDE = 111, + SCROLLLOCK = 145, + SEMICOLON = 186, + EQUAL = 187, + COMMA = 188, + MINUS = 189, + PERIOD = 190, + SLASH = 191, + BACKQUOTE = 192, + BRACKET_LEFT = 219, + BACKSLASH = 220, + BRACKET_RIGHT = 221, + QUOTE = 222, + NUMPAD_0 = 10048, + NUMPAD_1 = 10049, + NUMPAD_2 = 10050, + NUMPAD_3 = 10051, + NUMPAD_4 = 10052, + NUMPAD_5 = 10053, + NUMPAD_6 = 10054, + NUMPAD_7 = 10055, + NUMPAD_8 = 10056, + NUMPAD_9 = 10057, + DPAD_UP = 1003, + DPAD_LEFT = 1000, + DPAD_DOWN = 1004, + DPAD_RIGHT = 1001, + DPAD_CENTER = 1005 +}; + +class KeyboardEvent { +public: + KeyboardEvent() = default; + enum class Action { + PRESS, + RELEASE, + REPEAT, + UNKNOWN + }; + + uint32_t windowId = 0; + int key = -1; + Action action = Action::UNKNOWN; + bool altKeyActive = false; + bool ctrlKeyActive = false; + bool metaKeyActive = false; + bool shiftKeyActive = false; + // TODO(mingo): support caps lock? +}; +union EventParameterType { + void *ptrVal; + int32_t longVal; + int intVal; + int16_t shortVal; + char charVal; + bool boolVal; +}; + +class CustomEvent { +public: + CustomEvent() = default; + ccstd::string name; + EventParameterType args[10]; + + virtual ~CustomEvent() = default; // NOLINT(modernize-use-nullptr) +}; + +class DeviceEvent { +public: + DeviceEvent() = default; + enum class Type { + MEMORY, + ORIENTATION, + UNKNOWN + }; + EventParameterType args[3]; + Type type{Type::UNKNOWN}; // NOLINT(modernize-use-nullptr) +}; + +namespace events { +DECLARE_EVENT_BUS(Engine) + +DECLARE_BUS_EVENT_ARG0(EnterForeground, Engine) +DECLARE_BUS_EVENT_ARG0(EnterBackground, Engine) +DECLARE_BUS_EVENT_ARG1(WindowRecreated, Engine, uint32_t /* windowId*/) +DECLARE_BUS_EVENT_ARG1(WindowDestroy, Engine, uint32_t /*windowId*/) +DECLARE_BUS_EVENT_ARG1(WindowEvent, Engine, const cc::WindowEvent &) +DECLARE_BUS_EVENT_ARG1(WindowChanged, Engine, cc::WindowEvent::Type) +DECLARE_BUS_EVENT_ARG0(LowMemory, Engine) +DECLARE_BUS_EVENT_ARG1(Touch, Engine, const cc::TouchEvent &) +DECLARE_BUS_EVENT_ARG1(Mouse, Engine, const cc::MouseEvent &) +DECLARE_BUS_EVENT_ARG1(Keyboard, Engine, const cc::KeyboardEvent &) +DECLARE_BUS_EVENT_ARG1(Controller, Engine, const cc::ControllerEvent &) +DECLARE_BUS_EVENT_ARG1(Tick, Engine, float) +DECLARE_BUS_EVENT_ARG3(Resize, Engine, int, int, uint32_t /* windowId*/) +DECLARE_BUS_EVENT_ARG1(Orientation, Engine, int) +DECLARE_BUS_EVENT_ARG0(RestartVM, Engine) +DECLARE_BUS_EVENT_ARG0(Close, Engine) +DECLARE_BUS_EVENT_ARG0(SceneLoad, Engine) +} // namespace events +} // namespace cc diff --git a/native/cocos/platform/BasePlatform.h b/native/cocos/platform/BasePlatform.h index 28d605b7db2..9f25c09cc5d 100644 --- a/native/cocos/platform/BasePlatform.h +++ b/native/cocos/platform/BasePlatform.h @@ -28,7 +28,7 @@ #include "base/Log.h" #include "base/Macros.h" -#include "bindings/event/EventDispatcher.h" +#include "engine/EngineEvents.h" #include "platform/interfaces/modules/ISystem.h" #include @@ -76,27 +76,6 @@ class CC_DLL BasePlatform { virtual OSType getOSType() const = 0; - /** - * @brief Set event handling callback function. - */ - using HandleEventCallback = std::function; - - virtual void setHandleEventCallback(HandleEventCallback cb) = 0; - - /** - * @brief Set touch event handling callback function. - */ - using HandleTouchEventCallback = std::function; - virtual void setHandleTouchEventCallback(HandleTouchEventCallback cb) = 0; - - /** - * @brief Set default event handling callback function. - */ - virtual void setHandleDefaultEventCallback(HandleEventCallback cb) = 0; - /** - * @brief Default event handling. - */ - virtual void handleDefaultEvent(const OSEvent &ev) = 0; /** * @brief Get the SDK version for Android.Other systems also have sdk versions, but they are not currently used. diff --git a/native/cocos/platform/IEventDispatch.h b/native/cocos/platform/IEventDispatch.h deleted file mode 100644 index e40f6f2c772..00000000000 --- a/native/cocos/platform/IEventDispatch.h +++ /dev/null @@ -1,48 +0,0 @@ -/**************************************************************************** - Copyright (c) 2021-2022 Xiamen Yaji Software Co., Ltd. - - http://www.cocos.com - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated engine source code (the "Software"), a limited, - worldwide, royalty-free, non-assignable, revocable and non-exclusive license - to use Cocos Creator solely to develop games on your target platforms. You shall - not use Cocos Creator software for developing other software or tools that's - used for developing games. You are not granted to publish, distribute, - sublicense, and/or sell copies of Cocos Creator. - - The software or tools in this License Agreement are licensed, not sold. - Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. -****************************************************************************/ - -#pragma once - -#include "base/Macros.h" -#include "bindings/event/EventDispatcher.h" - -namespace cc { -class CC_DLL IEventDispatch { -public: - /** - * Destructor of EventDispatchInterface. - */ - virtual ~IEventDispatch() = default; - /** - * Dispatch event interface. - */ - virtual void dispatchEvent(const OSEvent& ev) = 0; - /** - * Dispatch touch event interface. - */ - virtual void dispatchTouchEvent(const TouchEvent& ev) = 0; -}; - -} // namespace cc diff --git a/native/cocos/platform/SDLHelper.cpp b/native/cocos/platform/SDLHelper.cpp index 782f036c46b..5a0ae9d6be4 100644 --- a/native/cocos/platform/SDLHelper.cpp +++ b/native/cocos/platform/SDLHelper.cpp @@ -28,7 +28,7 @@ #include "SDL2/SDL_main.h" #include "SDL2/SDL_syswm.h" #include "base/Log.h" -#include "platform/IEventDispatch.h" +#include "engine/EngineEvents.h" #include "platform/interfaces/modules/ISystemWindow.h" #include "platform/interfaces/modules/ISystemWindowManager.h" @@ -160,43 +160,43 @@ int SDLHelper::init() { return 0; } -void SDLHelper::dispatchWindowEvent(IEventDispatch *delegate, uint32_t windowId, const SDL_WindowEvent &wevent) { +void SDLHelper::dispatchWindowEvent(uint32_t windowId, const SDL_WindowEvent &wevent) { WindowEvent ev; ev.windowId = windowId; switch (wevent.event) { case SDL_WINDOWEVENT_SHOWN: { ev.type = WindowEvent::Type::SHOW; - delegate->dispatchEvent(ev); + events::WindowEvent::broadcast(ev); break; } case SDL_WINDOWEVENT_RESTORED: { ev.type = WindowEvent::Type::RESTORED; - delegate->dispatchEvent(ev); + events::WindowEvent::broadcast(ev); break; } case SDL_WINDOWEVENT_SIZE_CHANGED: { ev.type = WindowEvent::Type::SIZE_CHANGED; ev.width = wevent.data1; ev.height = wevent.data2; - delegate->dispatchEvent(ev); + events::WindowEvent::broadcast(ev); break; } case SDL_WINDOWEVENT_RESIZED: { ev.type = WindowEvent::Type::RESIZED; ev.width = wevent.data1; ev.height = wevent.data2; - delegate->dispatchEvent(ev); + events::WindowEvent::broadcast(ev); break; } case SDL_WINDOWEVENT_HIDDEN: { ev.type = WindowEvent::Type::HIDDEN; - delegate->dispatchEvent(ev); + events::WindowEvent::broadcast(ev); break; } case SDL_WINDOWEVENT_MINIMIZED: { ev.type = WindowEvent::Type::MINIMIZED; - delegate->dispatchEvent(ev); + events::WindowEvent::broadcast(ev); break; } case SDL_WINDOWEVENT_ENTER: { @@ -205,13 +205,13 @@ void SDLHelper::dispatchWindowEvent(IEventDispatch *delegate, uint32_t windowId, } case SDL_WINDOWEVENT_CLOSE: { ev.type = WindowEvent::Type::CLOSE; - delegate->dispatchEvent(ev); + events::WindowEvent::broadcast(ev); break; } } } -void SDLHelper::dispatchSDLEvent(IEventDispatch *delegate, uint32_t windowId, const SDL_Event &sdlEvent, bool *quit) { +void SDLHelper::dispatchSDLEvent(uint32_t windowId, const SDL_Event &sdlEvent, bool *quit) { cc::TouchEvent touch; cc::MouseEvent mouse; cc::KeyboardEvent keyboard; @@ -229,11 +229,11 @@ void SDLHelper::dispatchSDLEvent(IEventDispatch *delegate, uint32_t windowId, co } WindowEvent ev; ev.type = WindowEvent::Type::QUIT; - delegate->dispatchEvent(ev); + events::WindowEvent::broadcast(ev); break; } case SDL_WINDOWEVENT: { - dispatchWindowEvent(delegate, windowId, sdlEvent.window); + dispatchWindowEvent(windowId, sdlEvent.window); break; } case SDL_MOUSEBUTTONDOWN: { @@ -248,7 +248,7 @@ void SDLHelper::dispatchSDLEvent(IEventDispatch *delegate, uint32_t windowId, co mouse.x = static_cast(event.x); mouse.y = static_cast(event.y); mouse.button = event.button - 1; - delegate->dispatchEvent(mouse); + events::Mouse::broadcast(mouse); break; } case SDL_MOUSEBUTTONUP: { @@ -257,7 +257,7 @@ void SDLHelper::dispatchSDLEvent(IEventDispatch *delegate, uint32_t windowId, co mouse.x = static_cast(event.x); mouse.y = static_cast(event.y); mouse.button = event.button - 1; - delegate->dispatchEvent(mouse); + events::Mouse::broadcast(mouse); break; } case SDL_MOUSEMOTION: { @@ -266,7 +266,7 @@ void SDLHelper::dispatchSDLEvent(IEventDispatch *delegate, uint32_t windowId, co mouse.x = static_cast(event.x); mouse.y = static_cast(event.y); mouse.button = 0; - delegate->dispatchEvent(mouse); + events::Mouse::broadcast(mouse); break; } case SDL_MOUSEWHEEL: { @@ -275,28 +275,28 @@ void SDLHelper::dispatchSDLEvent(IEventDispatch *delegate, uint32_t windowId, co mouse.x = static_cast(event.x); mouse.y = static_cast(event.y); mouse.button = 0; //TODO: direction - delegate->dispatchEvent(mouse); + events::Mouse::broadcast(mouse); break; } case SDL_FINGERUP: { const SDL_TouchFingerEvent &event = sdlEvent.tfinger; touch.type = TouchEvent::Type::ENDED; touch.touches = {TouchInfo(event.x, event.y, (int)event.fingerId)}; - delegate->dispatchTouchEvent(touch); + events::Touch::broadcast(touch); break; } case SDL_FINGERDOWN: { const SDL_TouchFingerEvent &event = sdlEvent.tfinger; touch.type = TouchEvent::Type::BEGAN; touch.touches = {TouchInfo(event.x, event.y, (int)event.fingerId)}; - delegate->dispatchTouchEvent(touch); + events::Touch::broadcast(touch); break; } case SDL_FINGERMOTION: { const SDL_TouchFingerEvent &event = sdlEvent.tfinger; touch.type = TouchEvent::Type::MOVED; touch.touches = {TouchInfo(event.x, event.y, (int)event.fingerId)}; - delegate->dispatchTouchEvent(touch); + events::Touch::broadcast(touch); break; } case SDL_KEYDOWN: { @@ -308,7 +308,7 @@ void SDLHelper::dispatchSDLEvent(IEventDispatch *delegate, uint32_t windowId, co keyboard.ctrlKeyActive = mode & KMOD_CTRL; keyboard.shiftKeyActive = mode & KMOD_SHIFT; //CC_LOG_DEBUG("==> key %d -> code %d", event.keysym.sym, keyboard.key); - delegate->dispatchEvent(keyboard); + events::Keyboard::broadcast(keyboard); break; } case SDL_KEYUP: { @@ -319,7 +319,8 @@ void SDLHelper::dispatchSDLEvent(IEventDispatch *delegate, uint32_t windowId, co keyboard.altKeyActive = mode & KMOD_ALT; keyboard.ctrlKeyActive = mode & KMOD_CTRL; keyboard.shiftKeyActive = mode & KMOD_SHIFT; - delegate->dispatchEvent(keyboard); + events::Keyboard::broadcast(keyboard); + break; break; } default: diff --git a/native/cocos/platform/SDLHelper.h b/native/cocos/platform/SDLHelper.h index ff3efbee16b..7c67d712088 100644 --- a/native/cocos/platform/SDLHelper.h +++ b/native/cocos/platform/SDLHelper.h @@ -25,15 +25,13 @@ #pragma once #include -#include "bindings/event/EventDispatcher.h" +#include "engine/EngineEvents.h" struct SDL_Window; -class OSEvent; union SDL_Event; struct SDL_WindowEvent; namespace cc { -class IEventDispatch; class SDLHelper { friend class SystemWindowManager; @@ -58,7 +56,7 @@ class SDLHelper { static void setCursorEnabled(bool value); private: - static void dispatchSDLEvent(IEventDispatch* delegate, uint32_t windowId, const SDL_Event& sdlEvent, bool* quit); - static void dispatchWindowEvent(IEventDispatch* delegate, uint32_t windowId, const SDL_WindowEvent& wevent); + static void dispatchSDLEvent( uint32_t windowId, const SDL_Event& sdlEvent, bool* quit); + static void dispatchWindowEvent(uint32_t windowId, const SDL_WindowEvent& wevent); }; } // namespace cc diff --git a/native/cocos/platform/UniversalPlatform.cpp b/native/cocos/platform/UniversalPlatform.cpp index d352e44235a..8138806b1fe 100644 --- a/native/cocos/platform/UniversalPlatform.cpp +++ b/native/cocos/platform/UniversalPlatform.cpp @@ -35,46 +35,6 @@ UniversalPlatform::OSType UniversalPlatform::getOSType() const { return getInterface()->getOSType(); } -void UniversalPlatform::dispatchEvent(const OSEvent& ev) { - bool isHandled = false; - if (_handleEventCallback) { - isHandled = (_handleEventCallback)(ev); - } - if (isHandled) { - return; - } - if (_handleDefaultEventCallback) { - isHandled = (_handleDefaultEventCallback)(ev); - } - if (!isHandled) { - handleDefaultEvent(ev); - } -} - -void UniversalPlatform::dispatchTouchEvent(const TouchEvent& ev) { - if (_handleTouchEventCallback) { - _handleTouchEventCallback(ev); - } else { - dispatchEvent(ev); - } -} - -void UniversalPlatform::handleDefaultEvent(const OSEvent& ev) { - // TODO(cc) : Follow-up support -} - -void UniversalPlatform::setHandleEventCallback(HandleEventCallback cb) { - _handleEventCallback = cb; -} - -void UniversalPlatform::setHandleTouchEventCallback(HandleTouchEventCallback cb) { - _handleTouchEventCallback = cb; -} - -void UniversalPlatform::setHandleDefaultEventCallback(HandleEventCallback cb) { - _handleDefaultEventCallback = cb; -} - int32_t UniversalPlatform::run(int argc, const char** argv) { if (cocos_main(argc, argv) != 0) { return -1; diff --git a/native/cocos/platform/UniversalPlatform.h b/native/cocos/platform/UniversalPlatform.h index ac04efb527c..d5d83751918 100644 --- a/native/cocos/platform/UniversalPlatform.h +++ b/native/cocos/platform/UniversalPlatform.h @@ -26,10 +26,9 @@ #pragma once #include "platform/BasePlatform.h" -#include "platform/IEventDispatch.h" namespace cc { -class CC_DLL UniversalPlatform : public BasePlatform, public IEventDispatch { +class CC_DLL UniversalPlatform : public BasePlatform { public: /** * @brief Start base platform initialization. @@ -40,32 +39,6 @@ class CC_DLL UniversalPlatform : public BasePlatform, public IEventDispatch { * @brief Get targe platform type. */ OSType getOSType() const override; - /** - * @brief Set the event handling callback. - */ - void setHandleEventCallback(HandleEventCallback cb) override; - - /** - * @brief Set the touch event handling callback. - */ - void setHandleTouchEventCallback(HandleTouchEventCallback cb) override; - - /** - * @brief Set the event to handle callbacks by default. - */ - void setHandleDefaultEventCallback(HandleEventCallback cb) override; - /** - * @brief Implement dispatch event interface. - */ - void dispatchEvent(const OSEvent &ev) override; - /** - * @brief Implement dispatch touch event interface. - */ - void dispatchTouchEvent(const TouchEvent &ev) override; - /** - * @brief Implement handle default event interface. - */ - void handleDefaultEvent(const OSEvent &ev) override; /** * @brief Get the SDK version for Android.Other systems also have sdk versions, but they are not currently used. @@ -112,10 +85,6 @@ class CC_DLL UniversalPlatform : public BasePlatform, public IEventDispatch { ThreadCallback _mainTask{nullptr}; int32_t _fps{60}; - - HandleEventCallback _handleEventCallback{nullptr}; - HandleTouchEventCallback _handleTouchEventCallback{nullptr}; - HandleEventCallback _handleDefaultEventCallback{nullptr}; }; } // namespace cc diff --git a/native/cocos/platform/android/AndroidPlatform.cpp b/native/cocos/platform/android/AndroidPlatform.cpp index 6eaadefee0e..f3a7b4ed005 100644 --- a/native/cocos/platform/android/AndroidPlatform.cpp +++ b/native/cocos/platform/android/AndroidPlatform.cpp @@ -29,7 +29,6 @@ #include "application/ApplicationManager.h" #include "base/Log.h" #include "base/memory/Memory.h" -#include "bindings/event/CustomEventTypes.h" #include "game-activity/native_app_glue/android_native_app_glue.h" #include "java/jni/JniHelper.h" #include "modules/Screen.h" @@ -47,7 +46,7 @@ #include "platform/java/modules/XRInterface.h" #include "base/StringUtil.h" -#include "bindings/event/EventDispatcher.h" +#include "engine/EngineEvents.h" #include "paddleboat.h" #define ABORT_GAME \ @@ -217,6 +216,7 @@ class GameInputProxy { return (addedControllerEvent != 0); } + // NOLINTNEXTLINE bool cookGameActivityMotionEvent(GameActivityMotionEvent *motionEvent) { if (motionEvent->pointerCount > 0) { touchEvent.windowId = ISystemWindow::mainWindowId; // must be main window here @@ -257,13 +257,14 @@ class GameInputProxy { } } - _androidPlatform->dispatchEvent(touchEvent); + events::Touch::broadcast(touchEvent); touchEvent.touches.clear(); return true; } return false; } + // NOLINTNEXTLINE bool cookGameActivityKeyEvent(GameActivityKeyEvent *keyEvent) { for (const auto &action : INPUT_KEY_ACTIONS) { if (action.buttonMask != keyEvent->keyCode) { @@ -272,12 +273,13 @@ class GameInputProxy { keyboardEvent.action = 0 == keyEvent->action ? cc::KeyboardEvent::Action::PRESS : cc::KeyboardEvent::Action::RELEASE; keyboardEvent.key = action.actionCode; - _androidPlatform->dispatchEvent(keyboardEvent); + events::Keyboard::broadcast(keyboardEvent); return true; } return false; } + // NOLINTNEXTLINE void reportKeyState(int keyCode, bool state) { bool wentDown = !keyState[keyCode] && state; bool wentUp = keyState[keyCode] && !state; @@ -286,11 +288,11 @@ class GameInputProxy { if (wentUp) { keyboardEvent.key = keyCode; keyboardEvent.action = cc::KeyboardEvent::Action::RELEASE; - _androidPlatform->dispatchEvent(keyboardEvent); + events::Keyboard::broadcast(keyboardEvent); } else if (wentDown) { keyboardEvent.key = keyCode; keyboardEvent.action = cc::KeyboardEvent::Action::PRESS; - _androidPlatform->dispatchEvent(keyboardEvent); + events::Keyboard::broadcast(keyboardEvent); } } @@ -340,11 +342,7 @@ class GameInputProxy { auto *windowMgr = _androidPlatform->getInterface(); auto *window = static_cast(windowMgr->getWindow(ISystemWindow::mainWindowId)); window->setWindowHandle(nativeWindow); - - cc::CustomEvent event; - event.name = EVENT_RECREATE_WINDOW; - event.args[0].intVal = ISystemWindow::mainWindowId; - _androidPlatform->dispatchEvent(event); + events::WindowRecreated::broadcast(ISystemWindow::mainWindowId); } break; } @@ -356,10 +354,8 @@ class GameInputProxy { if (xr) { xr->onRenderPause(); } - cc::CustomEvent event; - event.name = EVENT_DESTROY_WINDOW; - event.args[0].intVal = ISystemWindow::mainWindowId; - _androidPlatform->dispatchEvent(event); + // NOLINTNEXTLINE + events::WindowDestroy::broadcast(ISystemWindow::mainWindowId); break; } case APP_CMD_GAINED_FOCUS: @@ -387,7 +383,7 @@ class GameInputProxy { } WindowEvent ev; ev.type = WindowEvent::Type::CLOSE; - _androidPlatform->dispatchEvent(ev); + events::WindowEvent::broadcast(ev); _androidPlatform->onDestroy(); break; } @@ -397,7 +393,7 @@ class GameInputProxy { Paddleboat_onStop(_jniEnv); WindowEvent ev; ev.type = WindowEvent::Type::HIDDEN; - _androidPlatform->dispatchEvent(ev); + events::WindowEvent::broadcast(ev); break; } case APP_CMD_START: { @@ -406,7 +402,7 @@ class GameInputProxy { Paddleboat_onStart(_jniEnv); WindowEvent ev; ev.type = WindowEvent::Type::SHOW; - _androidPlatform->dispatchEvent(ev); + events::WindowEvent::broadcast(ev); break; } case APP_CMD_WINDOW_RESIZED: { @@ -415,7 +411,7 @@ class GameInputProxy { ev.type = cc::WindowEvent::Type::SIZE_CHANGED; ev.width = ANativeWindow_getWidth(_androidPlatform->_app->window); ev.height = ANativeWindow_getHeight(_androidPlatform->_app->window); - _androidPlatform->dispatchEvent(ev); + events::WindowEvent::broadcast(ev); break; } case APP_CMD_CONFIG_CHANGED: @@ -429,9 +425,7 @@ class GameInputProxy { // system told us we have low memory. So if we are not visible, let's // cooperate by deallocating all of our graphic resources. CC_LOG_INFO("AndroidPlatform: APP_CMD_LOW_MEMORY"); - DeviceEvent ev; - ev.type = DeviceEvent::Type::MEMORY; - _androidPlatform->dispatchEvent(ev); + events::LowMemory::broadcast(); break; } case APP_CMD_CONTENT_RECT_CHANGED: diff --git a/native/cocos/platform/android/jni/JniCocosSurfaceView.cpp b/native/cocos/platform/android/jni/JniCocosSurfaceView.cpp index 58c22c0d634..6f174b7ebd7 100644 --- a/native/cocos/platform/android/jni/JniCocosSurfaceView.cpp +++ b/native/cocos/platform/android/jni/JniCocosSurfaceView.cpp @@ -30,7 +30,7 @@ #include #include "application/ApplicationManager.h" #include "base/memory/Memory.h" -#include "bindings/event/CustomEventTypes.h" +#include "engine/EngineEvents.h" #include "platform/android/AndroidPlatform.h" #include "platform/java/jni/glue/JniNativeGlue.h" #include "platform/java/modules/SystemWindow.h" @@ -41,8 +41,7 @@ struct cc::TouchEvent touchEvent; class NativeWindowCache { public: - explicit NativeWindowCache(int windowId) :_windowId{windowId} { - + explicit NativeWindowCache(int windowId) : _windowId{windowId} { } ~NativeWindowCache() { @@ -80,32 +79,26 @@ class NativeWindowCache { extern "C" { -JNIEXPORT jlong Java_com_cocos_lib_CocosSurfaceView_constructNative(JNIEnv *env, jobject /*thiz*/, jint windowId) {//NOLINT JNI function name +JNIEXPORT jlong Java_com_cocos_lib_CocosSurfaceView_constructNative(JNIEnv *env, jobject /*thiz*/, jint windowId) { // NOLINT JNI function name auto *cache = ccnew NativeWindowCache(windowId); cache->env = env; return reinterpret_cast(cache); } -JNIEXPORT void JNICALL Java_com_cocos_lib_CocosSurfaceView_destructNative(JNIEnv * /*env*/, jobject /*thiz*/, jlong handle) { //NOLINT JNI function name +JNIEXPORT void JNICALL Java_com_cocos_lib_CocosSurfaceView_destructNative(JNIEnv * /*env*/, jobject /*thiz*/, jlong handle) { // NOLINT JNI function name auto *windowCache = reinterpret_cast(handle); CC_SAFE_DELETE(windowCache); } -JNIEXPORT void JNICALL Java_com_cocos_lib_CocosSurfaceView_onSizeChangedNative(JNIEnv */*env*/, jobject /*thiz*/, jint windowId, jint width, jint height) {//NOLINT JNI function name - cc::WindowEvent ev; - ev.windowId = windowId; - ev.type = cc::WindowEvent::Type::SIZE_CHANGED; - ev.width = width; - ev.height = height; - auto *platform = static_cast(cc::BasePlatform::getPlatform()); - platform->dispatchEvent(ev); +JNIEXPORT void JNICALL Java_com_cocos_lib_CocosSurfaceView_onSizeChangedNative(JNIEnv * /*env*/, jobject /*thiz*/, jint windowId, jint width, jint height) { // NOLINT JNI function name + cc::events::Resize::broadcast(width, height, windowId); } -JNIEXPORT void JNICALL Java_com_cocos_lib_CocosSurfaceView_onSurfaceRedrawNeededNative(JNIEnv * /*env*/, jobject /*thiz*/, jlong handle) { //NOLINT JNI function name +JNIEXPORT void JNICALL Java_com_cocos_lib_CocosSurfaceView_onSurfaceRedrawNeededNative(JNIEnv * /*env*/, jobject /*thiz*/, jlong handle) { // NOLINT JNI function name // } -JNIEXPORT void JNICALL Java_com_cocos_lib_CocosSurfaceView_onSurfaceCreatedNative(JNIEnv *env, jobject /*thiz*/, jlong handle, jobject surface) { //NOLINT JNI function name +JNIEXPORT void JNICALL Java_com_cocos_lib_CocosSurfaceView_onSurfaceCreatedNative(JNIEnv *env, jobject /*thiz*/, jlong handle, jobject surface) { // NOLINT JNI function name CC_UNUSED_PARAM(env); auto *windowCache = reinterpret_cast(handle); ANativeWindow *oldNativeWindow = windowCache->getNativeWindow(); @@ -119,17 +112,13 @@ JNIEXPORT void JNICALL Java_com_cocos_lib_CocosSurfaceView_onSurfaceCreatedNativ sysWindow->setWindowHandle(nativeWindow); if (oldNativeWindow) { auto func = [sysWindow]() -> void { - cc::CustomEvent event; - event.name = EVENT_RECREATE_WINDOW; - event.args[0].intVal = sysWindow->getWindowId(); - auto *platform = static_cast(cc::BasePlatform::getPlatform()); - platform->dispatchEvent(event); + cc::events::WindowRecreated::broadcast(sysWindow->getWindowId()); }; CC_CURRENT_ENGINE()->getScheduler()->performFunctionInCocosThread(func); } } -JNIEXPORT void JNICALL Java_com_cocos_lib_CocosSurfaceView_onSurfaceChangedNative(JNIEnv *env, //NOLINT JNI function name +JNIEXPORT void JNICALL Java_com_cocos_lib_CocosSurfaceView_onSurfaceChangedNative(JNIEnv *env, // NOLINT JNI function name jobject /*thiz*/, jlong handle, jobject surface, @@ -157,11 +146,7 @@ JNIEXPORT void JNICALL Java_com_cocos_lib_CocosSurfaceView_onSurfaceChangedNativ sysWindow->setWindowHandle(newNativeWindow); auto func = [sysWindow]() -> void { - cc::CustomEvent event; - event.name = EVENT_RECREATE_WINDOW; - event.args[0].intVal = sysWindow->getWindowId(); - auto *platform = static_cast(cc::BasePlatform::getPlatform()); - platform->dispatchEvent(event); + cc::events::WindowRecreated::broadcast(sysWindow->getWindowId()); }; CC_CURRENT_ENGINE()->getScheduler()->performFunctionInCocosThread(func); } @@ -172,7 +157,7 @@ JNIEXPORT void JNICALL Java_com_cocos_lib_CocosSurfaceView_onSurfaceChangedNativ } } -JNIEXPORT void JNICALL Java_com_cocos_lib_CocosSurfaceView_onSurfaceDestroyedNative(JNIEnv *env, jobject /*thiz*/, jlong handle) { //NOLINT JNI function name +JNIEXPORT void JNICALL Java_com_cocos_lib_CocosSurfaceView_onSurfaceDestroyedNative(JNIEnv *env, jobject /*thiz*/, jlong handle) { // NOLINT JNI function name auto *windowCache = (NativeWindowCache *)handle; ANativeWindow *nativeWindow = windowCache->getNativeWindow(); @@ -182,17 +167,14 @@ JNIEXPORT void JNICALL Java_com_cocos_lib_CocosSurfaceView_onSurfaceDestroyedNat auto *windowMgr = platform->getInterface(); cc::ISystemWindow *window = windowMgr->getWindowFromANativeWindow(nativeWindow); - cc::CustomEvent event; - event.name = EVENT_DESTROY_WINDOW; - event.args[0].intVal = window->getWindowId(); - platform->dispatchEvent(event); + cc::events::WindowDestroy::broadcast(window->getWindowId()); }; CC_CURRENT_ENGINE()->getScheduler()->performFunctionInCocosThread(func); } // NOLINTNEXTLINE JNIEXPORT void JNICALL -Java_com_cocos_lib_CocosTouchHandler_handleActionDown(JNIEnv *env, //NOLINT JNI function name +Java_com_cocos_lib_CocosTouchHandler_handleActionDown(JNIEnv *env, // NOLINT JNI function name jobject obj, jint windowId, jint id, @@ -204,13 +186,12 @@ Java_com_cocos_lib_CocosTouchHandler_handleActionDown(JNIEnv *env, //NOLINT JNI touchEvent.windowId = windowId; touchEvent.type = cc::TouchEvent::Type::BEGAN; touchEvent.touches.emplace_back(x, y, id); - auto *platform = static_cast(cc::BasePlatform::getPlatform()); - platform->dispatchEvent(touchEvent); + cc::events::Touch::broadcast(touchEvent); touchEvent.touches.clear(); } // NOLINTNEXTLINE -JNIEXPORT void JNICALL Java_com_cocos_lib_CocosTouchHandler_handleActionUp(JNIEnv *env, //NOLINT JNI function name +JNIEXPORT void JNICALL Java_com_cocos_lib_CocosTouchHandler_handleActionUp(JNIEnv *env, // NOLINT JNI function name jobject obj, jint windowId, jint id, @@ -222,13 +203,12 @@ JNIEXPORT void JNICALL Java_com_cocos_lib_CocosTouchHandler_handleActionUp(JNIEn touchEvent.windowId = windowId; touchEvent.type = cc::TouchEvent::Type::ENDED; touchEvent.touches.emplace_back(x, y, id); - auto *platform = static_cast(cc::BasePlatform::getPlatform()); - platform->dispatchEvent(touchEvent); + cc::events::Touch::broadcast(touchEvent); touchEvent.touches.clear(); } // NOLINTNEXTLINE -JNIEXPORT void JNICALL Java_com_cocos_lib_CocosTouchHandler_handleActionMove(JNIEnv *env, //NOLINT JNI function name +JNIEXPORT void JNICALL Java_com_cocos_lib_CocosTouchHandler_handleActionMove(JNIEnv *env, // NOLINT JNI function name jobject obj, jint windowId, jintArray ids, @@ -250,13 +230,12 @@ JNIEXPORT void JNICALL Java_com_cocos_lib_CocosTouchHandler_handleActionMove(JNI touchEvent.touches.emplace_back(x[i], y[i], id[i]); } - auto *platform = static_cast(cc::BasePlatform::getPlatform()); - platform->dispatchEvent(touchEvent); + cc::events::Touch::broadcast(touchEvent); touchEvent.touches.clear(); } // NOLINTNEXTLINE -JNIEXPORT void JNICALL Java_com_cocos_lib_CocosTouchHandler_handleActionCancel(JNIEnv *env, //NOLINT JNI function name +JNIEXPORT void JNICALL Java_com_cocos_lib_CocosTouchHandler_handleActionCancel(JNIEnv *env, // NOLINT JNI function name jobject obj, jint windowId, jintArray ids, @@ -277,8 +256,7 @@ JNIEXPORT void JNICALL Java_com_cocos_lib_CocosTouchHandler_handleActionCancel(J for (int i = 0; i < size; i++) { touchEvent.touches.emplace_back(x[i], y[i], id[i]); } - auto *platform = static_cast(cc::BasePlatform::getPlatform()); - platform->dispatchEvent(touchEvent); + cc::events::Touch::broadcast(touchEvent); touchEvent.touches.clear(); } } diff --git a/native/cocos/platform/apple/JsbBridge.mm b/native/cocos/platform/apple/JsbBridge.mm index 908f6325c7e..9181037affb 100644 --- a/native/cocos/platform/apple/JsbBridge.mm +++ b/native/cocos/platform/apple/JsbBridge.mm @@ -27,8 +27,7 @@ of this software and associated engine source code (the "Software"), a limited, #import #include "base/std/container/string.h" #include "cocos/bindings/manual/JavaScriptObjCBridge.h" -#include "cocos/bindings/event/EventDispatcher.h" -#include "cocos/bindings/event/CustomEventTypes.h" +#include "engine/EngineEvents.h" bool callPlatformStringMethod(const ccstd::string &arg0, const ccstd::string &arg1) { NSString *oc_arg0 = [NSString stringWithCString:arg0.c_str() encoding:NSUTF8StringEncoding]; @@ -40,6 +39,7 @@ bool callPlatformStringMethod(const ccstd::string &arg0, const ccstd::string &ar @implementation JsbBridge { ICallback callback; + cc::events::Close::Listener closeListener; } static JsbBridge *instance = nil; @@ -63,7 +63,7 @@ - (id)copyWithZone:(struct _NSZone *)zone { - (id)init { if (self = [super init]) { - cc::EventDispatcher::addCustomEventListener(EVENT_CLOSE, [&](const cc::CustomEvent& event){ + closeListener.bind([&](){ if ([JsbBridge sharedInstance] != nil) { [[JsbBridge sharedInstance] release]; } diff --git a/native/cocos/platform/apple/JsbBridgeWrapper.mm b/native/cocos/platform/apple/JsbBridgeWrapper.mm index 0699c7c2ae2..906ffa9af1e 100644 --- a/native/cocos/platform/apple/JsbBridgeWrapper.mm +++ b/native/cocos/platform/apple/JsbBridgeWrapper.mm @@ -26,12 +26,12 @@ of this software and associated engine source code (the "Software"), a limited, #include "base/std/container/string.h" #include "JsbBridge.h" #include "JsbBridgeWrapper.h" -#include "cocos/bindings/event/EventDispatcher.h" -#include "cocos/bindings/event/CustomEventTypes.h" +#include "engine/EngineEvents.h" @implementation JsbBridgeWrapper { JsbBridge* jb; NSMutableDictionary*>* cbDictionnary; + cc::events::Close::Listener closeListener; } static JsbBridgeWrapper* instance = nil; @@ -116,7 +116,7 @@ - (id)init { return nil; } [jb setCallback:cb]; - cc::EventDispatcher::addCustomEventListener(EVENT_CLOSE, [&](const cc::CustomEvent& event){ + closeListener.bind([&](){ if ([JsbBridgeWrapper sharedInstance] != nil) { [[JsbBridgeWrapper sharedInstance] release]; } diff --git a/native/cocos/platform/empty/modules/SystemWindow.cpp b/native/cocos/platform/empty/modules/SystemWindow.cpp index 9b2e6d7e0bc..0fa9d9fda52 100644 --- a/native/cocos/platform/empty/modules/SystemWindow.cpp +++ b/native/cocos/platform/empty/modules/SystemWindow.cpp @@ -27,7 +27,7 @@ #include #include "base/Log.h" #include "base/Macros.h" -#include "bindings/event/EventDispatcher.h" +#include "engine/EngineEvents.h" #include "platform/IEventDispatch.h" #include "platform/empty/EmptyPlatform.h" diff --git a/native/cocos/platform/interfaces/OSInterface.cpp b/native/cocos/platform/interfaces/OSInterface.cpp index 82006a91376..976e8f64cd5 100644 --- a/native/cocos/platform/interfaces/OSInterface.cpp +++ b/native/cocos/platform/interfaces/OSInterface.cpp @@ -24,28 +24,7 @@ ****************************************************************************/ #include "platform/interfaces/OSInterface.h" -#include "platform/IEventDispatch.h" namespace cc { -OSInterface::OSInterface() -: OSInterface(nullptr) { -} - -OSInterface::OSInterface(IEventDispatch *evDispatchInterface) -: _evDispatchInterface(evDispatchInterface) { -} - -void OSInterface::dispatchEvent(const OSEvent &ev) { - if (_evDispatchInterface) { - _evDispatchInterface->dispatchEvent(ev); - } -} - -void OSInterface::dispatchTouchEvent(const TouchEvent &ev) { - if (_evDispatchInterface) { - _evDispatchInterface->dispatchTouchEvent(ev); - } -} - -} // namespace cc \ No newline at end of file +} // namespace cc diff --git a/native/cocos/platform/interfaces/OSInterface.h b/native/cocos/platform/interfaces/OSInterface.h index bde1a288cc3..b0880e3fe28 100644 --- a/native/cocos/platform/interfaces/OSInterface.h +++ b/native/cocos/platform/interfaces/OSInterface.h @@ -27,10 +27,9 @@ #include #include "base/Macros.h" -#include "bindings/event/EventDispatcher.h" +#include "engine/EngineEvents.h" namespace cc { -class IEventDispatch; class CC_DLL OSInterface { public: @@ -38,29 +37,13 @@ class CC_DLL OSInterface { /** @brief Constructor of OSAbstractInterface. */ - explicit OSInterface(); - /** - @brief Constructor of OSAbstractInterface. - */ - explicit OSInterface(IEventDispatch *); + OSInterface() = default; + /** @brief Destructor of OSAbstractInterface. */ virtual ~OSInterface() = default; - /** - @brief Dispatch event. - @param type : Abstract event - */ - void dispatchEvent(const OSEvent &ev); - /** - @brief Dispatch touch event. - @param type : Touch event - */ - void dispatchTouchEvent(const TouchEvent &ev); - -protected: - IEventDispatch *_evDispatchInterface{nullptr}; private: CC_DISALLOW_COPY_MOVE_ASSIGN(OSInterface); diff --git a/native/cocos/platform/interfaces/modules/ISystemWindow.h b/native/cocos/platform/interfaces/modules/ISystemWindow.h index ac78725c147..0514dbf68d9 100644 --- a/native/cocos/platform/interfaces/modules/ISystemWindow.h +++ b/native/cocos/platform/interfaces/modules/ISystemWindow.h @@ -34,7 +34,7 @@ namespace cc { class CC_DLL ISystemWindow : public OSInterface { public: - static const uint32_t mainWindowId = 1; + static constexpr uint32_t mainWindowId = 1; using Size = cc::Vec2; enum WindowFlags { diff --git a/native/cocos/platform/interfaces/modules/ISystemWindowManager.h b/native/cocos/platform/interfaces/modules/ISystemWindowManager.h index 830a7a0ec57..c3e063cc64e 100644 --- a/native/cocos/platform/interfaces/modules/ISystemWindowManager.h +++ b/native/cocos/platform/interfaces/modules/ISystemWindowManager.h @@ -28,7 +28,6 @@ namespace cc { class ISystemWindow; -class OSEvent; struct ISystemWindowInfo { ccstd::string title; @@ -43,19 +42,19 @@ struct ISystemWindowInfo { // key: window id using SystemWindowMap = ccstd::unordered_map>; -/** +/** * Responsible for creating, finding ISystemWindow object and message handling */ class ISystemWindowManager : public OSInterface { public: - /** - * Initialize the NativeWindow environment + /** + * Initialize the NativeWindow environment * @return 0 Succeed -1 Failed */ virtual int init() = 0; /** - * Process messages at the PAL layer + * Process messages at the PAL layer */ virtual void processEvent(bool *quit) = 0; @@ -65,14 +64,14 @@ class ISystemWindowManager : public OSInterface { virtual void swapWindows() = 0; /** - * Create an ISystemWindow object - * @param info window description + * Create an ISystemWindow object + * @param info window description * @return The created ISystemWindow object,if failed then return nullptr */ virtual ISystemWindow *createWindow(const ISystemWindowInfo &info) = 0; /** - * Find an ISystemWindow object + * Find an ISystemWindow object * @param windowId unique ID of window */ virtual ISystemWindow *getWindow(uint32_t windowId) const = 0; diff --git a/native/cocos/platform/ios/AppDelegateBridge.mm b/native/cocos/platform/ios/AppDelegateBridge.mm index 89dc389f5a1..285b2f9a17e 100644 --- a/native/cocos/platform/ios/AppDelegateBridge.mm +++ b/native/cocos/platform/ios/AppDelegateBridge.mm @@ -59,14 +59,9 @@ - (void)applicationWillTerminate:(UIApplication *)application { _platform = nullptr; } -- (void)dispatchEvent:(const cc::OSEvent &)ev { - _platform->dispatchEvent(ev); -} - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application { - cc::DeviceEvent ev; - ev.type = cc::DeviceEvent::Type::MEMORY; - _platform->dispatchEvent(ev); + cc::events::LowMemory::broadcast(); } - (float)getPixelRatio { @@ -99,9 +94,7 @@ - (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(idgetInterface(); - ev.type = cc::DeviceEvent::Type::ORIENTATION; - ev.args[0].intVal = static_cast(screenIntf->getDeviceOrientation()); - _platform->dispatchEvent(ev); + cc::events::Orientation::broadcast((int)screenIntf->getDeviceOrientation()); float pixelRatio = screenIntf->getDevicePixelRatio(); cc::WindowEvent resizeEv; @@ -109,7 +102,7 @@ - (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(iddispatchEvent(resizeEv); + cc::events::WindowEvent::broadcast(resizeEv); } - (void)dispatchTouchEvent:(cc::TouchEvent::Type)type touches:(NSSet *)touches withEvent:(UIEvent *)event { @@ -121,7 +114,7 @@ - (void)dispatchTouchEvent:(cc::TouchEvent::Type)type touches:(NSSet *)touches w static_cast([touch locationInView:[touch view]].y), static_cast((intptr_t)touch)}); } - _platform->dispatchTouchEvent(touchEvent); + cc::events::Touch::broadcast(touchEvent); touchEvent.touches.clear(); } diff --git a/native/cocos/platform/ios/IOSPlatform.mm b/native/cocos/platform/ios/IOSPlatform.mm index f41d5e03761..2b7d8e9a72d 100644 --- a/native/cocos/platform/ios/IOSPlatform.mm +++ b/native/cocos/platform/ios/IOSPlatform.mm @@ -133,7 +133,7 @@ - (void)renderScene:(id)sender { cc::WindowEvent ev; ev.type = cc::WindowEvent::Type::HIDDEN; - dispatchEvent(ev); + cc::events::WindowEvent::broadcast(ev); } void IOSPlatform::onResume() { @@ -141,13 +141,13 @@ - (void)renderScene:(id)sender { cc::WindowEvent ev; ev.type = cc::WindowEvent::Type::SHOW; - dispatchEvent(ev); + cc::events::WindowEvent::broadcast(ev); } void IOSPlatform::onClose() { cc::WindowEvent ev; ev.type = cc::WindowEvent::Type::CLOSE; - dispatchEvent(ev); + cc::events::WindowEvent::broadcast(ev); } ISystemWindow *IOSPlatform::createNativeWindow(uint32_t windowId, void *externalHandle) { diff --git a/native/cocos/platform/ios/View.mm b/native/cocos/platform/ios/View.mm index 9fbf7ea0a5d..547eec59666 100644 --- a/native/cocos/platform/ios/View.mm +++ b/native/cocos/platform/ios/View.mm @@ -58,7 +58,7 @@ - (void)dispatchTouchEvent:(cc::TouchEvent::Type)type withEvent:(NSSet *)touches static_cast((intptr_t)touch)}); } CC_ASSERT(_platform != nullptr); - _platform->dispatchTouchEvent(touchEvent); + cc::events::Touch::broadcast(touchEvent); } - (id)initWithFrame:(CGRect)frame { diff --git a/native/cocos/platform/ios/modules/SystemWindow.mm b/native/cocos/platform/ios/modules/SystemWindow.mm index a5cc193749b..0efb75cf05b 100644 --- a/native/cocos/platform/ios/modules/SystemWindow.mm +++ b/native/cocos/platform/ios/modules/SystemWindow.mm @@ -46,7 +46,7 @@ of this software and associated engine source code (the "Software"), a limited, } void SystemWindow::closeWindow() { // Force quit as there's no API to exit UIApplication - cc::EventDispatcher::dispatchCloseEvent(); + cc::events::Close::broadcast(); exit(0); } uintptr_t SystemWindow::getWindowHandle() const { diff --git a/native/cocos/platform/java/jni/JniCocosKeyCodeHandler.cpp b/native/cocos/platform/java/jni/JniCocosKeyCodeHandler.cpp index 92b69278fcb..328bdf2278c 100644 --- a/native/cocos/platform/java/jni/JniCocosKeyCodeHandler.cpp +++ b/native/cocos/platform/java/jni/JniCocosKeyCodeHandler.cpp @@ -32,7 +32,7 @@ #endif #include -#include "cocos/bindings/event/EventDispatcher.h" +#include "engine/EngineEvents.h" #include "platform/java/jni/glue/JniNativeGlue.h" namespace { @@ -53,7 +53,7 @@ ccstd::unordered_map keyCodeMap = { ccstd::unordered_map keyCodeMap = {}; #endif //NOLINTNEXTLINE -void dispatchKeyCodeEvent(int keyCode, cc::KeyboardEvent &event) { +static void dispatchKeyCodeEvent(int keyCode, cc::KeyboardEvent &event) { if (keyCodeMap.count(keyCode) > 0) { keyCode = keyCodeMap[keyCode]; } else { diff --git a/native/cocos/platform/java/jni/JniCocosOrientationHelper.cpp b/native/cocos/platform/java/jni/JniCocosOrientationHelper.cpp index a753068212a..6e9684d6fa7 100644 --- a/native/cocos/platform/java/jni/JniCocosOrientationHelper.cpp +++ b/native/cocos/platform/java/jni/JniCocosOrientationHelper.cpp @@ -24,39 +24,26 @@ ****************************************************************************/ #include -#include "cocos/bindings/event/EventDispatcher.h" +#include "engine/EngineEvents.h" #include "platform/interfaces/modules/Device.h" #include "platform/java/jni/JniHelper.h" #include "platform/java/jni/glue/JniNativeGlue.h" -#if CC_PLATFORM == CC_PLATFORM_ANDROID - #include "platform/BasePlatform.h" - #include "platform/android/AndroidPlatform.h" -#endif extern "C" { -//NOLINTNEXTLINE +// NOLINTNEXTLINE JNIEXPORT void JNICALL Java_com_cocos_lib_CocosOrientationHelper_nativeOnOrientationChanged(JNIEnv *env, jclass thiz, jint rotation) { int orientation; switch (rotation) { - case 0: //ROTATION_0 + case 0: // ROTATION_0 orientation = (int)cc::Device::Orientation::PORTRAIT; - case 1: //ROTATION_90 + case 1: // ROTATION_90 orientation = (int)cc::Device::Orientation::LANDSCAPE_RIGHT; - case 2: //ROTATION_180 + case 2: // ROTATION_180 orientation = (int)cc::Device::Orientation::PORTRAIT_UPSIDE_DOWN; - case 3: //ROTATION_270 + case 3: // ROTATION_270 orientation = (int)cc::Device::Orientation::LANDSCAPE_LEFT; } - - cc::DeviceEvent ev; - ev.type = cc::DeviceEvent::Type::ORIENTATION; - ev.args[0].intVal = orientation; -#if CC_PLATFORM == CC_PLATFORM_ANDROID - auto *platform = cc::BasePlatform::getPlatform(); - auto *androidPlatform = static_cast(platform); - androidPlatform->dispatchEvent(ev); -#else - JNI_NATIVE_GLUE()->dispatchEvent(ev); -#endif + // run callbacks in game thread? + cc::events::Orientation::broadcast(orientation); } } diff --git a/native/cocos/platform/java/jni/JniCocosTouchHandler.cpp b/native/cocos/platform/java/jni/JniCocosTouchHandler.cpp index d00f2c4ef1b..238dc3c49fe 100644 --- a/native/cocos/platform/java/jni/JniCocosTouchHandler.cpp +++ b/native/cocos/platform/java/jni/JniCocosTouchHandler.cpp @@ -24,7 +24,7 @@ ****************************************************************************/ #include -#include "cocos/bindings/event/EventDispatcher.h" +#include "engine/EngineEvents.h" #include "platform/java/jni/JniHelper.h" #include "platform/java/jni/glue/JniNativeGlue.h" diff --git a/native/cocos/platform/java/jni/glue/JniNativeGlue.cpp b/native/cocos/platform/java/jni/glue/JniNativeGlue.cpp index a576717e258..643b44f6a52 100644 --- a/native/cocos/platform/java/jni/glue/JniNativeGlue.cpp +++ b/native/cocos/platform/java/jni/glue/JniNativeGlue.cpp @@ -26,10 +26,8 @@ #include "platform/java/jni/glue/JniNativeGlue.h" #include #include -#include "cocos/bindings/event/CustomEventTypes.h" -#include "cocos/bindings/event/EventDispatcher.h" +#include "engine/EngineEvents.h" #include "platform/BasePlatform.h" -#include "platform/IEventDispatch.h" #include "platform/java/jni/JniImp.h" #include "platform/java/jni/glue/MessagePipe.h" #include "platform/java/jni/log.h" @@ -150,22 +148,6 @@ int JniNativeGlue::readCommandWithTimeout(CommandMsg* cmd, int delayMS) { return _messagePipe->readCommandWithTimeout(cmd, sizeof(CommandMsg), delayMS); } -void JniNativeGlue::setEventDispatch(IEventDispatch* eventDispatcher) { - _eventDispatcher = eventDispatcher; -} - -void JniNativeGlue::dispatchEvent(const OSEvent& ev) { - if (_eventDispatcher) { - _eventDispatcher->dispatchEvent(ev); - } -} - -void JniNativeGlue::dispatchTouchEvent(const TouchEvent& ev) { - if (_eventDispatcher) { - _eventDispatcher->dispatchTouchEvent(ev); - } -} - bool JniNativeGlue::isPause() const { if (!_animating) { return true; @@ -236,38 +218,26 @@ void JniNativeGlue::engineHandleCmd(JniCommand cmd) { isWindowInitialized = true; return; } - cc::CustomEvent event; - event.name = EVENT_RECREATE_WINDOW; - event.args->ptrVal = reinterpret_cast(getWindowHandle()); - dispatchEvent(event); + // FIXME: getWindowId + events::WindowRecreated::broadcast((uint32_t)(uintptr_t)getWindowHandle()); // NOLINT } break; case JniCommand::JNI_CMD_TERM_WINDOW: { - cc::CustomEvent event; - event.name = EVENT_DESTROY_WINDOW; - event.args->ptrVal = reinterpret_cast(getWindowHandle()); - dispatchEvent(event); + // FIXME: getWindowId + events::WindowDestroy::broadcast((uint32_t)(uintptr_t)getWindowHandle()); // NOLINT } break; case JniCommand::JNI_CMD_RESUME: { - WindowEvent ev; - ev.type = WindowEvent::Type::SHOW; - dispatchEvent(ev); + events::WindowChanged::broadcast(WindowEvent::Type::SHOW); } break; case JniCommand::JNI_CMD_PAUSE: { - WindowEvent ev; - ev.type = WindowEvent::Type::HIDDEN; - dispatchEvent(ev); + events::WindowChanged::broadcast(WindowEvent::Type::HIDDEN); } break; case JniCommand::JNI_CMD_DESTROY: { LOGV("APP_CMD_DESTROY"); - WindowEvent ev; - ev.type = WindowEvent::Type::CLOSE; - dispatchEvent(ev); + events::WindowChanged::broadcast(WindowEvent::Type::CLOSE); setRunning(false); } break; case JniCommand::JNI_CMD_LOW_MEMORY: { - DeviceEvent ev; - ev.type = DeviceEvent::Type::MEMORY; - dispatchEvent(ev); + events::LowMemory::broadcast(); break; } default: diff --git a/native/cocos/platform/java/jni/glue/JniNativeGlue.h b/native/cocos/platform/java/jni/glue/JniNativeGlue.h index c76e4c5ce9a..1ab8782717f 100644 --- a/native/cocos/platform/java/jni/glue/JniNativeGlue.h +++ b/native/cocos/platform/java/jni/glue/JniNativeGlue.h @@ -52,7 +52,6 @@ using NativeEnv = void*; //jnienv namespace cc { class IEventDispatch; -class OSEvent; class TouchEvent; class CC_DLL JniNativeGlue { @@ -104,10 +103,6 @@ class CC_DLL JniNativeGlue { int readCommand(CommandMsg* msg); int readCommandWithTimeout(CommandMsg* cmd, int delayMS); - void setEventDispatch(IEventDispatch* eventDispatcher); - void dispatchEvent(const OSEvent& ev); - void dispatchTouchEvent(const TouchEvent& ev); - void onPause(); void onResume(); void onLowMemory(); diff --git a/native/cocos/platform/java/modules/SystemWindow.cpp b/native/cocos/platform/java/modules/SystemWindow.cpp index 0fb43277be9..107a6c6a6b3 100644 --- a/native/cocos/platform/java/modules/SystemWindow.cpp +++ b/native/cocos/platform/java/modules/SystemWindow.cpp @@ -42,7 +42,7 @@ namespace { #ifndef JCLS_COCOSACTIVITY -#define JCLS_COCOSACTIVITY "com/cocos/lib/CocosActivity" + #define JCLS_COCOSACTIVITY "com/cocos/lib/CocosActivity" #endif } // namespace @@ -73,9 +73,9 @@ void SystemWindow::setWindowHandle(void *handle) { uintptr_t SystemWindow::getWindowHandle() const { #if (CC_PLATFORM == CC_PLATFORM_ANDROID) - std::lock_guard lock(const_cast(_handleMutex)); + std::lock_guard lock(const_cast(_handleMutex)); if (!_windowHandle) { - auto& future = const_cast&>(_windowHandlePromise); + auto &future = const_cast &>(_windowHandlePromise); future.get_future().get(); } CC_ASSERT(_windowHandle); @@ -101,7 +101,7 @@ void SystemWindow::closeWindow() { #if (CC_PLATFORM == CC_PLATFORM_ANDROID) finishActivity(); #else - cc::EventDispatcher::dispatchCloseEvent(); + events::Close::broadcast(); exit(0); //TODO(cc): better exit for ohos #endif } diff --git a/native/cocos/platform/java/modules/SystemWindowManager.cpp b/native/cocos/platform/java/modules/SystemWindowManager.cpp index 85bf9101661..6b1dc9b6c8b 100644 --- a/native/cocos/platform/java/modules/SystemWindowManager.cpp +++ b/native/cocos/platform/java/modules/SystemWindowManager.cpp @@ -29,7 +29,6 @@ namespace cc { -SystemWindowManager::SystemWindowManager() = default; int SystemWindowManager::init() { return 0; diff --git a/native/cocos/platform/java/modules/SystemWindowManager.h b/native/cocos/platform/java/modules/SystemWindowManager.h index bef5800bab7..7053581e051 100644 --- a/native/cocos/platform/java/modules/SystemWindowManager.h +++ b/native/cocos/platform/java/modules/SystemWindowManager.h @@ -35,7 +35,7 @@ class ISystemWindow; class SystemWindowManager : public ISystemWindowManager { public: - SystemWindowManager(); + SystemWindowManager() = default; int init() override; void processEvent(bool *quit) override; diff --git a/native/cocos/platform/java/modules/XRInterface.cpp b/native/cocos/platform/java/modules/XRInterface.cpp index 4899e131371..e584253d898 100644 --- a/native/cocos/platform/java/modules/XRInterface.cpp +++ b/native/cocos/platform/java/modules/XRInterface.cpp @@ -168,7 +168,7 @@ static void dispatchGamepadEventInternal(const xr::XRControllerEvent &xrControll controllerInfo->napdId = 0; // xr only one gamepad connection controllerEvent.controllerInfos.emplace_back(controllerInfo); controllerEvent.type = ControllerEvent::Type::GAMEPAD; - static_cast(BasePlatform::getPlatform())->dispatchEvent(controllerEvent); + events::Controller::broadcast(controllerEvent); controllerEvent.type = ControllerEvent::Type::UNKNOWN; controllerEvent.controllerInfos.clear(); } @@ -304,7 +304,8 @@ static void dispatchHandleEventInternal(const xr::XRControllerEvent &xrControlle controllerInfo->napdId = 0; // xr only one handle connection controllerEvent.controllerInfos.emplace_back(controllerInfo); controllerEvent.type = ControllerEvent::Type::HANDLE; - EventDispatcher::dispatchControllerEvent(controllerEvent); + events::Controller::broadcast(controllerEvent); + controllerEvent.type = ControllerEvent::Type::UNKNOWN; controllerEvent.controllerInfos.clear(); } else { diff --git a/native/cocos/platform/linux/LinuxPlatform.cpp b/native/cocos/platform/linux/LinuxPlatform.cpp index 6bfcd1c374c..a9984176cea 100644 --- a/native/cocos/platform/linux/LinuxPlatform.cpp +++ b/native/cocos/platform/linux/LinuxPlatform.cpp @@ -64,7 +64,7 @@ int32_t LinuxPlatform::init() { registerInterface(std::make_shared()); registerInterface(std::make_shared()); registerInterface(std::make_shared()); - _windowManager = std::make_shared(this); + _windowManager = std::make_shared(); registerInterface(_windowManager); registerInterface(std::make_shared()); return _windowManager->init(); diff --git a/native/cocos/platform/linux/modules/SystemWindow.cpp b/native/cocos/platform/linux/modules/SystemWindow.cpp index 2bad5dcfa38..84a81997d32 100644 --- a/native/cocos/platform/linux/modules/SystemWindow.cpp +++ b/native/cocos/platform/linux/modules/SystemWindow.cpp @@ -33,8 +33,7 @@ #include "SDL2/SDL.h" #include "SDL2/SDL_main.h" #include "SDL2/SDL_syswm.h" -#include "bindings/event/EventDispatcher.h" -#include "platform/IEventDispatch.h" +#include "engine/EngineEvents.h" #include "platform/SDLHelper.h" namespace cc { diff --git a/native/cocos/platform/linux/modules/SystemWindowManager.cpp b/native/cocos/platform/linux/modules/SystemWindowManager.cpp index cc3f0459819..e2e0f45f6e7 100644 --- a/native/cocos/platform/linux/modules/SystemWindowManager.cpp +++ b/native/cocos/platform/linux/modules/SystemWindowManager.cpp @@ -31,9 +31,6 @@ #include "platform/linux/modules/SystemWindow.h" namespace cc { -SystemWindowManager::SystemWindowManager(IEventDispatch *delegate) -: _eventDispatcher(delegate) { -} int SystemWindowManager::init() { return SDLHelper::init(); @@ -45,12 +42,12 @@ void SystemWindowManager::processEvent(bool *quit) { SDL_Window *sdlWindow = SDL_GetWindowFromID(sdlEvent.window.windowID); // SDL_Event like SDL_QUIT does not associate a window if (!sdlWindow) { - SDLHelper::dispatchSDLEvent(_eventDispatcher, 0, sdlEvent, quit); + SDLHelper::dispatchSDLEvent(0, sdlEvent, quit); } else { ISystemWindow *window = getWindowFromSDLWindow(sdlWindow); CC_ASSERT(window); uint32_t windowId = window->getWindowId(); - SDLHelper::dispatchSDLEvent(_eventDispatcher, windowId, sdlEvent, quit); + SDLHelper::dispatchSDLEvent(windowId, sdlEvent, quit); } if (*quit) { break; diff --git a/native/cocos/platform/linux/modules/SystemWindowManager.h b/native/cocos/platform/linux/modules/SystemWindowManager.h index c26c44567fd..c19b454fe0d 100644 --- a/native/cocos/platform/linux/modules/SystemWindowManager.h +++ b/native/cocos/platform/linux/modules/SystemWindowManager.h @@ -36,7 +36,7 @@ class ISystemWindow; class SystemWindowManager : public ISystemWindowManager { public: - SystemWindowManager(IEventDispatch *delegate); + SystemWindowManager() = default; int init() override; void processEvent(bool *quit) override; @@ -52,6 +52,5 @@ class SystemWindowManager : public ISystemWindowManager { uint32_t _nextWindowId{1}; // start from 1, 0 means an invalid ID SystemWindowMap _windows; - IEventDispatch *_eventDispatcher{nullptr}; }; } // namespace cc diff --git a/native/cocos/platform/mac/AppDelegate.mm b/native/cocos/platform/mac/AppDelegate.mm index 6d90e781ed5..53ab3288594 100644 --- a/native/cocos/platform/mac/AppDelegate.mm +++ b/native/cocos/platform/mac/AppDelegate.mm @@ -27,7 +27,7 @@ of this software and associated engine source code (the "Software"), a limited, #include "base/std/container/string.h" //#import "Game.h" #import "ViewController.h" -#include "cocos/bindings/event/EventDispatcher.h" +#include "engine/EngineEvents.h" #include "platform/mac/MacPlatform.h" @interface AppDelegate () { @@ -115,8 +115,4 @@ - (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication*)theAppli return YES; } -- (void)dispatchEvent:(const cc::OSEvent&)ev { - _platform->dispatchEvent(ev); -} - @end diff --git a/native/cocos/platform/mac/MacPlatform.mm b/native/cocos/platform/mac/MacPlatform.mm index 6e6b6c0b624..0509d60e966 100644 --- a/native/cocos/platform/mac/MacPlatform.mm +++ b/native/cocos/platform/mac/MacPlatform.mm @@ -148,7 +148,7 @@ - (void)renderScene { cc::WindowEvent ev; ev.type = cc::WindowEvent::Type::HIDDEN; - dispatchEvent(ev); + cc::events::WindowEvent::broadcast(ev); } void MacPlatform::onResume() { @@ -156,13 +156,13 @@ - (void)renderScene { cc::WindowEvent ev; ev.type = cc::WindowEvent::Type::SHOW; - dispatchEvent(ev); + cc::events::WindowEvent::broadcast(ev); } void MacPlatform::onClose() { cc::WindowEvent ev; ev.type = cc::WindowEvent::Type::CLOSE; - dispatchEvent(ev); + cc::events::WindowEvent::broadcast(ev); } cc::ISystemWindow *MacPlatform::createNativeWindow(uint32_t windowId, void *externalHandle) { diff --git a/native/cocos/platform/mac/View.mm b/native/cocos/platform/mac/View.mm index a3a858fdde0..b707ff4bcbc 100644 --- a/native/cocos/platform/mac/View.mm +++ b/native/cocos/platform/mac/View.mm @@ -87,7 +87,6 @@ - (void)mtkView:(nonnull MTKView *)view drawableSizeWillChange:(CGSize)size { ev.width = static_cast(size.width); ev.height = static_cast(size.height); [_delegate dispatchEvent:ev]; - //cc::EventDispatcher::dispatchResizeEvent(, ); } - (void)displayLayer:(CALayer *)layer { @@ -131,13 +130,7 @@ - (void)viewDidChangeBackingProperties { if (cc::EventDispatcher::initialized()) { auto *windowMgr = CC_GET_PLATFORM_INTERFACE(cc::SystemWindowManager); auto *window = windowMgr->getWindowFromNSWindow([self window]); - - cc::WindowEvent ev; - ev.type = cc::WindowEvent::Type::RESIZED; - ev.width = static_cast(width); - ev.height = static_cast(height); - ev.windowId = window->getWindowId(); - cc::EventDispatcher::dispatchResizeEvent(ev); + cc::events::Resize::broadcast(static_cast(width), static_cast(height), window->getWindowId()); } } @@ -286,7 +279,7 @@ - (void)sendMouseEvent:(int)button type:(cc::MouseEvent::Type)type event:(NSEven _mouseEvent.button = button; _mouseEvent.x = pos.x; _mouseEvent.y = contentRect.size.height - pos.y; - [_delegate dispatchEvent:_mouseEvent]; + cc::events::Mouse::broadcast(_mouseEvent); } @end diff --git a/native/cocos/platform/ohos/OhosPlatform.cpp b/native/cocos/platform/ohos/OhosPlatform.cpp index 24141a1ff79..2155e28e36f 100644 --- a/native/cocos/platform/ohos/OhosPlatform.cpp +++ b/native/cocos/platform/ohos/OhosPlatform.cpp @@ -75,7 +75,6 @@ void OhosPlatform::waitWindowInitialized() { break; } } - _jniNativeGlue->setEventDispatch(this); } int32_t OhosPlatform::loop() { diff --git a/native/cocos/platform/ohos/View.cpp b/native/cocos/platform/ohos/View.cpp index 732cab98ff0..1c3601101f5 100644 --- a/native/cocos/platform/ohos/View.cpp +++ b/native/cocos/platform/ohos/View.cpp @@ -24,13 +24,12 @@ ****************************************************************************/ #include "View.h" -#include "cocos/bindings/event/CustomEventTypes.h" -#include "cocos/bindings/event/EventDispatcher.h" +#include "engine/EngineEvents.h" #include "platform/Application.h" #include "platform/ohos//jni/JniCocosAbility.h" #include "platform/ohos/jni/AbilityConsts.h" -//NOLINTNEXTLINE +// NOLINTNEXTLINE using namespace cc::ohos; namespace cc { @@ -44,17 +43,13 @@ void View::engineHandleCmd(int cmd) { isWindowInitialized = true; return; } else { - cc::CustomEvent event; - event.name = EVENT_RECREATE_WINDOW; - event.args->ptrVal = cocosApp.pendingWindow; - cc::EventDispatcher::dispatchCustomEvent(event); + // FIXME: getWindowId + events::WindowRecreated::broadcast((uint32_t)(uintptr_t)cocosApp.pendingWindow); } break; case ABILITY_CMD_TERM_WINDOW: { - cc::CustomEvent event; - event.name = EVENT_DESTROY_WINDOW; - event.args->ptrVal = cocosApp.pendingWindow; - cc::EventDispatcher::dispatchCustomEvent(event); + // FIXME: getWindowId + events::WindowDestroy::broadcast((uint32_t)(uintptr_t)cocosApp.pendingWindow); } break; case ABILITY_CMD_RESUME: if (Application::getInstance()) { @@ -67,7 +62,7 @@ void View::engineHandleCmd(int cmd) { } break; case ABILITY_CMD_LOW_MEMORY: - cc::EventDispatcher::dispatchMemoryWarningEvent(); + events::LowMemory::broadcast(); break; default: break; diff --git a/native/cocos/platform/win32/WindowsPlatform.cpp b/native/cocos/platform/win32/WindowsPlatform.cpp index 75e446f94c1..ded80cd2d2b 100644 --- a/native/cocos/platform/win32/WindowsPlatform.cpp +++ b/native/cocos/platform/win32/WindowsPlatform.cpp @@ -98,7 +98,7 @@ int32_t WindowsPlatform::init() { registerInterface(std::make_shared()); registerInterface(std::make_shared()); registerInterface(std::make_shared()); - _windowManager = std::make_shared(this); + _windowManager = std::make_shared(); registerInterface(_windowManager); registerInterface(std::make_shared()); diff --git a/native/cocos/platform/win32/modules/SystemWindow.cpp b/native/cocos/platform/win32/modules/SystemWindow.cpp index 88c5683f5ed..c95a50f5e68 100644 --- a/native/cocos/platform/win32/modules/SystemWindow.cpp +++ b/native/cocos/platform/win32/modules/SystemWindow.cpp @@ -27,8 +27,7 @@ #include #include #include "base/Log.h" -#include "bindings/event/EventDispatcher.h" -#include "platform/IEventDispatch.h" +#include "engine/EngineEvents.h" #include "platform/SDLHelper.h" #include "platform/win32/WindowsPlatform.h" #include "sdl2/SDL_clipboard.h" diff --git a/native/cocos/platform/win32/modules/SystemWindowManager.cpp b/native/cocos/platform/win32/modules/SystemWindowManager.cpp index 125c50a7e0b..6b0eb496e48 100644 --- a/native/cocos/platform/win32/modules/SystemWindowManager.cpp +++ b/native/cocos/platform/win32/modules/SystemWindowManager.cpp @@ -32,10 +32,6 @@ namespace cc { -SystemWindowManager::SystemWindowManager(IEventDispatch *delegate) -: _eventDispatcher(delegate) { -} - int SystemWindowManager::init() { return SDLHelper::init(); } @@ -46,12 +42,12 @@ void SystemWindowManager::processEvent(bool *quit) { SDL_Window *sdlWindow = SDL_GetWindowFromID(sdlEvent.window.windowID); // SDL_Event like SDL_QUIT does not associate a window if (!sdlWindow) { - SDLHelper::dispatchSDLEvent(_eventDispatcher, 0, sdlEvent, quit); + SDLHelper::dispatchSDLEvent(0, sdlEvent, quit); } else { ISystemWindow *window = getWindowFromSDLWindow(sdlWindow); CC_ASSERT(window); uint32_t windowId = window->getWindowId(); - SDLHelper::dispatchSDLEvent(_eventDispatcher, windowId, sdlEvent, quit); + SDLHelper::dispatchSDLEvent(windowId, sdlEvent, quit); } if (*quit) { break; diff --git a/native/cocos/platform/win32/modules/SystemWindowManager.h b/native/cocos/platform/win32/modules/SystemWindowManager.h index b1f5dc85e5e..e35c844b71c 100644 --- a/native/cocos/platform/win32/modules/SystemWindowManager.h +++ b/native/cocos/platform/win32/modules/SystemWindowManager.h @@ -36,7 +36,7 @@ class ISystemWindow; class SystemWindowManager : public ISystemWindowManager { public: - explicit SystemWindowManager(IEventDispatch *delegate); + SystemWindowManager() = default; int init() override; void processEvent(bool *quit) override; @@ -52,6 +52,5 @@ class SystemWindowManager : public ISystemWindowManager { uint32_t _nextWindowId{1}; // start from 1, 0 means an invalid ID SystemWindowMap _windows; - IEventDispatch *_eventDispatcher{nullptr}; }; } // namespace cc diff --git a/native/cocos/renderer/GFXDeviceManager.h b/native/cocos/renderer/GFXDeviceManager.h index 3f619fc6f1c..8e7ebfa5fd0 100644 --- a/native/cocos/renderer/GFXDeviceManager.h +++ b/native/cocos/renderer/GFXDeviceManager.h @@ -25,8 +25,7 @@ #pragma once -#include "bindings/event/CustomEventTypes.h" -#include "bindings/event/EventDispatcher.h" +#include "engine/EngineEvents.h" #include "gfx-agent/DeviceAgent.h" #include "gfx-validator/DeviceValidator.h" diff --git a/native/cocos/renderer/gfx-base/GFXDeviceObject.h b/native/cocos/renderer/gfx-base/GFXDeviceObject.h index 96b2fc96eab..706180e4c5d 100644 --- a/native/cocos/renderer/gfx-base/GFXDeviceObject.h +++ b/native/cocos/renderer/gfx-base/GFXDeviceObject.h @@ -23,6 +23,7 @@ THE SOFTWARE. #include "base/Ptr.h" #include "base/Macros.h" +#include namespace cc { namespace gfx { diff --git a/native/cocos/renderer/gfx-metal/MTLDevice.mm b/native/cocos/renderer/gfx-metal/MTLDevice.mm index f9fd4f946d1..b53abcdd963 100644 --- a/native/cocos/renderer/gfx-metal/MTLDevice.mm +++ b/native/cocos/renderer/gfx-metal/MTLDevice.mm @@ -43,8 +43,6 @@ of this software and associated engine source code (the "Software"), a limited, #import "MTLSwapchain.h" #import "MTLTexture.h" #import "base/Log.h" -#import "cocos/bindings/event/CustomEventTypes.h" -#import "cocos/bindings/event/EventDispatcher.h" #import "profiler/Profiler.h" @@ -142,8 +140,6 @@ of this software and associated engine source code (the "Software"), a limited, cmdBuffInfo.queue = _queue; _cmdBuff = createCommandBuffer(cmdBuffInfo); - // _memoryAlarmListenerId = EventDispatcher::addCustomEventListener(EVENT_MEMORY_WARNING, std::bind(&CCMTLDevice::onMemoryWarning, this)); - CCMTLGPUGarbageCollectionPool::getInstance()->initialize(std::bind(&CCMTLDevice::currentFrameIndex, this)); CC_LOG_INFO("Metal Feature Set: %s", mu::featureSetToString(MTLFeatureSet(_mtlFeatureSet)).c_str()); @@ -152,10 +148,6 @@ of this software and associated engine source code (the "Software"), a limited, } void CCMTLDevice::doDestroy() { - // if (_memoryAlarmListenerId != 0) { - // EventDispatcher::removeCustomEventListener(EVENT_MEMORY_WARNING, _memoryAlarmListenerId); - // _memoryAlarmListenerId = 0; - // } CC_SAFE_DELETE(_gpuDeviceObj); diff --git a/native/cocos/scene/Model.cpp b/native/cocos/scene/Model.cpp index 988935e8619..bde5b4832c5 100644 --- a/native/cocos/scene/Model.cpp +++ b/native/cocos/scene/Model.cpp @@ -28,7 +28,6 @@ #include "core/Root.h" #include "core/TypedArray.h" #include "core/assets/Material.h" -#include "core/event/EventTypesToJS.h" #include "gfx-base/GFXTexture.h" #include "gi/light-probe/LightProbe.h" #include "gi/light-probe/SH.h" @@ -105,7 +104,7 @@ void Model::updateTransform(uint32_t stamp) { CC_PROFILE(ModelUpdateTransform); if (isModelImplementedInJS()) { if (!_isCalledFromJS) { - _eventProcessor.emit(EventTypesToJS::MODEL_UPDATE_TRANSFORM, stamp); + emit(stamp); _isCalledFromJS = false; return; } @@ -155,7 +154,7 @@ void Model::updateUBOs(uint32_t stamp) { CC_PROFILE(ModelUpdateUBOs); if (isModelImplementedInJS()) { if (!_isCalledFromJS) { - _eventProcessor.emit(EventTypesToJS::MODEL_UPDATE_UBO, stamp); + emit(stamp); _isCalledFromJS = false; return; } @@ -371,7 +370,7 @@ ccstd::vector Model::getMacroPatches(index_t subModelIndex) { if (isModelImplementedInJS()) { if (!_isCalledFromJS) { ccstd::vector macroPatches; - _eventProcessor.emit(EventTypesToJS::MODEL_GET_MACRO_PATCHES, subModelIndex, ¯oPatches); + emit(subModelIndex, ¯oPatches); _isCalledFromJS = false; return macroPatches; } @@ -414,7 +413,7 @@ void Model::updateAttributesAndBinding(index_t subModelIndex) { void Model::updateInstancedAttributes(const ccstd::vector &attributes, SubModel *subModel) { if (isModelImplementedInJS()) { if (!_isCalledFromJS) { - _eventProcessor.emit(EventTypesToJS::MODEL_UPDATE_INSTANCED_ATTRIBUTES, attributes, subModel); + emit(attributes, subModel); // FIXME _isCalledFromJS = false; return; } @@ -467,7 +466,7 @@ void Model::initWorldBoundDescriptors(index_t /*subModelIndex*/) { void Model::updateLocalDescriptors(index_t subModelIndex, gfx::DescriptorSet *descriptorSet) { if (isModelImplementedInJS()) { if (!_isCalledFromJS) { - _eventProcessor.emit(EventTypesToJS::MODEL_UPDATE_LOCAL_DESCRIPTORS, subModelIndex, descriptorSet); + emit(subModelIndex, descriptorSet); _isCalledFromJS = false; return; } @@ -481,7 +480,7 @@ void Model::updateLocalDescriptors(index_t subModelIndex, gfx::DescriptorSet *de void Model::updateLocalSHDescriptors(index_t subModelIndex, gfx::DescriptorSet *descriptorSet) { if (isModelImplementedInJS()) { if (!_isCalledFromJS) { - _eventProcessor.emit(EventTypesToJS::MODEL_UPDATE_LOCAL_SH_DESCRIPTORS, subModelIndex, descriptorSet); + emit(subModelIndex, descriptorSet); _isCalledFromJS = false; return; } @@ -495,7 +494,7 @@ void Model::updateLocalSHDescriptors(index_t subModelIndex, gfx::DescriptorSet * void Model::updateWorldBoundDescriptors(index_t subModelIndex, gfx::DescriptorSet *descriptorSet) { if (isModelImplementedInJS()) { if (!_isCalledFromJS) { - _eventProcessor.emit(EventTypesToJS::MODEL_UPDATE_WORLD_BOUND_DESCRIPTORS, subModelIndex, descriptorSet); + emit(subModelIndex, descriptorSet); _isCalledFromJS = false; return; } diff --git a/native/cocos/scene/Model.h b/native/cocos/scene/Model.h index 1defc4751f6..ac37a6543f4 100644 --- a/native/cocos/scene/Model.h +++ b/native/cocos/scene/Model.h @@ -33,7 +33,7 @@ #include "core/assets/RenderingSubMesh.h" #include "core/assets/Texture2D.h" #include "core/builtin/BuiltinResMgr.h" -#include "core/event/CallbacksInvoker.h" +#include "core/event/EventTarget.h" #include "core/geometry/AABB.h" #include "core/scene-graph/Layers.h" #include "core/scene-graph/Node.h" @@ -57,7 +57,18 @@ class Octree; class Pass; struct IMacroPatch; -class Model : public RefCounted { +class Model : public RefCounted, public event::EventTarget { + IMPL_EVENT_TARGET(Model) + + DECLARE_TARGET_EVENT_BEGIN(Model) + TARGET_EVENT_ARG1(UpdateTransform, uint32_t) + TARGET_EVENT_ARG1(UpdateUBO, uint32_t) + TARGET_EVENT_ARG2(UpdateLocalSHDescriptor, index_t, gfx::DescriptorSet *) + TARGET_EVENT_ARG2(UpdateLocalDescriptors, index_t, gfx::DescriptorSet *) + TARGET_EVENT_ARG2(UpdateWorldBound, index_t, gfx::DescriptorSet *) + TARGET_EVENT_ARG2(UpdateInstancedAttributes, const std::vector &, SubModel *) + TARGET_EVENT_ARG2(GetMacroPatches, index_t, std::vector *) + DECLARE_TARGET_EVENT_END() public: enum class Type { DEFAULT, @@ -170,7 +181,6 @@ class Model : public RefCounted { // For JS inline void setCalledFromJS(bool v) { _isCalledFromJS = v; } - inline CallbacksInvoker &getEventProcessor() { return _eventProcessor; } inline void setLocalDataUpdated(bool v) { _localDataUpdated = v; } inline void setWorldBounds(geometry::AABB *bounds) { _worldBounds = bounds; @@ -225,7 +235,7 @@ class Model : public RefCounted { Vec4 _lightmapUVParam; // For JS - CallbacksInvoker _eventProcessor; + // CallbacksInvoker _eventProcessor; ccstd::vector> _subModels; private: diff --git a/native/cocos/ui/edit-box/EditBox-android.cpp b/native/cocos/ui/edit-box/EditBox-android.cpp index 7deab95cbf6..5c63e888ef4 100644 --- a/native/cocos/ui/edit-box/EditBox-android.cpp +++ b/native/cocos/ui/edit-box/EditBox-android.cpp @@ -24,7 +24,7 @@ ****************************************************************************/ #include "EditBox.h" -#include "cocos/bindings/event/EventDispatcher.h" +#include "engine/EngineEvents.h" #include "cocos/bindings/jswrapper/SeApi.h" #include "cocos/bindings/manual/jsb_global.h" #include "platform/java/jni/JniHelper.h" diff --git a/native/cocos/ui/edit-box/EditBox-ios.mm b/native/cocos/ui/edit-box/EditBox-ios.mm index c79162b0b2d..06eb1aea71a 100644 --- a/native/cocos/ui/edit-box/EditBox-ios.mm +++ b/native/cocos/ui/edit-box/EditBox-ios.mm @@ -53,8 +53,7 @@ of this software and associated engine source code (the "Software"), a limited, #include "EditBox.h" #include "cocos/bindings/jswrapper/SeApi.h" #include "cocos/bindings/manual/jsb_global.h" -#include "cocos/bindings/event/EventDispatcher.h" -#include "cocos/bindings/event/CustomEventTypes.h"" +#include "engine/EngineEvents.h" #import #define ITEM_MARGIN_WIDTH 10 @@ -289,6 +288,10 @@ @implementation EditboxManager //recently there'ill be only 2 elements NSMutableDictionary* textInputDictionnary; InputBoxPair* curView; + + cc::events::Resize::Listener resizeListener; + cc::events::Touch::Listener touchListener; + cc::events::Close::Listener closeListener; } static EditboxManager *instance = nil; @@ -322,14 +325,17 @@ - (id)init { return nil; } - cc::EventDispatcher::addCustomEventListener(EVENT_RESIZE, [&](const cc::CustomEvent& event) -> void { + resizeListener.bind([&](int /*width*/, int /*height*/ , uint32_t /*windowId*/) { [[EditboxManager sharedInstance] onOrientationChanged]; }); //"onTouchStart" is a sub event for TouchEvent, so we can only add listener for this sub event rather than TouchEvent itself. - cc::EventDispatcher::addCustomEventListener("onTouchStart", [&](const cc::CustomEvent& event) -> void { - cc::EditBox::complete(); + touchListener.bind([&](const cc::TouchEvent& event) { + if(event.type == cc::TouchEvent::Type::BEGAN) { + cc::EditBox::complete(); + } }); - cc::EventDispatcher::addCustomEventListener(EVENT_CLOSE, [&](const cc::CustomEvent& event) -> void { + + closeListener.bind([&]() { [[EditboxManager sharedInstance] dealloc]; }); } diff --git a/native/cocos/ui/edit-box/EditBox-ohos.cpp b/native/cocos/ui/edit-box/EditBox-ohos.cpp index 5b7e2af3729..5f07fd2edeb 100644 --- a/native/cocos/ui/edit-box/EditBox-ohos.cpp +++ b/native/cocos/ui/edit-box/EditBox-ohos.cpp @@ -24,7 +24,7 @@ ****************************************************************************/ #include "EditBox.h" -#include "cocos/bindings/event/EventDispatcher.h" +#include "engine/EngineEvents.h" #include "cocos/bindings/jswrapper/SeApi.h" #include "cocos/bindings/manual/jsb_global.h" //#include "platform/Application.h" diff --git a/native/tests/.gitignore b/native/tests/.gitignore new file mode 100644 index 00000000000..5bd65451aef --- /dev/null +++ b/native/tests/.gitignore @@ -0,0 +1 @@ +unit-test-win64 diff --git a/native/tools/simulator/frameworks/runtime-src/Classes/Game.cpp b/native/tools/simulator/frameworks/runtime-src/Classes/Game.cpp index 92d899a8c3a..e9b788c8f97 100644 --- a/native/tools/simulator/frameworks/runtime-src/Classes/Game.cpp +++ b/native/tools/simulator/frameworks/runtime-src/Classes/Game.cpp @@ -24,8 +24,6 @@ ****************************************************************************/ #include "Game.h" #include "cocos/application/ApplicationManager.h" -#include "cocos/bindings/event/CustomEventTypes.h" -#include "cocos/bindings/event/EventDispatcher.h" #include "cocos/bindings/jswrapper/SeApi.h" #include "cocos/bindings/manual/jsb_classtype.h" #include "cocos/bindings/manual/jsb_global.h" diff --git a/native/tools/simulator/frameworks/runtime-src/proj.ios_mac/mac/SimulatorApp.h b/native/tools/simulator/frameworks/runtime-src/proj.ios_mac/mac/SimulatorApp.h index 10e4892aa47..5d3e3061aee 100755 --- a/native/tools/simulator/frameworks/runtime-src/proj.ios_mac/mac/SimulatorApp.h +++ b/native/tools/simulator/frameworks/runtime-src/proj.ios_mac/mac/SimulatorApp.h @@ -2,19 +2,19 @@ Copyright (c) 2010 cocos2d-x.org Copyright (c) 2013-2016 Chukong Technologies Inc. Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. - + http://www.cocos2d-x.org - + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -24,14 +24,13 @@ THE SOFTWARE. ****************************************************************************/ - //#import //#import "ConsoleWindowController.h" #include +#include "Game.h" #include "ProjectConfig/ProjectConfig.h" #include "ProjectConfig/SimulatorConfig.h" -#include "Game.h" class SimulatorApp { public: @@ -40,6 +39,7 @@ class SimulatorApp { int run(); virtual int getWidth() const; virtual int getHegith() const; + protected: SimulatorApp(); diff --git a/native/tools/simulator/frameworks/runtime-src/proj.ios_mac/mac/SimulatorApp.mm b/native/tools/simulator/frameworks/runtime-src/proj.ios_mac/mac/SimulatorApp.mm index 6daa8746d1f..989eac59cab 100755 --- a/native/tools/simulator/frameworks/runtime-src/proj.ios_mac/mac/SimulatorApp.mm +++ b/native/tools/simulator/frameworks/runtime-src/proj.ios_mac/mac/SimulatorApp.mm @@ -65,6 +65,8 @@ @interface AppController : NSObject //console pipe NSPipe *_pipe; NSFileHandle *_pipeReadHandle; + + SimulatorAppEvent::Listener _appListener; } @property (nonatomic, assign) IBOutlet NSMenu* menu; @@ -532,10 +534,9 @@ - (void) setupUI ProjectConfig &project = _project; - EventDispatcher::CustomEventListener listener = [self, &project, scaleMenuVector](const CustomEvent& event){ - auto menuEvent = dynamic_cast(event); + _appListener.bind([self, &project, scaleMenuVector](const CustomAppEvent& menuEvent){ rapidjson::Document dArgParse; - dArgParse.Parse<0>(menuEvent.getDataString().c_str()); + dArgParse.Parse<0>(menuEvent.dataString.c_str()); if (dArgParse.HasMember("name")) { @@ -543,7 +544,7 @@ - (void) setupUI if (strcmd == "menuClicked") { - player::PlayerMenuItem *menuItem = static_cast(menuEvent.args[0].ptrVal); + player::PlayerMenuItem *menuItem = reinterpret_cast(menuEvent.menuItem); if (menuItem) { if (menuItem->isChecked()) @@ -609,8 +610,7 @@ - (void) setupUI } } } - }; - EventDispatcher::addCustomEventListener(kAppEventName, listener); + }); } diff --git a/native/tools/simulator/frameworks/runtime-src/proj.win32/SimulatorApp.cpp b/native/tools/simulator/frameworks/runtime-src/proj.win32/SimulatorApp.cpp index 419a28c2f54..67a4c82345a 100644 --- a/native/tools/simulator/frameworks/runtime-src/proj.win32/SimulatorApp.cpp +++ b/native/tools/simulator/frameworks/runtime-src/proj.win32/SimulatorApp.cpp @@ -467,15 +467,14 @@ void SimulatorApp::setupUI() { HWND& hwnd = _hwnd; ProjectConfig& project = _project; - EventDispatcher::CustomEventListener listener = [this, &hwnd, &project, scaleMenuVector](const CustomEvent& event) { - auto menuEvent = dynamic_cast(event); + _appListener.bind([this, &hwnd, &project, scaleMenuVector](const CustomAppEvent& menuEvent) { rapidjson::Document dArgParse; - dArgParse.Parse<0>(menuEvent.getDataString().c_str()); + dArgParse.Parse<0>(menuEvent.dataString.c_str()); if (dArgParse.HasMember("name")) { string strcmd = dArgParse["name"].GetString(); if (strcmd == "menuClicked") { - player::PlayerMenuItem* menuItem = static_cast(menuEvent.args[0].ptrVal); + player::PlayerMenuItem* menuItem = reinterpret_cast(menuEvent.menuItem); if (menuItem) { if (menuItem->isChecked()) { return; @@ -524,8 +523,7 @@ void SimulatorApp::setupUI() { } } } - }; - EventDispatcher::addCustomEventListener(kAppEventName, listener); + }); } void SimulatorApp::setZoom(float frameScale) { @@ -707,15 +705,14 @@ LRESULT CALLBACK SimulatorApp::windowProc(HWND hWnd, UINT uMsg, WPARAM wParam, L auto menuItem = menuService->getItemByCommandId(menuId); if (menuItem) { CustomAppEvent event(kAppEventName, APP_EVENT_MENU); - std::stringstream buf; buf << "{\"data\":\"" << menuItem->getMenuId().c_str() << "\""; buf << ",\"name\":" << "\"menuClicked\"" << "}"; - event.setDataString(buf.str()); - event.args[0].ptrVal = (void*)menuItem; - cc::EventDispatcher::dispatchCustomEvent(event); + event.dataString = buf.str(); + event.menuItem = (void*)menuItem; + SimulatorAppEvent::broadcast(event); } if (menuId == ID_HELP_ABOUT) { diff --git a/native/tools/simulator/frameworks/runtime-src/proj.win32/SimulatorApp.h b/native/tools/simulator/frameworks/runtime-src/proj.win32/SimulatorApp.h index 73769f08b6f..5dc858b3afc 100644 --- a/native/tools/simulator/frameworks/runtime-src/proj.win32/SimulatorApp.h +++ b/native/tools/simulator/frameworks/runtime-src/proj.win32/SimulatorApp.h @@ -25,6 +25,7 @@ #pragma once +#include "CustomAppEvent.h" #include "Game.h" #include "ProjectConfig/ProjectConfig.h" #include "ProjectConfig/SimulatorConfig.h" @@ -55,12 +56,14 @@ class SimulatorApp { SimulatorApp(); static SimulatorApp *_instance; - ProjectConfig _project; - HWND _hwnd; - HWND _hwndConsole; + ProjectConfig _project; + HWND _hwnd; + HWND _hwndConsole; FILE *_writeDebugLogFile; + SimulatorAppEvent::Listener _appListener; + // void setupUI(); void setZoom(float frameScale); @@ -76,10 +79,10 @@ class SimulatorApp { void onDrop(const std::string &path); // helper - std::string convertPathFormatToUnixStyle(const std::string &path); - std::string getUserDocumentPath(); - std::string getApplicationExePath(); - std::string getApplicationPath(); + std::string convertPathFormatToUnixStyle(const std::string &path); + std::string getUserDocumentPath(); + std::string getApplicationExePath(); + std::string getApplicationPath(); static char *convertTCharToUtf8(const TCHAR *src); static LRESULT CALLBACK windowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); diff --git a/native/tools/simulator/libsimulator/CMakeLists.txt b/native/tools/simulator/libsimulator/CMakeLists.txt index e740bc4f657..78f6d24d83d 100644 --- a/native/tools/simulator/libsimulator/CMakeLists.txt +++ b/native/tools/simulator/libsimulator/CMakeLists.txt @@ -93,7 +93,6 @@ libsimulator_source_files( lib/runtime/VisibleRect.h ) libsimulator_source_files( - lib/CustomAppEvent.cpp lib/CustomAppEvent.h lib/AppLang.cpp lib/AppLang.h diff --git a/native/tools/simulator/libsimulator/lib/CustomAppEvent.h b/native/tools/simulator/libsimulator/lib/CustomAppEvent.h index 9efd3b65320..bac0c49a3c6 100644 --- a/native/tools/simulator/libsimulator/lib/CustomAppEvent.h +++ b/native/tools/simulator/libsimulator/lib/CustomAppEvent.h @@ -39,8 +39,7 @@ #include "json/stringbuffer.h" #include "json/writer.h" -#include "cocos/bindings/event/CustomEventTypes.h" -#include "cocos/bindings/event/EventDispatcher.h" +#include "cocos/core/event/EventBus.h" enum { APP_EVENT_MENU = 1, @@ -49,23 +48,17 @@ enum { #define kAppEventName "APP.EVENT" -class CC_LIBSIM_DLL CustomAppEvent : public cc::CustomEvent { -public: +struct CC_LIBSIM_DLL CustomAppEvent final { /** Constructor */ - CustomAppEvent(const std::string &eventName, int type); + CustomAppEvent(const std::string &eventName, int type) : eventName(eventName), eventType(type) {} - /** Gets event name */ - inline const std::string &getEventName() const { return _eventName; }; - - void setEventType(int type); - int getEventType(); - void setDataString(std::string data); - std::string getDataString(); - -protected: - std::string _eventName; - std::string _dataString; - int _eventType; + std::string eventName; + std::string dataString; + int eventType; + void *menuItem{nullptr}; }; +DECLARE_EVENT_BUS(Simulator) +DECLARE_BUS_EVENT_ARG1(SimulatorAppEvent, Simulator, const CustomAppEvent &) + #endif /* defined(__Simulator__AppEvent__) */ diff --git a/native/tools/simulator/libsimulator/lib/platform/mac/PlayerMenuServiceMac.mm b/native/tools/simulator/libsimulator/lib/platform/mac/PlayerMenuServiceMac.mm index 94985d0028f..73fb4120aa4 100755 --- a/native/tools/simulator/libsimulator/lib/platform/mac/PlayerMenuServiceMac.mm +++ b/native/tools/simulator/libsimulator/lib/platform/mac/PlayerMenuServiceMac.mm @@ -115,9 +115,9 @@ -(void) onClicked:(id)sender std::stringstream buf; buf << "{\"data\":\"" << self.macMenuItem->getMenuId().c_str() << "\""; buf << ",\"name\":" << "\"menuClicked\"" << "}"; - event.setDataString(buf.str()); - event.args[0].ptrVal = (void*)self.macMenuItem; - cc::EventDispatcher::dispatchCustomEvent(event); + event.dataString = buf.str(); + event.menuItem = (void*)self.macMenuItem; + SimulatorAppEvent::broadcast(event); } -(BOOL) validateMenuItem:(NSMenuItem *)menuItem diff --git a/native/tools/swig-config/2d.i b/native/tools/swig-config/2d.i index 001d181ecf7..53810c12162 100644 --- a/native/tools/swig-config/2d.i +++ b/native/tools/swig-config/2d.i @@ -169,6 +169,8 @@ %import "base/memory/Memory.h" %import "base/RefCounted.h" +%import "core/event/Event.h" + %import "renderer/gfx-base/GFXObject.h" %import "renderer/gfx-base/GFXDef-common.h" %import "renderer/gfx-base/GFXInputAssembler.h" diff --git a/native/tools/swig-config/assets.i b/native/tools/swig-config/assets.i index b9eaede4df7..b6f2a701d4b 100644 --- a/native/tools/swig-config/assets.i +++ b/native/tools/swig-config/assets.i @@ -184,6 +184,8 @@ %import "base/Ptr.h" %import "base/memory/Memory.h" +%import "core/event/Event.h" + %include "core/Types.h" %import "core/ArrayBuffer.h" diff --git a/native/tools/swig-config/physics.i b/native/tools/swig-config/physics.i index f1c37a92648..9f448d75e96 100644 --- a/native/tools/swig-config/physics.i +++ b/native/tools/swig-config/physics.i @@ -81,6 +81,7 @@ // %import "your_header_file.h" will not generate code for that header file // %import "base/Macros.h" +%import "core/event/Event.h" %import "core/scene-graph/Node.h" %import "core/geometry/Enums.h" diff --git a/native/tools/swig-config/pipeline.i b/native/tools/swig-config/pipeline.i index 3ea8ee5d569..882fdf8ef12 100644 --- a/native/tools/swig-config/pipeline.i +++ b/native/tools/swig-config/pipeline.i @@ -187,6 +187,8 @@ using namespace cc; %import "math/Mat4.h" %import "math/Quaternion.h" +%import "core/event/Event.h" + %import "core/assets/Material.h" %import "renderer/gfx-base/GFXDef-common.h" diff --git a/native/tools/swig-config/scene.i b/native/tools/swig-config/scene.i index ac316a5f37e..f7534df1f5a 100644 --- a/native/tools/swig-config/scene.i +++ b/native/tools/swig-config/scene.i @@ -69,6 +69,9 @@ using namespace cc; %ignore cc::scene::Pass::getBlocks; %ignore cc::scene::Pass::initPassFromTarget; +%ignore cc::Root::getEventProcessor; +%ignore cc::Node::getEventProcessor; + %ignore cc::Node::setRTSInternal; %ignore cc::Node::setRTS; %ignore cc::scene::Camera::syncCameraEditor; @@ -516,6 +519,8 @@ using namespace cc; %import "math/Mat4.h" %import "math/Quaternion.h" +%import "core/event/Event.h" + // %import "renderer/gfx-base/GFXDef-common.h" %import "core/data/Object.h" %import "renderer/pipeline/RenderPipeline.h" diff --git a/native/utils/compile_file.js b/native/utils/compile_file.js index 651a978c486..d20e4f4754c 100644 --- a/native/utils/compile_file.js +++ b/native/utils/compile_file.js @@ -5,7 +5,7 @@ const path = require('path'); const child_process = require('child_process'); const fp = path.join(__dirname, '..', 'compile_commands.json'); -if(!fs.existsSync(fp)) { +if (!fs.existsSync(fp)) { console.error(`File ${fp} is not exists!`); process.exit(-1); } @@ -13,21 +13,33 @@ if(!fs.existsSync(fp)) { const db = JSON.parse(fs.readFileSync(fp).toString('utf8')); let fileName = process.argv[2]; -if(!fileName) { +if (!fileName) { console.error(`argument: file not provided!`); process.exit(-1); } fileName = path.normalize(fileName); -for(let item of db) { +for (let item of db) { let up = path.normalize(item.file); - if(up.indexOf(fileName) > -1) { + if (up.indexOf(fileName) > -1) { console.log(`compiling file ${up}`); - let result = child_process.execSync(item.command, {cwd: item.directory, shell: true}); + console.log("################################################################################"); + console.log("################################################################################"); + console.log("################################################################################"); + console.log(up); + console.log("################################################################################"); + console.log("################################################################################"); + console.log("################################################################################"); + let result = child_process.execSync(item.command, { cwd: item.directory, shell: true }); console.log(result.toString('utf-8')); + console.log("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"); + console.log("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"); + console.log("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"); + console.log("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"); + console.log("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"); process.exit(-1); } } -console.error(' file not found '+ fileName); \ No newline at end of file +console.error(' file not found ' + fileName); \ No newline at end of file From fcd9c516dfbfdc83a9acf24edc3a847228fc458d Mon Sep 17 00:00:00 2001 From: troublemaker52025 Date: Fri, 28 Oct 2022 15:45:44 +0800 Subject: [PATCH 104/829] [fix] shader compilation error: vs uniform exceeded (#13174) --- cocos/rendering/define.ts | 2 +- cocos/root.ts | 5 +++-- native/cocos/core/Root.cpp | 4 ++-- native/cocos/renderer/pipeline/Define.cpp | 2 +- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/cocos/rendering/define.ts b/cocos/rendering/define.ts index 8c249649c8d..af936091f69 100644 --- a/cocos/rendering/define.ts +++ b/cocos/rendering/define.ts @@ -315,7 +315,7 @@ export class UBOCSM { public static readonly NAME = 'CCCSM'; public static readonly BINDING = PipelineGlobalBindings.UBO_CSM; - public static readonly DESCRIPTOR = new DescriptorSetLayoutBinding(UBOCSM.BINDING, DescriptorType.UNIFORM_BUFFER, 1, ShaderStageFlagBit.ALL); + public static readonly DESCRIPTOR = new DescriptorSetLayoutBinding(UBOCSM.BINDING, DescriptorType.UNIFORM_BUFFER, 1, ShaderStageFlagBit.FRAGMENT); public static readonly LAYOUT = new UniformBlock(SetIndex.GLOBAL, UBOCSM.BINDING, UBOCSM.NAME, [ new Uniform('cc_csmViewDir0', Type.FLOAT4, UBOCSM.CSM_LEVEL_COUNT), new Uniform('cc_csmViewDir1', Type.FLOAT4, UBOCSM.CSM_LEVEL_COUNT), diff --git a/cocos/root.ts b/cocos/root.ts index ba378ec1b76..25a1d5e1d4b 100644 --- a/cocos/root.ts +++ b/cocos/root.ts @@ -38,7 +38,7 @@ import { ColorAttachment, DepthStencilAttachment, RenderPassInfo, StoreOp, Devic import { Pipeline, PipelineRuntime } from './rendering/custom/pipeline'; import { Batcher2D } from './2d/renderer/batcher-2d'; import { IPipelineEvent } from './rendering/pipeline-event'; -import { localDescriptorSetLayout_ResizeMaxJoints } from './rendering/define'; +import { localDescriptorSetLayout_ResizeMaxJoints, UBOCamera, UBOGlobal, UBOLocal, UBOShadow } from './rendering/define'; /** * @en Initialization information for the Root @@ -710,7 +710,8 @@ export class Root { } private _resizeMaxJointForDS () { - let maxJoints = Math.floor((deviceManager.gfxDevice.capabilities.maxVertexUniformVectors - 38) / 3); + const usedUBOVectorCount = (UBOGlobal.COUNT + UBOCamera.COUNT + UBOShadow.COUNT + UBOLocal.COUNT) / 4; + let maxJoints = Math.floor((deviceManager.gfxDevice.capabilities.maxVertexUniformVectors - usedUBOVectorCount) / 3); maxJoints = maxJoints < 256 ? maxJoints : 256; localDescriptorSetLayout_ResizeMaxJoints(maxJoints); } diff --git a/native/cocos/core/Root.cpp b/native/cocos/core/Root.cpp index 8a29945e177..bcde6a52ed8 100644 --- a/native/cocos/core/Root.cpp +++ b/native/cocos/core/Root.cpp @@ -86,8 +86,8 @@ void Root::initialize(gfx::Swapchain * /*swapchain*/) { addWindowEventListener(); // TODO(minggo): // return Promise.resolve(builtinResMgr.initBuiltinRes(this._device)); - - uint32_t maxJoints = (_device->getCapabilities().maxVertexUniformVectors - 38) / 3; + const uint32_t usedUBOVectorCount = (pipeline::UBOGlobal::COUNT + pipeline::UBOCamera::COUNT + pipeline::UBOShadow::COUNT + pipeline::UBOLocal::COUNT) / 4; + uint32_t maxJoints = (_device->getCapabilities().maxVertexUniformVectors - usedUBOVectorCount) / 3; maxJoints = maxJoints < 256 ? maxJoints : 256; pipeline::localDescriptorSetLayoutResizeMaxJoints(maxJoints); } diff --git a/native/cocos/renderer/pipeline/Define.cpp b/native/cocos/renderer/pipeline/Define.cpp index 9484c73fdae..f047c639ad5 100644 --- a/native/cocos/renderer/pipeline/Define.cpp +++ b/native/cocos/renderer/pipeline/Define.cpp @@ -166,7 +166,7 @@ const gfx::DescriptorSetLayoutBinding UBOCSM::DESCRIPTOR = { UBOCSM::BINDING, gfx::DescriptorType::UNIFORM_BUFFER, 1, - gfx::ShaderStageFlagBit::ALL, + gfx::ShaderStageFlagBit::FRAGMENT, {}, }; const gfx::UniformBlock UBOCSM::LAYOUT = { From 612b44238410064ea3da6c5798f69d9f1145b32f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=90=89=E6=9E=97?= <798080536@qq.com> Date: Fri, 28 Oct 2022 15:58:16 +0800 Subject: [PATCH 105/829] reset tetrahedronIndex (#13176) --- cocos/render-scene/scene/model.ts | 2 +- cocos/scene-graph/scene-globals.ts | 19 +++++++++++++++++++ native/cocos/scene/Model.h | 2 +- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/cocos/render-scene/scene/model.ts b/cocos/render-scene/scene/model.ts index d9c5c9a42b9..29d40bcad7c 100644 --- a/cocos/render-scene/scene/model.ts +++ b/cocos/render-scene/scene/model.ts @@ -431,7 +431,7 @@ export class Model { * @en located tetrahedron index * @zh 所处的四面体索引 */ - private _tetrahedronIndex = 0; + private _tetrahedronIndex = -1; private _lastWorldBoundCenter = new Vec3(Infinity, Infinity, Infinity); private _useLightProbe = false; diff --git a/cocos/scene-graph/scene-globals.ts b/cocos/scene-graph/scene-globals.ts index 9f4119366d0..6c46e6a39a4 100644 --- a/cocos/scene-graph/scene-globals.ts +++ b/cocos/scene-graph/scene-globals.ts @@ -1312,6 +1312,7 @@ export class LightProbeInfo { const pointCount = points.length; if (pointCount < 4) { warnID(17000); + this.resetTetraIndices(); this._data!.reset(); return; } @@ -1319,9 +1320,27 @@ export class LightProbeInfo { this._data!.updateProbes(points); if (updateTet) { + this.resetTetraIndices(); this._data!.updateTetrahedrons(); } } + + private resetTetraIndices () { + const scene = legacyCC.director.getScene(); + if (!scene) { + return; + } + + const renderScene = scene.renderScene; + if (!renderScene) { + return; + } + + const models = renderScene.models; + for (let i = 0; i < models.length; i++) { + models[i].tetrahedronIndex = -1; + } + } } legacyCC.internal.LightProbeInfo = LightProbeInfo; diff --git a/native/cocos/scene/Model.h b/native/cocos/scene/Model.h index ac37a6543f4..f548db7fb74 100644 --- a/native/cocos/scene/Model.h +++ b/native/cocos/scene/Model.h @@ -217,7 +217,7 @@ class Model : public RefCounted, public event::EventTarget { IntrusivePtr _modelBounds; IntrusivePtr _lightmap; - int32_t _tetrahedronIndex{0}; + int32_t _tetrahedronIndex{-1}; Vec3 _lastWorldBoundCenter{INFINITY, INFINITY, INFINITY}; bool _useLightProbe = false; From 80415048df51944f3b0ed4e1a693e9fc7d0482ad Mon Sep 17 00:00:00 2001 From: bofeng-song Date: Fri, 28 Oct 2022 18:29:53 +0800 Subject: [PATCH 106/829] native implement for LOD (#13167) * native implement for LOD --- cocos/render-scene/scene/index.jsb.ts | 3 + cocos/render-scene/scene/lod-group.ts | 21 +- cocos/rendering/lod-models-utils.ts | 8 +- native/CMakeLists.txt | 4 + native/cocos/bindings/auto/jsb_scene_auto.cpp | 1019 ++++++++++++++--- native/cocos/bindings/auto/jsb_scene_auto.h | 11 + .../cocos/renderer/pipeline/LODModelsUtil.cpp | 98 ++ .../cocos/renderer/pipeline/LODModelsUtil.h | 44 + .../renderer/pipeline/PlanarShadowQueue.cpp | 6 + .../cocos/renderer/pipeline/SceneCulling.cpp | 18 +- native/cocos/scene/LODGroup.cpp | 120 ++ native/cocos/scene/LODGroup.h | 112 ++ native/cocos/scene/RenderScene.cpp | 23 + native/cocos/scene/RenderScene.h | 7 + native/tools/swig-config/scene.i | 18 + 15 files changed, 1357 insertions(+), 155 deletions(-) create mode 100644 native/cocos/renderer/pipeline/LODModelsUtil.cpp create mode 100644 native/cocos/renderer/pipeline/LODModelsUtil.h create mode 100644 native/cocos/scene/LODGroup.cpp create mode 100644 native/cocos/scene/LODGroup.h diff --git a/cocos/render-scene/scene/index.jsb.ts b/cocos/render-scene/scene/index.jsb.ts index ea57decd0fc..7a3af915b05 100644 --- a/cocos/render-scene/scene/index.jsb.ts +++ b/cocos/render-scene/scene/index.jsb.ts @@ -30,6 +30,9 @@ export type Ambient = jsb.Ambient; export const Ambient = jsb.Ambient; legacyCC.Ambient = Ambient; +export const LODData = jsb.LODData; +export const LODGroup = jsb.LODGroup; + /** * Light related. */ diff --git a/cocos/render-scene/scene/lod-group.ts b/cocos/render-scene/scene/lod-group.ts index b267fa2e211..e40ae941bb0 100644 --- a/cocos/render-scene/scene/lod-group.ts +++ b/cocos/render-scene/scene/lod-group.ts @@ -81,7 +81,7 @@ export class LODGroup { /** *@en The array of LODs */ - protected _LODs: LODData[] = []; + protected _lodDataArray: LODData[] = []; /** * For editor only, users maybe operate several LOD's object @@ -96,7 +96,7 @@ export class LODGroup { get localBoundaryCenter () : Readonly { return this._localBoundaryCenter.clone(); } - get lodCount () { return this._LODs.length; } + get lodCount () { return this._lodDataArray.length; } set objectSize (val: number) { this._objectSize = val; @@ -104,8 +104,7 @@ export class LODGroup { get objectSize () { return this._objectSize; } - get LODs () : readonly LODData[] { return this._LODs; } - + get lodDataArray () : readonly LODData[] { return this._lodDataArray; } attachToScene (scene: RenderScene) { this.scene = scene; } @@ -118,24 +117,24 @@ export class LODGroup { this._lockedLODLevelVec = lockLev; } - getLockLODLevels (): number[] { + getLockedLODLevels (): number[] { return this._lockedLODLevelVec; } clearLODs () { - this._LODs.length = 0; + this._lodDataArray.length = 0; } insertLOD (index: number, lod: LODData) { - this._LODs.splice(index, 0, lod); + this._lodDataArray.splice(index, 0, lod); } updateLOD (index: number, lod: LODData) { - this._LODs[index] = lod; + this._lodDataArray[index] = lod; } eraseLOD (index: number) { - this._LODs.splice(index, 1); + this._lodDataArray.splice(index, 1); } /** @@ -143,12 +142,12 @@ export class LODGroup { * @param camera current perspective camera * @returns visible LOD index in lodGroup */ - getVisibleLOD (camera: Camera): number { + getVisibleLODLevel (camera: Camera): number { const screenUsagePercentage = this.getScreenUsagePercentage(camera); let lodIndex = -1; for (let i = 0; i < this.lodCount; ++i) { - const lod = this.LODs[i]; + const lod = this.lodDataArray[i]; if (screenUsagePercentage >= lod.screenUsagePercentage) { lodIndex = i; break; diff --git a/cocos/rendering/lod-models-utils.ts b/cocos/rendering/lod-models-utils.ts index fa29efed6c4..aaf7a44d613 100644 --- a/cocos/rendering/lod-models-utils.ts +++ b/cocos/rendering/lod-models-utils.ts @@ -51,12 +51,12 @@ export class LODModelsCachedUtils { // eslint-disable-next-line no-lone-blocks for (const lodGroup of scene.lodGroups) { if (lodGroup.enabled) { - const LODLevels = lodGroup.getLockLODLevels(); + const LODLevels = lodGroup.getLockedLODLevels(); const count = LODLevels.length; //count == 0 will return to standard LOD processing. if (count > 0) { for (let index = 0; index < lodGroup.lodCount; index++) { - const lod = lodGroup.LODs[index]; + const lod = lodGroup.lodDataArray[index]; for (const model of lod.models) { for (let i = 0; i < count; i++) { // The LOD level to use. @@ -73,9 +73,9 @@ export class LODModelsCachedUtils { continue; } - const visIndex = lodGroup.getVisibleLOD(camera); + const visIndex = lodGroup.getVisibleLODLevel(camera); for (let index = 0; index < lodGroup.lodCount; index++) { - const lod = lodGroup.LODs[index]; + const lod = lodGroup.lodDataArray[index]; for (const model of lod.models) { if (visIndex === index && model && model.node.active) { visibleModelsByAnyLODGroup.set(model, true); diff --git a/native/CMakeLists.txt b/native/CMakeLists.txt index 4482002e58b..437e414d179 100644 --- a/native/CMakeLists.txt +++ b/native/CMakeLists.txt @@ -1222,6 +1222,8 @@ cocos_source_files( cocos/renderer/pipeline/Define.cpp cocos/renderer/pipeline/GlobalDescriptorSetManager.h cocos/renderer/pipeline/GlobalDescriptorSetManager.cpp + cocos/renderer/pipeline/LODModelsUtil.cpp + cocos/renderer/pipeline/LODModelsUtil.h cocos/renderer/pipeline/InstancedBuffer.cpp cocos/renderer/pipeline/InstancedBuffer.h cocos/renderer/pipeline/PipelineStateManager.cpp @@ -1374,6 +1376,8 @@ cocos_source_files( cocos/scene/Fog.cpp cocos/scene/Light.h cocos/scene/Light.cpp + cocos/scene/LODGroup.h + cocos/scene/LODGroup.cpp cocos/scene/Model.h cocos/scene/Model.cpp cocos/scene/Pass.h diff --git a/native/cocos/bindings/auto/jsb_scene_auto.cpp b/native/cocos/bindings/auto/jsb_scene_auto.cpp index 8e8c3861ee5..b560c08f806 100644 --- a/native/cocos/bindings/auto/jsb_scene_auto.cpp +++ b/native/cocos/bindings/auto/jsb_scene_auto.cpp @@ -297,6 +297,38 @@ using namespace cc; #define cc_scene_Light_visibility_set(self_, val_) self_->setVisibility(val_) +#define cc_scene_LODData_screenUsagePercentage_get(self_) self_->getScreenUsagePercentage() +#define cc_scene_LODData_screenUsagePercentage_set(self_, val_) self_->setScreenUsagePercentage(val_) + + +#define cc_scene_LODData_models_get(self_) self_->getModels() + + +#define cc_scene_LODGroup_lodCount_get(self_) self_->getLodCount() + + +#define cc_scene_LODGroup_enabled_get(self_) self_->isEnabled() +#define cc_scene_LODGroup_enabled_set(self_, val_) self_->setEnabled(val_) + + +#define cc_scene_LODGroup_localBoundaryCenter_get(self_) self_->getLocalBoundaryCenter() +#define cc_scene_LODGroup_localBoundaryCenter_set(self_, val_) self_->setLocalBoundaryCenter(val_) + + +#define cc_scene_LODGroup_objectSize_get(self_) self_->getObjectSize() +#define cc_scene_LODGroup_objectSize_set(self_, val_) self_->setObjectSize(val_) + + +#define cc_scene_LODGroup_node_get(self_) self_->getNode() +#define cc_scene_LODGroup_node_set(self_, val_) self_->setNode(val_) + + +#define cc_scene_LODGroup_lodDataArray_get(self_) self_->getLodDataArray() + + +#define cc_scene_LODGroup_scene_get(self_) self_->getScene() + + #define cc_scene_DirectionalLight_direction_get(self_) self_->getDirection() #define cc_scene_DirectionalLight_direction_set(self_, val_) self_->setDirection(val_) @@ -6869,279 +6901,932 @@ static bool js_cc_scene_Light_useColorTemperature_set(se::State& s) return true; } -SE_BIND_PROP_SET(js_cc_scene_Light_useColorTemperature_set) +SE_BIND_PROP_SET(js_cc_scene_Light_useColorTemperature_set) + +static bool js_cc_scene_Light_useColorTemperature_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::scene::Light *arg1 = (cc::scene::Light *) NULL ; + bool result; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (bool)cc_scene_Light_useColorTemperature_get(arg1); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + + + return true; +} +SE_BIND_PROP_GET(js_cc_scene_Light_useColorTemperature_get) + +static bool js_cc_scene_Light_colorTemperature_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::scene::Light *arg1 = (cc::scene::Light *) NULL ; + float arg2 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "Light_colorTemperature_set,2,SWIGTYPE_float"); + cc_scene_Light_colorTemperature_set(arg1,arg2); + + + return true; +} +SE_BIND_PROP_SET(js_cc_scene_Light_colorTemperature_set) + +static bool js_cc_scene_Light_colorTemperature_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::scene::Light *arg1 = (cc::scene::Light *) NULL ; + float result; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (float)cc_scene_Light_colorTemperature_get(arg1); + + // out 1 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + + + return true; +} +SE_BIND_PROP_GET(js_cc_scene_Light_colorTemperature_get) + +static bool js_cc_scene_Light_node_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::scene::Light *arg1 = (cc::scene::Light *) NULL ; + cc::Node *arg2 = (cc::Node *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "Light_node_set,2,SWIGTYPE_p_cc__Node"); + cc_scene_Light_node_set(arg1,arg2); + + + return true; +} +SE_BIND_PROP_SET(js_cc_scene_Light_node_set) + +static bool js_cc_scene_Light_node_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::scene::Light *arg1 = (cc::scene::Light *) NULL ; + cc::Node *result = 0 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (cc::Node *)cc_scene_Light_node_get(arg1); + // %typemap(out) SWIGTYPE* + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "Light_node_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + return true; +} +SE_BIND_PROP_GET(js_cc_scene_Light_node_get) + +static bool js_cc_scene_Light_type_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::scene::Light *arg1 = (cc::scene::Light *) NULL ; + cc::scene::LightType arg2 ; + int32_t temp2 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) enum SWIGTYPE (int32_t temp2) + ok &= sevalue_to_native(args[0], &temp2); + SE_PRECONDITION2(ok, false, "Light_type_set,2,SWIGTYPE_cc__scene__LightType"); + arg2 = (cc::scene::LightType)temp2; + cc_scene_Light_type_set(arg1,arg2); + + + return true; +} +SE_BIND_PROP_SET(js_cc_scene_Light_type_set) + +static bool js_cc_scene_Light_type_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::scene::Light *arg1 = (cc::scene::Light *) NULL ; + cc::scene::LightType result; + int32_t temp ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (cc::scene::LightType)cc_scene_Light_type_get(arg1); + // out 4 + s.rval().setInt32(static_cast(result)); + + + return true; +} +SE_BIND_PROP_GET(js_cc_scene_Light_type_get) + +static bool js_cc_scene_Light_name_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::scene::Light *arg1 = (cc::scene::Light *) NULL ; + ccstd::string *arg2 = 0 ; + ccstd::string temp2 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "Light_name_set,2,SWIGTYPE_p_ccstd__string"); + arg2 = &temp2; + + cc_scene_Light_name_set(arg1,*arg2); + + + return true; +} +SE_BIND_PROP_SET(js_cc_scene_Light_name_set) + +static bool js_cc_scene_Light_name_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::scene::Light *arg1 = (cc::scene::Light *) NULL ; + ccstd::string *result = 0 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (ccstd::string *) &cc_scene_Light_name_get(arg1); + // %typemap(out) SWIGTYPE& + ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "Light_name_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); + + + return true; +} +SE_BIND_PROP_GET(js_cc_scene_Light_name_get) + +static bool js_cc_scene_Light_scene_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::scene::Light *arg1 = (cc::scene::Light *) NULL ; + cc::scene::RenderScene *result = 0 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (cc::scene::RenderScene *)cc_scene_Light_scene_get(arg1); + // %typemap(out) SWIGTYPE* + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "Light_scene_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + return true; +} +SE_BIND_PROP_GET(js_cc_scene_Light_scene_get) + +static bool js_cc_scene_Light_visibility_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::scene::Light *arg1 = (cc::scene::Light *) NULL ; + uint32_t arg2 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "Light_visibility_set,2,SWIGTYPE_uint32_t"); + + cc_scene_Light_visibility_set(arg1,arg2); + + + return true; +} +SE_BIND_PROP_SET(js_cc_scene_Light_visibility_set) + +static bool js_cc_scene_Light_visibility_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::scene::Light *arg1 = (cc::scene::Light *) NULL ; + uint32_t result; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = cc_scene_Light_visibility_get(arg1); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "Light_visibility_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_PROP_GET(js_cc_scene_Light_visibility_get) + +bool js_register_cc_scene_Light(se::Object* obj) { + auto* cls = se::Class::create("Light", obj, nullptr, _SE(js_new_cc_scene_Light)); + + cls->defineProperty("baked", _SE(js_cc_scene_Light_baked_get), _SE(js_cc_scene_Light_baked_set)); + cls->defineProperty("color", _SE(js_cc_scene_Light_color_get), _SE(js_cc_scene_Light_color_set)); + cls->defineProperty("useColorTemperature", _SE(js_cc_scene_Light_useColorTemperature_get), _SE(js_cc_scene_Light_useColorTemperature_set)); + cls->defineProperty("colorTemperature", _SE(js_cc_scene_Light_colorTemperature_get), _SE(js_cc_scene_Light_colorTemperature_set)); + cls->defineProperty("node", _SE(js_cc_scene_Light_node_get), _SE(js_cc_scene_Light_node_set)); + cls->defineProperty("type", _SE(js_cc_scene_Light_type_get), _SE(js_cc_scene_Light_type_set)); + cls->defineProperty("name", _SE(js_cc_scene_Light_name_get), _SE(js_cc_scene_Light_name_set)); + cls->defineProperty("scene", _SE(js_cc_scene_Light_scene_get), nullptr); + cls->defineProperty("visibility", _SE(js_cc_scene_Light_visibility_get), _SE(js_cc_scene_Light_visibility_set)); + + cls->defineFunction("attachToScene", _SE(js_cc_scene_Light_attachToScene)); + cls->defineFunction("detachFromScene", _SE(js_cc_scene_Light_detachFromScene)); + cls->defineFunction("destroy", _SE(js_cc_scene_Light_destroy)); + cls->defineFunction("initialize", _SE(js_cc_scene_Light_initialize)); + cls->defineFunction("update", _SE(js_cc_scene_Light_update)); + cls->defineFunction("getColorTemperatureRGB", _SE(js_cc_scene_Light_getColorTemperatureRGB)); + cls->defineFunction("setColorTemperatureRGB", _SE(js_cc_scene_Light_setColorTemperatureRGB)); + + + cls->defineStaticFunction("nt2lm", _SE(js_cc_scene_Light_nt2lm_static)); + cls->defineStaticFunction("colorTemperatureToRGB", _SE(js_cc_scene_Light_colorTemperatureToRGB_static)); + + + cls->defineFinalizeFunction(_SE(js_delete_cc_scene_Light)); + + + cls->install(); + JSBClassType::registerClass(cls); + + __jsb_cc_scene_Light_proto = cls->getProto(); + __jsb_cc_scene_Light_class = cls; + se::ScriptEngine::getInstance()->clearException(); + return true; +} + + +se::Class* __jsb_cc_scene_LODData_class = nullptr; +se::Object* __jsb_cc_scene_LODData_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_scene_LODData) + +static bool js_cc_scene_LODData_addModel(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::scene::LODData *arg1 = (cc::scene::LODData *) NULL ; + cc::scene::Model *arg2 = (cc::scene::Model *) NULL ; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "LODData_addModel,2,SWIGTYPE_p_cc__scene__Model"); + (arg1)->addModel(arg2); + + + return true; +} +SE_BIND_FUNC(js_cc_scene_LODData_addModel) + +static bool js_cc_scene_LODData_clearModels(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::scene::LODData *arg1 = (cc::scene::LODData *) NULL ; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + (arg1)->clearModels(); + + + return true; +} +SE_BIND_FUNC(js_cc_scene_LODData_clearModels) + +static bool js_cc_scene_LODData_eraseModel(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::scene::LODData *arg1 = (cc::scene::LODData *) NULL ; + cc::scene::Model *arg2 = (cc::scene::Model *) NULL ; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "LODData_eraseModel,2,SWIGTYPE_p_cc__scene__Model"); + (arg1)->eraseModel(arg2); + + + return true; +} +SE_BIND_FUNC(js_cc_scene_LODData_eraseModel) + +static bool js_cc_scene_LODData_screenUsagePercentage_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::scene::LODData *arg1 = (cc::scene::LODData *) NULL ; + float arg2 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "LODData_screenUsagePercentage_set,2,SWIGTYPE_float"); + cc_scene_LODData_screenUsagePercentage_set(arg1,arg2); + + + return true; +} +SE_BIND_PROP_SET(js_cc_scene_LODData_screenUsagePercentage_set) + +static bool js_cc_scene_LODData_screenUsagePercentage_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::scene::LODData *arg1 = (cc::scene::LODData *) NULL ; + float result; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (float)cc_scene_LODData_screenUsagePercentage_get(arg1); + + // out 1 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + + + return true; +} +SE_BIND_PROP_GET(js_cc_scene_LODData_screenUsagePercentage_get) + +static bool js_cc_scene_LODData_models_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::scene::LODData *arg1 = (cc::scene::LODData *) NULL ; + ccstd::vector< cc::IntrusivePtr< cc::scene::Model > > *result = 0 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (ccstd::vector< cc::IntrusivePtr< cc::scene::Model > > *) &cc_scene_LODData_models_get(arg1); + // %typemap(out) SWIGTYPE& + ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "LODData_models_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); + + + return true; +} +SE_BIND_PROP_GET(js_cc_scene_LODData_models_get) + +// js_ctor +static bool js_new_cc_scene_LODData(se::State& s) // NOLINT(readability-identifier-naming) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + + cc::scene::LODData *result; + result = (cc::scene::LODData *)new cc::scene::LODData(); + + + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); + return true; +} +SE_BIND_CTOR(js_new_cc_scene_LODData, __jsb_cc_scene_LODData_class, js_delete_cc_scene_LODData) + +static bool js_delete_cc_scene_LODData(se::State& s) +{ + // js_dtoroverride + return true; +} +SE_BIND_FINALIZE_FUNC(js_delete_cc_scene_LODData) + +bool js_register_cc_scene_LODData(se::Object* obj) { + auto* cls = se::Class::create("LODData", obj, nullptr, _SE(js_new_cc_scene_LODData)); + + cls->defineProperty("screenUsagePercentage", _SE(js_cc_scene_LODData_screenUsagePercentage_get), _SE(js_cc_scene_LODData_screenUsagePercentage_set)); + cls->defineProperty("models", _SE(js_cc_scene_LODData_models_get), nullptr); + + cls->defineFunction("addModel", _SE(js_cc_scene_LODData_addModel)); + cls->defineFunction("clearModels", _SE(js_cc_scene_LODData_clearModels)); + cls->defineFunction("eraseModel", _SE(js_cc_scene_LODData_eraseModel)); + + + + + cls->defineFinalizeFunction(_SE(js_delete_cc_scene_LODData)); + + + cls->install(); + JSBClassType::registerClass(cls); + + __jsb_cc_scene_LODData_proto = cls->getProto(); + __jsb_cc_scene_LODData_class = cls; + se::ScriptEngine::getInstance()->clearException(); + return true; +} + + +se::Class* __jsb_cc_scene_LODGroup_class = nullptr; +se::Object* __jsb_cc_scene_LODGroup_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_scene_LODGroup) + +// js_ctor +static bool js_new_cc_scene_LODGroup(se::State& s) // NOLINT(readability-identifier-naming) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + + cc::scene::LODGroup *result; + result = (cc::scene::LODGroup *)new cc::scene::LODGroup(); + + + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); + return true; +} +SE_BIND_CTOR(js_new_cc_scene_LODGroup, __jsb_cc_scene_LODGroup_class, js_delete_cc_scene_LODGroup) + +static bool js_delete_cc_scene_LODGroup(se::State& s) +{ + // js_dtoroverride + return true; +} +SE_BIND_FINALIZE_FUNC(js_delete_cc_scene_LODGroup) + +static bool js_cc_scene_LODGroup_attachToScene(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::scene::LODGroup *arg1 = (cc::scene::LODGroup *) NULL ; + cc::scene::RenderScene *arg2 = (cc::scene::RenderScene *) NULL ; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "LODGroup_attachToScene,2,SWIGTYPE_p_cc__scene__RenderScene"); + (arg1)->attachToScene(arg2); + + + return true; +} +SE_BIND_FUNC(js_cc_scene_LODGroup_attachToScene) + +static bool js_cc_scene_LODGroup_detachFromScene(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::scene::LODGroup *arg1 = (cc::scene::LODGroup *) NULL ; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + (arg1)->detachFromScene(); + + + return true; +} +SE_BIND_FUNC(js_cc_scene_LODGroup_detachFromScene) + +static bool js_cc_scene_LODGroup_lockLODLevels(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::scene::LODGroup *arg1 = (cc::scene::LODGroup *) NULL ; + ccstd::vector< int > *arg2 = 0 ; + ccstd::vector< int > temp2 ; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "LODGroup_lockLODLevels,2,SWIGTYPE_p_ccstd__vectorT_int_t"); + arg2 = &temp2; + + (arg1)->lockLODLevels(*arg2); + + + return true; +} +SE_BIND_FUNC(js_cc_scene_LODGroup_lockLODLevels) + +static bool js_cc_scene_LODGroup_clearLODs(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::scene::LODGroup *arg1 = (cc::scene::LODGroup *) NULL ; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + (arg1)->clearLODs(); + + + return true; +} +SE_BIND_FUNC(js_cc_scene_LODGroup_clearLODs) + +static bool js_cc_scene_LODGroup_insertLOD(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::scene::LODGroup *arg1 = (cc::scene::LODGroup *) NULL ; + uint8_t arg2 ; + cc::scene::LODData *arg3 = (cc::scene::LODData *) NULL ; + + if(argc != 2) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "LODGroup_insertLOD,2,SWIGTYPE_uint8_t"); + + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[1], &arg3, s.thisObject()); + SE_PRECONDITION2(ok, false, "LODGroup_insertLOD,3,SWIGTYPE_p_cc__scene__LODData"); + (arg1)->insertLOD(arg2,arg3); + + + return true; +} +SE_BIND_FUNC(js_cc_scene_LODGroup_insertLOD) -static bool js_cc_scene_Light_useColorTemperature_get(se::State& s) +static bool js_cc_scene_LODGroup_updateLOD(se::State& s) { + // js_function + CC_UNUSED bool ok = true; - cc::scene::Light *arg1 = (cc::scene::Light *) NULL ; - bool result; + const auto& args = s.args(); + size_t argc = args.size(); + cc::scene::LODGroup *arg1 = (cc::scene::LODGroup *) NULL ; + uint8_t arg2 ; + cc::scene::LODData *arg3 = (cc::scene::LODData *) NULL ; - arg1 = SE_THIS_OBJECT(s); + if(argc != 2) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (bool)cc_scene_Light_useColorTemperature_get(arg1); - // out 5 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "LODGroup_updateLOD,2,SWIGTYPE_uint8_t"); + + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[1], &arg3, s.thisObject()); + SE_PRECONDITION2(ok, false, "LODGroup_updateLOD,3,SWIGTYPE_p_cc__scene__LODData"); + (arg1)->updateLOD(arg2,arg3); return true; } -SE_BIND_PROP_GET(js_cc_scene_Light_useColorTemperature_get) +SE_BIND_FUNC(js_cc_scene_LODGroup_updateLOD) -static bool js_cc_scene_Light_colorTemperature_set(se::State& s) +static bool js_cc_scene_LODGroup_eraseLOD(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::scene::Light *arg1 = (cc::scene::Light *) NULL ; - float arg2 ; + cc::scene::LODGroup *arg1 = (cc::scene::LODGroup *) NULL ; + uint8_t arg2 ; - arg1 = SE_THIS_OBJECT(s); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "Light_colorTemperature_set,2,SWIGTYPE_float"); - cc_scene_Light_colorTemperature_set(arg1,arg2); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "LODGroup_eraseLOD,2,SWIGTYPE_uint8_t"); + + (arg1)->eraseLOD(arg2); return true; } -SE_BIND_PROP_SET(js_cc_scene_Light_colorTemperature_set) +SE_BIND_FUNC(js_cc_scene_LODGroup_eraseLOD) -static bool js_cc_scene_Light_colorTemperature_get(se::State& s) +static bool js_cc_scene_LODGroup_lodCount_get(se::State& s) { CC_UNUSED bool ok = true; - cc::scene::Light *arg1 = (cc::scene::Light *) NULL ; - float result; + cc::scene::LODGroup *arg1 = (cc::scene::LODGroup *) NULL ; + uint8_t result; - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (float)cc_scene_Light_colorTemperature_get(arg1); + result = cc_scene_LODGroup_lodCount_get(arg1); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "LODGroup_lodCount_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - // out 1 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); return true; } -SE_BIND_PROP_GET(js_cc_scene_Light_colorTemperature_get) +SE_BIND_PROP_GET(js_cc_scene_LODGroup_lodCount_get) -static bool js_cc_scene_Light_node_set(se::State& s) +static bool js_cc_scene_LODGroup_enabled_set(se::State& s) { CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::scene::Light *arg1 = (cc::scene::Light *) NULL ; - cc::Node *arg2 = (cc::Node *) NULL ; + cc::scene::LODGroup *arg1 = (cc::scene::LODGroup *) NULL ; + bool arg2 ; - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE* - ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Light_node_set,2,SWIGTYPE_p_cc__Node"); - cc_scene_Light_node_set(arg1,arg2); + // %typemap(in) bool + ok &= sevalue_to_native(args[0], &arg2); + SE_PRECONDITION2(ok, false, "LODGroup_enabled_set,2,SWIGTYPE_bool"); + cc_scene_LODGroup_enabled_set(arg1,arg2); return true; } -SE_BIND_PROP_SET(js_cc_scene_Light_node_set) +SE_BIND_PROP_SET(js_cc_scene_LODGroup_enabled_set) -static bool js_cc_scene_Light_node_get(se::State& s) +static bool js_cc_scene_LODGroup_enabled_get(se::State& s) { CC_UNUSED bool ok = true; - cc::scene::Light *arg1 = (cc::scene::Light *) NULL ; - cc::Node *result = 0 ; + cc::scene::LODGroup *arg1 = (cc::scene::LODGroup *) NULL ; + bool result; - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (cc::Node *)cc_scene_Light_node_get(arg1); - // %typemap(out) SWIGTYPE* + result = (bool)cc_scene_LODGroup_enabled_get(arg1); + // out 5 ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Light_node_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); return true; } -SE_BIND_PROP_GET(js_cc_scene_Light_node_get) +SE_BIND_PROP_GET(js_cc_scene_LODGroup_enabled_get) -static bool js_cc_scene_Light_type_set(se::State& s) +static bool js_cc_scene_LODGroup_localBoundaryCenter_set(se::State& s) { CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::scene::Light *arg1 = (cc::scene::Light *) NULL ; - cc::scene::LightType arg2 ; - int32_t temp2 ; + cc::scene::LODGroup *arg1 = (cc::scene::LODGroup *) NULL ; + cc::Vec3 *arg2 = 0 ; + cc::Vec3 temp2 ; - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) enum SWIGTYPE (int32_t temp2) - ok &= sevalue_to_native(args[0], &temp2); - SE_PRECONDITION2(ok, false, "Light_type_set,2,SWIGTYPE_cc__scene__LightType"); - arg2 = (cc::scene::LightType)temp2; - cc_scene_Light_type_set(arg1,arg2); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "LODGroup_localBoundaryCenter_set,2,SWIGTYPE_p_cc__Vec3"); + arg2 = &temp2; + + cc_scene_LODGroup_localBoundaryCenter_set(arg1,*arg2); return true; } -SE_BIND_PROP_SET(js_cc_scene_Light_type_set) +SE_BIND_PROP_SET(js_cc_scene_LODGroup_localBoundaryCenter_set) -static bool js_cc_scene_Light_type_get(se::State& s) +static bool js_cc_scene_LODGroup_localBoundaryCenter_get(se::State& s) { CC_UNUSED bool ok = true; - cc::scene::Light *arg1 = (cc::scene::Light *) NULL ; - cc::scene::LightType result; - int32_t temp ; + cc::scene::LODGroup *arg1 = (cc::scene::LODGroup *) NULL ; + cc::Vec3 *result = 0 ; - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (cc::scene::LightType)cc_scene_Light_type_get(arg1); - // out 4 - s.rval().setInt32(static_cast(result)); + result = (cc::Vec3 *) &cc_scene_LODGroup_localBoundaryCenter_get(arg1); + // %typemap(out) SWIGTYPE& + ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "LODGroup_localBoundaryCenter_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); return true; } -SE_BIND_PROP_GET(js_cc_scene_Light_type_get) +SE_BIND_PROP_GET(js_cc_scene_LODGroup_localBoundaryCenter_get) -static bool js_cc_scene_Light_name_set(se::State& s) +static bool js_cc_scene_LODGroup_objectSize_set(se::State& s) { CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::scene::Light *arg1 = (cc::scene::Light *) NULL ; - ccstd::string *arg2 = 0 ; - ccstd::string temp2 ; + cc::scene::LODGroup *arg1 = (cc::scene::LODGroup *) NULL ; + float arg2 ; - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Light_name_set,2,SWIGTYPE_p_ccstd__string"); - arg2 = &temp2; + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "LODGroup_objectSize_set,2,SWIGTYPE_float"); + cc_scene_LODGroup_objectSize_set(arg1,arg2); - cc_scene_Light_name_set(arg1,*arg2); + + return true; +} +SE_BIND_PROP_SET(js_cc_scene_LODGroup_objectSize_set) + +static bool js_cc_scene_LODGroup_objectSize_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::scene::LODGroup *arg1 = (cc::scene::LODGroup *) NULL ; + float result; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (float)cc_scene_LODGroup_objectSize_get(arg1); + + // out 1 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); return true; } -SE_BIND_PROP_SET(js_cc_scene_Light_name_set) +SE_BIND_PROP_GET(js_cc_scene_LODGroup_objectSize_get) -static bool js_cc_scene_Light_name_get(se::State& s) +static bool js_cc_scene_LODGroup_node_set(se::State& s) { CC_UNUSED bool ok = true; - cc::scene::Light *arg1 = (cc::scene::Light *) NULL ; - ccstd::string *result = 0 ; + const auto& args = s.args(); + size_t argc = args.size(); + cc::scene::LODGroup *arg1 = (cc::scene::LODGroup *) NULL ; + cc::Node *arg2 = (cc::Node *) NULL ; - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (ccstd::string *) &cc_scene_Light_name_get(arg1); - // %typemap(out) SWIGTYPE& - ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Light_name_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "LODGroup_node_set,2,SWIGTYPE_p_cc__Node"); + cc_scene_LODGroup_node_set(arg1,arg2); return true; } -SE_BIND_PROP_GET(js_cc_scene_Light_name_get) +SE_BIND_PROP_SET(js_cc_scene_LODGroup_node_set) -static bool js_cc_scene_Light_scene_get(se::State& s) +static bool js_cc_scene_LODGroup_node_get(se::State& s) { CC_UNUSED bool ok = true; - cc::scene::Light *arg1 = (cc::scene::Light *) NULL ; - cc::scene::RenderScene *result = 0 ; + cc::scene::LODGroup *arg1 = (cc::scene::LODGroup *) NULL ; + cc::Node *result = 0 ; - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (cc::scene::RenderScene *)cc_scene_Light_scene_get(arg1); + result = (cc::Node *)cc_scene_LODGroup_node_get(arg1); // %typemap(out) SWIGTYPE* ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Light_scene_get, Error processing arguments"); + SE_PRECONDITION2(ok, false, "LODGroup_node_get, Error processing arguments"); SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); return true; } -SE_BIND_PROP_GET(js_cc_scene_Light_scene_get) +SE_BIND_PROP_GET(js_cc_scene_LODGroup_node_get) -static bool js_cc_scene_Light_visibility_set(se::State& s) +static bool js_cc_scene_LODGroup_lodDataArray_get(se::State& s) { CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::scene::Light *arg1 = (cc::scene::Light *) NULL ; - uint32_t arg2 ; + cc::scene::LODGroup *arg1 = (cc::scene::LODGroup *) NULL ; + ccstd::vector< cc::IntrusivePtr< cc::scene::LODData > > *result = 0 ; - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Light_visibility_set,2,SWIGTYPE_uint32_t"); - - cc_scene_Light_visibility_set(arg1,arg2); + result = (ccstd::vector< cc::IntrusivePtr< cc::scene::LODData > > *) &cc_scene_LODGroup_lodDataArray_get(arg1); + // %typemap(out) SWIGTYPE& + ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "LODGroup_lodDataArray_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); return true; } -SE_BIND_PROP_SET(js_cc_scene_Light_visibility_set) +SE_BIND_PROP_GET(js_cc_scene_LODGroup_lodDataArray_get) -static bool js_cc_scene_Light_visibility_get(se::State& s) +static bool js_cc_scene_LODGroup_scene_get(se::State& s) { CC_UNUSED bool ok = true; - cc::scene::Light *arg1 = (cc::scene::Light *) NULL ; - uint32_t result; + cc::scene::LODGroup *arg1 = (cc::scene::LODGroup *) NULL ; + cc::scene::RenderScene *result = 0 ; - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = cc_scene_Light_visibility_get(arg1); - // %typemap(out) SWIGTYPE + result = (cc::scene::RenderScene *)cc_scene_LODGroup_scene_get(arg1); + // %typemap(out) SWIGTYPE* ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Light_visibility_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - + SE_PRECONDITION2(ok, false, "LODGroup_scene_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); return true; } -SE_BIND_PROP_GET(js_cc_scene_Light_visibility_get) +SE_BIND_PROP_GET(js_cc_scene_LODGroup_scene_get) -bool js_register_cc_scene_Light(se::Object* obj) { - auto* cls = se::Class::create("Light", obj, nullptr, _SE(js_new_cc_scene_Light)); +bool js_register_cc_scene_LODGroup(se::Object* obj) { + auto* cls = se::Class::create("LODGroup", obj, nullptr, _SE(js_new_cc_scene_LODGroup)); - cls->defineProperty("baked", _SE(js_cc_scene_Light_baked_get), _SE(js_cc_scene_Light_baked_set)); - cls->defineProperty("color", _SE(js_cc_scene_Light_color_get), _SE(js_cc_scene_Light_color_set)); - cls->defineProperty("useColorTemperature", _SE(js_cc_scene_Light_useColorTemperature_get), _SE(js_cc_scene_Light_useColorTemperature_set)); - cls->defineProperty("colorTemperature", _SE(js_cc_scene_Light_colorTemperature_get), _SE(js_cc_scene_Light_colorTemperature_set)); - cls->defineProperty("node", _SE(js_cc_scene_Light_node_get), _SE(js_cc_scene_Light_node_set)); - cls->defineProperty("type", _SE(js_cc_scene_Light_type_get), _SE(js_cc_scene_Light_type_set)); - cls->defineProperty("name", _SE(js_cc_scene_Light_name_get), _SE(js_cc_scene_Light_name_set)); - cls->defineProperty("scene", _SE(js_cc_scene_Light_scene_get), nullptr); - cls->defineProperty("visibility", _SE(js_cc_scene_Light_visibility_get), _SE(js_cc_scene_Light_visibility_set)); + cls->defineProperty("lodCount", _SE(js_cc_scene_LODGroup_lodCount_get), nullptr); + cls->defineProperty("enabled", _SE(js_cc_scene_LODGroup_enabled_get), _SE(js_cc_scene_LODGroup_enabled_set)); + cls->defineProperty("localBoundaryCenter", _SE(js_cc_scene_LODGroup_localBoundaryCenter_get), _SE(js_cc_scene_LODGroup_localBoundaryCenter_set)); + cls->defineProperty("objectSize", _SE(js_cc_scene_LODGroup_objectSize_get), _SE(js_cc_scene_LODGroup_objectSize_set)); + cls->defineProperty("node", _SE(js_cc_scene_LODGroup_node_get), _SE(js_cc_scene_LODGroup_node_set)); + cls->defineProperty("lodDataArray", _SE(js_cc_scene_LODGroup_lodDataArray_get), nullptr); + cls->defineProperty("scene", _SE(js_cc_scene_LODGroup_scene_get), nullptr); - cls->defineFunction("attachToScene", _SE(js_cc_scene_Light_attachToScene)); - cls->defineFunction("detachFromScene", _SE(js_cc_scene_Light_detachFromScene)); - cls->defineFunction("destroy", _SE(js_cc_scene_Light_destroy)); - cls->defineFunction("initialize", _SE(js_cc_scene_Light_initialize)); - cls->defineFunction("update", _SE(js_cc_scene_Light_update)); - cls->defineFunction("getColorTemperatureRGB", _SE(js_cc_scene_Light_getColorTemperatureRGB)); - cls->defineFunction("setColorTemperatureRGB", _SE(js_cc_scene_Light_setColorTemperatureRGB)); + cls->defineFunction("attachToScene", _SE(js_cc_scene_LODGroup_attachToScene)); + cls->defineFunction("detachFromScene", _SE(js_cc_scene_LODGroup_detachFromScene)); + cls->defineFunction("lockLODLevels", _SE(js_cc_scene_LODGroup_lockLODLevels)); + cls->defineFunction("clearLODs", _SE(js_cc_scene_LODGroup_clearLODs)); + cls->defineFunction("insertLOD", _SE(js_cc_scene_LODGroup_insertLOD)); + cls->defineFunction("updateLOD", _SE(js_cc_scene_LODGroup_updateLOD)); + cls->defineFunction("eraseLOD", _SE(js_cc_scene_LODGroup_eraseLOD)); - cls->defineStaticFunction("nt2lm", _SE(js_cc_scene_Light_nt2lm_static)); - cls->defineStaticFunction("colorTemperatureToRGB", _SE(js_cc_scene_Light_colorTemperatureToRGB_static)); - cls->defineFinalizeFunction(_SE(js_delete_cc_scene_Light)); + cls->defineFinalizeFunction(_SE(js_delete_cc_scene_LODGroup)); cls->install(); - JSBClassType::registerClass(cls); + JSBClassType::registerClass(cls); - __jsb_cc_scene_Light_proto = cls->getProto(); - __jsb_cc_scene_Light_class = cls; + __jsb_cc_scene_LODGroup_proto = cls->getProto(); + __jsb_cc_scene_LODGroup_class = cls; se::ScriptEngine::getInstance()->clearException(); return true; } @@ -18891,6 +19576,58 @@ static bool js_cc_scene_RenderScene_removeCameras(se::State& s) } SE_BIND_FUNC(js_cc_scene_RenderScene_removeCameras) +static bool js_cc_scene_RenderScene_addLODGroup(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::scene::RenderScene *arg1 = (cc::scene::RenderScene *) NULL ; + cc::scene::LODGroup *arg2 = (cc::scene::LODGroup *) NULL ; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "RenderScene_addLODGroup,2,SWIGTYPE_p_cc__scene__LODGroup"); + (arg1)->addLODGroup(arg2); + + + return true; +} +SE_BIND_FUNC(js_cc_scene_RenderScene_addLODGroup) + +static bool js_cc_scene_RenderScene_removeLODGroup(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::scene::RenderScene *arg1 = (cc::scene::RenderScene *) NULL ; + cc::scene::LODGroup *arg2 = (cc::scene::LODGroup *) NULL ; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "RenderScene_removeLODGroup,2,SWIGTYPE_p_cc__scene__LODGroup"); + (arg1)->removeLODGroup(arg2); + + + return true; +} +SE_BIND_FUNC(js_cc_scene_RenderScene_removeLODGroup) + static bool js_cc_scene_RenderScene_unsetMainLight(se::State& s) { // js_function @@ -19458,6 +20195,8 @@ bool js_register_cc_scene_RenderScene(se::Object* obj) { cls->defineFunction("addCamera", _SE(js_cc_scene_RenderScene_addCamera)); cls->defineFunction("removeCamera", _SE(js_cc_scene_RenderScene_removeCamera)); cls->defineFunction("removeCameras", _SE(js_cc_scene_RenderScene_removeCameras)); + cls->defineFunction("addLODGroup", _SE(js_cc_scene_RenderScene_addLODGroup)); + cls->defineFunction("removeLODGroup", _SE(js_cc_scene_RenderScene_removeLODGroup)); cls->defineFunction("unsetMainLight", _SE(js_cc_scene_RenderScene_unsetMainLight)); cls->defineFunction("addDirectionalLight", _SE(js_cc_scene_RenderScene_addDirectionalLight)); cls->defineFunction("removeDirectionalLight", _SE(js_cc_scene_RenderScene_removeDirectionalLight)); @@ -26968,6 +27707,8 @@ bool register_all_scene(se::Object* obj) { js_register_cc_Root(ns); js_register_cc_scene_IMacroPatch(ns); js_register_cc_scene_Light(ns); + js_register_cc_scene_LODData(ns); + js_register_cc_scene_LODGroup(ns); js_register_cc_scene_Fog(ns); js_register_cc_scene_FogInfo(ns); js_register_cc_scene_ShadowsInfo(ns); diff --git a/native/cocos/bindings/auto/jsb_scene_auto.h b/native/cocos/bindings/auto/jsb_scene_auto.h index 29ddaf4f7c0..c04217e7370 100644 --- a/native/cocos/bindings/auto/jsb_scene_auto.h +++ b/native/cocos/bindings/auto/jsb_scene_auto.h @@ -44,6 +44,7 @@ #include "core/scene-graph/Scene.h" #include "core/scene-graph/SceneGlobals.h" #include "scene/Light.h" +#include "scene/LODGroup.h" #include "scene/Fog.h" #include "scene/Shadow.h" #include "scene/Skybox.h" @@ -125,6 +126,16 @@ extern se::Object *__jsb_cc_scene_Light_proto; // NOLINT extern se::Class * __jsb_cc_scene_Light_class; // NOLINT +JSB_REGISTER_OBJECT_TYPE(cc::scene::LODData); +extern se::Object *__jsb_cc_scene_LODData_proto; // NOLINT +extern se::Class * __jsb_cc_scene_LODData_class; // NOLINT + + +JSB_REGISTER_OBJECT_TYPE(cc::scene::LODGroup); +extern se::Object *__jsb_cc_scene_LODGroup_proto; // NOLINT +extern se::Class * __jsb_cc_scene_LODGroup_class; // NOLINT + + JSB_REGISTER_OBJECT_TYPE(cc::scene::Fog); extern se::Object *__jsb_cc_scene_Fog_proto; // NOLINT extern se::Class * __jsb_cc_scene_Fog_class; // NOLINT diff --git a/native/cocos/renderer/pipeline/LODModelsUtil.cpp b/native/cocos/renderer/pipeline/LODModelsUtil.cpp new file mode 100644 index 00000000000..49d0b16c580 --- /dev/null +++ b/native/cocos/renderer/pipeline/LODModelsUtil.cpp @@ -0,0 +1,98 @@ +/**************************************************************************** + Copyright (c) 2022 Xiamen Yaji Software Co., Ltd. + + http://www.cocos.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated engine source code (the "Software"), a limited, + worldwide, royalty-free, non-assignable, revocable and non-exclusive license + to use Cocos Creator solely to develop games on your target platforms. You shall + not use Cocos Creator software for developing other software or tools that's + used for developing games. You are not granted to publish, distribute, + sublicense, and/or sell copies of Cocos Creator. + + The software or tools in this License Agreement are licensed, not sold. + Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +****************************************************************************/ + +#include "LODModelsUtil.h" + +#include "scene/Camera.h" +#include "scene/LODGroup.h" +#include "scene/Model.h" +#include "scene/RenderScene.h" + +namespace cc { +namespace pipeline { + +/** + * @zh LOD所有级别中存储的model集合;包含多个LODGroup的所有LOD + * @en The collection of models stored in all levels of LOD, All LODs containing multiple LODGroups. + */ +ccstd::unordered_map modelsInAnyLODGroup; + +/** + * @zh 指定相机下,某一级LOD使用的model集合;可能包含多个LODGroup的某一级LOD + * @en Specify the model set used by a level of LOD under the camera, LOD of a level that may contain multiple LODGroups. + */ +ccstd::unordered_map visibleModelsByAnyLODGroup; + +void LODModelsCachedUtils::updateCachedLODModels(const scene::RenderScene *scene, const scene::Camera *camera) { + for (const auto &lodGroup : scene->getLODGroups()) { + if (lodGroup->isEnabled()) { + const auto &lodLevels = lodGroup->getLockedLODLevels(); + uint8_t count = lodLevels.size(); + // count == 0 will return to standard LOD processing. + if (count > 0) { + for (auto index = 0; index < lodGroup->getLodCount(); index++) { + const auto &lod = lodGroup->getLodDataArray()[index]; + for (const auto &model : lod->getModels()) { + for (auto i = 0; i < count; i++) { + // The LOD level to use. + if (lodLevels[i] == index) { + auto *node = model->getNode(); + if (node && node->isActive()) { + visibleModelsByAnyLODGroup[model] = true; + break; + } + } + } + modelsInAnyLODGroup[model] = true; + } + } + continue; + } + + int8_t visIndex = lodGroup->getVisibleLODLevel(camera); + for (auto index = 0; index < lodGroup->getLodCount(); index++) { + const auto &lod = lodGroup->getLodDataArray()[index]; + for (const auto &model : lod->getModels()) { + auto *node = model->getNode(); + if (visIndex == index && node && node->isActive()) { + visibleModelsByAnyLODGroup[model] = true; + } + modelsInAnyLODGroup[model] = true; + } + } + } + } +} + +bool LODModelsCachedUtils::isLODModelCulled(scene::Model *model) { + return modelsInAnyLODGroup[model] && !visibleModelsByAnyLODGroup[model]; +} + +void LODModelsCachedUtils::clearCachedLODModels() { + modelsInAnyLODGroup.clear(); + visibleModelsByAnyLODGroup.clear(); +} +} // namespace pipeline +} // namespace cc diff --git a/native/cocos/renderer/pipeline/LODModelsUtil.h b/native/cocos/renderer/pipeline/LODModelsUtil.h new file mode 100644 index 00000000000..0233c32da05 --- /dev/null +++ b/native/cocos/renderer/pipeline/LODModelsUtil.h @@ -0,0 +1,44 @@ +/**************************************************************************** + Copyright (c) 2022 Xiamen Yaji Software Co., Ltd. + + http://www.cocos.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated engine source code (the "Software"), a limited, + worldwide, royalty-free, non-assignable, revocable and non-exclusive license + to use Cocos Creator solely to develop games on your target platforms. You shall + not use Cocos Creator software for developing other software or tools that's + used for developing games. You are not granted to publish, distribute, + sublicense, and/or sell copies of Cocos Creator. + + The software or tools in this License Agreement are licensed, not sold. + Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +****************************************************************************/ + +#pragma once + +namespace cc { +namespace scene { +class Model; +class Camera; +class RenderScene; +} // namespace scene + +namespace pipeline { + +class LODModelsCachedUtils { +public: + static void updateCachedLODModels(const scene::RenderScene *scene, const scene::Camera *camera); + static bool isLODModelCulled(scene::Model *model); + static void clearCachedLODModels(); +}; +} // namespace pipeline +} // namespace cc diff --git a/native/cocos/renderer/pipeline/PlanarShadowQueue.cpp b/native/cocos/renderer/pipeline/PlanarShadowQueue.cpp index c38779585f0..aad34961325 100644 --- a/native/cocos/renderer/pipeline/PlanarShadowQueue.cpp +++ b/native/cocos/renderer/pipeline/PlanarShadowQueue.cpp @@ -26,6 +26,7 @@ #include "base/std/container/array.h" #include "Define.h" +#include "LODModelsUtil.h" #include "InstancedBuffer.h" #include "PipelineSceneData.h" #include "PipelineStateManager.h" @@ -66,8 +67,12 @@ void PlanarShadowQueue::gatherShadowPasses(scene::Camera *camera, gfx::CommandBu return; } + LODModelsCachedUtils::updateCachedLODModels(scene, camera); const auto &models = scene->getModels(); for (const auto &model : models) { + if (LODModelsCachedUtils::isLODModelCulled(model)) { + continue; + } if (!model->isEnabled() || !model->isCastShadow() || !model->getNode()) { continue; } @@ -76,6 +81,7 @@ void PlanarShadowQueue::gatherShadowPasses(scene::Camera *camera, gfx::CommandBu _castModels.emplace_back(model); } } + LODModelsCachedUtils::clearCachedLODModels(); const auto &passes = *shadowInfo->getInstancingMaterial()->getPasses(); InstancedBuffer *instancedBuffer = passes[0]->getInstancedBuffer(); diff --git a/native/cocos/renderer/pipeline/SceneCulling.cpp b/native/cocos/renderer/pipeline/SceneCulling.cpp index 86f639395ac..bd88565490f 100644 --- a/native/cocos/renderer/pipeline/SceneCulling.cpp +++ b/native/cocos/renderer/pipeline/SceneCulling.cpp @@ -26,9 +26,11 @@ #include "base/std/container/array.h" #include "Define.h" +#include "LODModelsUtil.h" #include "PipelineSceneData.h" #include "RenderPipeline.h" #include "SceneCulling.h" +#include "base/std/container/map.h" #include "core/geometry/AABB.h" #include "core/geometry/Frustum.h" #include "core/geometry/Intersect.h" @@ -40,6 +42,7 @@ #include "scene/Camera.h" #include "scene/DirectionalLight.h" #include "scene/Light.h" +#include "scene/LODGroup.h" #include "scene/Octree.h" #include "scene/RenderScene.h" #include "scene/Shadow.h" @@ -155,11 +158,17 @@ void sceneCulling(const RenderPipeline *pipeline, scene::Camera *camera) { } } + LODModelsCachedUtils::updateCachedLODModels(scene, camera); + const scene::Octree *octree = scene->getOctree(); if (octree && octree->isEnabled()) { for (const auto &model : scene->getModels()) { // filter model by view visibility if (model->isEnabled()) { + if (LODModelsCachedUtils::isLODModelCulled(model)) { + continue; + } + if (model->isCastShadow()) { csmLayers->addCastShadowObject(genRenderObject(model, camera)); csmLayers->addLayerObject(genRenderObject(model, camera)); @@ -182,13 +191,19 @@ void sceneCulling(const RenderPipeline *pipeline, scene::Camera *camera) { ccstd::vector models; models.reserve(scene->getModels().size() / 4); octree->queryVisibility(camera, camera->getFrustum(), false, models); - for (const auto *model : models) { + for (const auto &model : models) { + if (LODModelsCachedUtils::isLODModelCulled(model)) { + continue; + } sceneData->addRenderObject(genRenderObject(model, camera)); } } else { for (const auto &model : scene->getModels()) { // filter model by view visibility if (model->isEnabled()) { + if (LODModelsCachedUtils::isLODModelCulled(model)) { + continue; + } const auto visibility = camera->getVisibility(); const auto *const node = model->getNode(); @@ -214,6 +229,7 @@ void sceneCulling(const RenderPipeline *pipeline, scene::Camera *camera) { } } } + LODModelsCachedUtils::clearCachedLODModels(); csmLayers = nullptr; } diff --git a/native/cocos/scene/LODGroup.cpp b/native/cocos/scene/LODGroup.cpp new file mode 100644 index 00000000000..e2916b0421a --- /dev/null +++ b/native/cocos/scene/LODGroup.cpp @@ -0,0 +1,120 @@ +/**************************************************************************** + Copyright (c) 2021-2022 Xiamen Yaji Software Co., Ltd. + + http://www.cocos.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated engine source code (the "Software"), a limited, + worldwide, royalty-free, non-assignable, revocable and non-exclusive license + to use Cocos Creator solely to develop games on your target platforms. You shall + not use Cocos Creator software for developing other software or tools that's + used for developing games. You are not granted to publish, distribute, + sublicense, and/or sell copies of Cocos Creator. + + The software or tools in this License Agreement are licensed, not sold. + Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +****************************************************************************/ + +#include "scene/LODGroup.h" +#include +#include "core/scene-graph/Node.h" +#include "scene/Camera.h" + +namespace cc { +namespace scene { + +void LODData::eraseModel(Model *model) { + auto iter = std::find(_vecModels.begin(), _vecModels.end(), model); + if (iter != _vecModels.end()) { + _vecModels.erase(iter); + } +} + +LODGroup::LODGroup() = default; + +LODGroup::~LODGroup() = default; + + +int8_t LODGroup::getVisibleLODLevel(const Camera *camera) const { + float screenUsagePercentage = getScreenUsagePercentage(camera); + + int8_t lodIndex = -1; + for (auto i = 0; i < _vecLODData.size(); ++i) { + const auto &lod = _vecLODData[i]; + if (screenUsagePercentage >= lod->getScreenUsagePercentage()) { + lodIndex = i; + break; + } + } + return lodIndex; +} + +float LODGroup::getScreenUsagePercentage(const Camera *camera) const { + if (!_node.get()) { + return 0; + } + + auto distance = 0; + if (camera->getProjectionType() == CameraProjection::PERSPECTIVE) { + Vec3 tmp{_localBoundaryCenter}; + tmp.transformMat4(_node->getWorldMatrix()); + tmp.subtract(camera->getNode()->getPosition()); + distance = tmp.length(); + } + + return distanceToScreenUsagePercentage(camera, distance, getWorldSpaceSize()); +} + +float LODGroup::distanceToScreenUsagePercentage(const Camera *camera, float distance, float size) { + if (camera->getProjectionType() == CameraProjection::PERSPECTIVE) { + return static_cast((size * camera->getMatProj().m[5]) / (distance * 2.0)); // note: matProj.m11 is 1 / tan(fov / 2.0) + } + return static_cast(size * camera->getMatProj().m[5] * 0.5); +} + +float LODGroup::getWorldSpaceSize() const { + auto scale = _node->getScale(); + auto maxScale = fmaxf(fabs(scale.x), fabs(scale.y)); + maxScale = fmaxf(maxScale, fabs(scale.z)); + return maxScale * _objectSize; +} + +void LODGroup::lockLODLevels(ccstd::vector &levels) { + _vecLockedLevels.clear(); + _vecLockedLevels.insert(_vecLockedLevels.begin(), levels.begin(), levels.end()); +} + +void LODGroup::insertLOD(uint8_t index, LODData *data) { + if (index >= _vecLODData.size()) { + _vecLODData.emplace_back(data); + } else { + _vecLODData.insert(_vecLODData.begin() + index, data); + } +} + +void LODGroup::updateLOD(uint8_t index, LODData *data) { + if (index >= _vecLODData.size()) { + CC_LOG_WARNING("LODGroup updateLOD error, index out of range."); + return; + } + _vecLODData[index] = data; +} + +void LODGroup::eraseLOD(uint8_t index) { + if (index >= _vecLODData.size()) { + CC_LOG_WARNING("LODGroup eraseLOD error, index out of range."); + return; + } + _vecLODData.erase(_vecLODData.begin() + index); +} + +} // namespace scene +} // namespace cc diff --git a/native/cocos/scene/LODGroup.h b/native/cocos/scene/LODGroup.h new file mode 100644 index 00000000000..15773e54c5b --- /dev/null +++ b/native/cocos/scene/LODGroup.h @@ -0,0 +1,112 @@ +/**************************************************************************** + Copyright (c) 2021-2022 Xiamen Yaji Software Co., Ltd. + + http://www.cocos.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated engine source code (the "Software"), a limited, + worldwide, royalty-free, non-assignable, revocable and non-exclusive license + to use Cocos Creator solely to develop games on your target platforms. You shall + not use Cocos Creator software for developing other software or tools that's + used for developing games. You are not granted to publish, distribute, + sublicense, and/or sell copies of Cocos Creator. + + The software or tools in this License Agreement are licensed, not sold. + Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +****************************************************************************/ + +#pragma once + +#include "Model.h" +#include "base/Ptr.h" +#include "base/RefCounted.h" +#include "base/TypeDef.h" +#include "base/std/container/string.h" +#include "math/Vec3.h" + +namespace cc { +class Node; + +namespace scene { + +class RenderScene; +class Camera; +class Model; + +class LODData final : public RefCounted { +public: + inline float getScreenUsagePercentage() const { return _screenUsagePercentage; } + inline void setScreenUsagePercentage(float val) { _screenUsagePercentage = val; } + + inline const ccstd::vector> &getModels() const { return _vecModels; } + + inline void addModel(Model *model) { _vecModels.emplace_back(model); } + inline void clearModels() { _vecModels.clear(); } + void eraseModel(Model *model); + +private: + float _screenUsagePercentage{1.F}; + ccstd::vector> _vecModels; +}; + +class LODGroup final : public RefCounted { +public: + LODGroup(); + ~LODGroup() override; + + inline void attachToScene(RenderScene *scene) { _scene = scene; } + inline void detachFromScene() { _scene = nullptr; } + + inline bool isEnabled() const { return _enabled; } + inline void setEnabled(bool val) { _enabled = val; } + + inline float getObjectSize() const { return _objectSize; } + inline void setObjectSize(float val) { _objectSize = val; } + + inline Node *getNode() const { return _node.get(); } + void setNode(Node *node) { _node = node; } + + inline RenderScene *getScene() const { return _scene; } + + inline const Vec3 &getLocalBoundaryCenter() const { return _localBoundaryCenter; } + inline void setLocalBoundaryCenter(const Vec3 &value) { _localBoundaryCenter = value; } + + inline const ccstd::vector> &getLodDataArray() const { return _vecLODData; } + + int8_t getVisibleLODLevel(const Camera *camera) const; + + inline const ccstd::vector& getLockedLODLevels() const { return _vecLockedLevels; } + void lockLODLevels(ccstd::vector &levels); + + inline uint8_t getLodCount() const { return _vecLODData.size(); } + inline void clearLODs() { _vecLODData.clear(); } + void insertLOD(uint8_t index, LODData *data); + void updateLOD(uint8_t index, LODData *data); + void eraseLOD(uint8_t index); + +private: + float getScreenUsagePercentage(const Camera *camera) const; + static float distanceToScreenUsagePercentage(const Camera *camera, float distance, float size); + float getWorldSpaceSize() const; + + ccstd::vector> _vecLODData; + ccstd::vector _vecLockedLevels; + IntrusivePtr _node; + RenderScene *_scene{nullptr}; + Vec3 _localBoundaryCenter; + float _objectSize{1.F}; + bool _enabled{true}; + + CC_DISALLOW_COPY_MOVE_ASSIGN(LODGroup); +}; + +} // namespace scene +} // namespace cc diff --git a/native/cocos/scene/RenderScene.cpp b/native/cocos/scene/RenderScene.cpp index 742f9ebeee2..cd8cf33dacc 100644 --- a/native/cocos/scene/RenderScene.cpp +++ b/native/cocos/scene/RenderScene.cpp @@ -38,6 +38,7 @@ #include "scene/Camera.h" #include "scene/DirectionalLight.h" #include "scene/DrawBatch2D.h" +#include "scene/LODGroup.h" #include "scene/Model.h" #include "scene/Octree.h" #include "scene/SphereLight.h" @@ -59,6 +60,27 @@ bool RenderScene::initialize(const IRenderSceneInfo &info) { return true; } +void RenderScene::addLODGroup(LODGroup *group) { + _lodGroups.emplace_back(group); +} + +void RenderScene::removeLODGroup(LODGroup *group) { + auto iter = std::find(_lodGroups.begin(), _lodGroups.end(), group); + if (iter != _lodGroups.end()) { + group->detachFromScene(); + _lodGroups.erase(iter); + } else { + CC_LOG_WARNING("Try to remove invalid LODGroup."); + } +} + +void RenderScene::removeLODGroups() { + for (const auto &group : _lodGroups) { + group->detachFromScene(); + } + _lodGroups.clear(); +} + void RenderScene::setMainLight(DirectionalLight *dl) { _mainLight = dl; } @@ -92,6 +114,7 @@ void RenderScene::destroy() { removeCameras(); removeSphereLights(); removeSpotLights(); + removeLODGroups(); removeModels(); } diff --git a/native/cocos/scene/RenderScene.h b/native/cocos/scene/RenderScene.h index 705139a6d7d..67770205be9 100644 --- a/native/cocos/scene/RenderScene.h +++ b/native/cocos/scene/RenderScene.h @@ -44,6 +44,7 @@ class Camera; class Octree; class DrawBatch2D; class DirectionalLight; +class LODGroup; class SphereLight; class SpotLight; @@ -71,6 +72,10 @@ class RenderScene : public RefCounted { void removeCamera(Camera *camera); void removeCameras(); + void addLODGroup(LODGroup *group); + void removeLODGroup(LODGroup *group); + void removeLODGroups(); + void unsetMainLight(DirectionalLight *dl); void addDirectionalLight(DirectionalLight *dl); void removeDirectionalLight(DirectionalLight *dl); @@ -99,6 +104,7 @@ class RenderScene : public RefCounted { inline uint64_t generateModelId() { return _modelId++; } inline const ccstd::string &getName() const { return _name; } inline const ccstd::vector> &getCameras() const { return _cameras; } + inline const ccstd::vector> &getLODGroups() const { return _lodGroups; } inline const ccstd::vector> &getSphereLights() const { return _sphereLights; } inline const ccstd::vector> &getSpotLights() const { return _spotLights; } inline const ccstd::vector> &getModels() const { return _models; } @@ -113,6 +119,7 @@ class RenderScene : public RefCounted { ccstd::vector> _models; ccstd::vector> _cameras; ccstd::vector> _directionalLights; + ccstd::vector> _lodGroups; ccstd::vector> _sphereLights; ccstd::vector> _spotLights; ccstd::vector _batches; diff --git a/native/tools/swig-config/scene.i b/native/tools/swig-config/scene.i index f7534df1f5a..944e2bc3715 100644 --- a/native/tools/swig-config/scene.i +++ b/native/tools/swig-config/scene.i @@ -15,6 +15,7 @@ #include "core/scene-graph/Scene.h" #include "core/scene-graph/SceneGlobals.h" #include "scene/Light.h" +#include "scene/LODGroup.h" #include "scene/Fog.h" #include "scene/Shadow.h" #include "scene/Skybox.h" @@ -66,6 +67,9 @@ using namespace cc; // 1. 'Ignore Section' should be placed before attribute definition and %import/%include // 2. namespace is needed // +%ignore cc::scene::LODGroup::getVisibleLODLevel; +%ignore cc::scene::LODGroup::getLockedLODLevels; + %ignore cc::scene::Pass::getBlocks; %ignore cc::scene::Pass::initPassFromTarget; @@ -97,6 +101,8 @@ using namespace cc; %ignore cc::scene::RenderScene::removeBatch; %ignore cc::scene::RenderScene::removeBatches; %ignore cc::scene::RenderScene::getBatches; +%ignore cc::scene::RenderScene::getLODGroups; +%ignore cc::scene::RenderScene::removeLODGroups; %ignore cc::scene::BakedSkinningModel::updateInstancedJointTextureInfo; %ignore cc::scene::BakedSkinningModel::updateModelBounds; @@ -291,6 +297,17 @@ using namespace cc; %attribute(cc::scene::Light, cc::scene::RenderScene*, scene, getScene); %attribute(cc::scene::Light, uint32_t, visibility, getVisibility, setVisibility); +%attribute(cc::scene::LODData, float, screenUsagePercentage, getScreenUsagePercentage, setScreenUsagePercentage); +%attribute(cc::scene::LODData, ccstd::vector>&, models, getModels); +%attribute(cc::scene::LODGroup, uint8_t, lodCount, getLodCount); +%attribute(cc::scene::LODGroup, bool, enabled, isEnabled, setEnabled); +%attribute(cc::scene::LODGroup, cc::Vec3&, localBoundaryCenter, getLocalBoundaryCenter, setLocalBoundaryCenter); +%attribute(cc::scene::LODGroup, float, objectSize, getObjectSize, setObjectSize); +%attribute(cc::scene::LODGroup, cc::Node*, node, getNode, setNode); +%attribute(cc::scene::LODGroup, ccstd::vector>&, lodDataArray, getLodDataArray); +%attribute(cc::scene::LODGroup, cc::scene::RenderScene*, scene, getScene); + + %attribute(cc::scene::DirectionalLight, cc::Vec3&, direction, getDirection, setDirection); %attribute(cc::scene::DirectionalLight, float, illuminance, getIlluminance, setIlluminance); %attribute(cc::scene::DirectionalLight, float, illuminanceHDR, getIlluminanceHDR, setIlluminanceHDR); @@ -570,6 +587,7 @@ using namespace cc; %include "scene/Define.h" %include "scene/Light.h" +%include "scene/LODGroup.h" %include "scene/Fog.h" %include "scene/Shadow.h" %include "scene/Skybox.h" From 92f74f55b298d16b2eec00838d96c818e6e1ee32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E5=85=B5?= <49358166+xubing0906@users.noreply.github.com> Date: Fri, 28 Oct 2022 19:07:17 +0800 Subject: [PATCH 107/829] reflection probe texture binding (#13168) --- cocos/misc/reflection-probe-component.ts | 2 +- cocos/render-scene/scene/model.ts | 9 +- ...Manager.ts => reflection-probe-manager.ts} | 1 - .../reflection-probe/reflection-probe-flow.ts | 2 +- .../render-reflection-probe-queue.ts | 2 +- cocos/rendering/scene-culling.ts | 2 +- .../chunks/legacy/shading-standard-base.chunk | 2 +- editor/assets/effects/builtin-unlit.effect | 4 + .../cocos/bindings/auto/jsb_pipeline_auto.cpp | 244 ++++++++++++++++++ .../cocos/bindings/auto/jsb_pipeline_auto.h | 18 ++ native/cocos/bindings/auto/jsb_scene_auto.cpp | 143 ++++++++++ native/cocos/renderer/pipeline/Define.cpp | 32 +++ native/cocos/renderer/pipeline/Define.h | 17 ++ .../pipeline/GlobalDescriptorSetManager.cpp | 5 + native/cocos/scene/Model.cpp | 42 +++ native/cocos/scene/Model.h | 14 + native/tools/swig-config/scene.i | 2 + 17 files changed, 529 insertions(+), 12 deletions(-) rename cocos/rendering/{reflectionProbeManager.ts => reflection-probe-manager.ts} (99%) diff --git a/cocos/misc/reflection-probe-component.ts b/cocos/misc/reflection-probe-component.ts index 7b9f6f15bbd..8cc156e784e 100644 --- a/cocos/misc/reflection-probe-component.ts +++ b/cocos/misc/reflection-probe-component.ts @@ -31,7 +31,7 @@ import { deviceManager } from '../gfx'; import { Component } from '../scene-graph/component'; import { CAMERA_DEFAULT_MASK } from '../rendering/define'; import { RenderTexture, TextureCube } from '../asset/assets'; -import { ReflectionProbeManager } from '../rendering/reflectionProbeManager'; +import { ReflectionProbeManager } from '../rendering/reflection-probe-manager'; import { Layers } from '../scene-graph/layers'; import { legacyCC } from '../core/global-exports'; import { Camera } from './camera-component'; diff --git a/cocos/render-scene/scene/model.ts b/cocos/render-scene/scene/model.ts index 29d40bcad7c..8d2fd2898c5 100644 --- a/cocos/render-scene/scene/model.ts +++ b/cocos/render-scene/scene/model.ts @@ -879,17 +879,14 @@ export class Model { Address.CLAMP, Address.CLAMP, )); - let bindingTexture: Texture | null = null; if (!texture) { - bindingTexture = builtinResMgr.get('empty-texture').getGFXTexture(); - } else { - bindingTexture = texture; + texture = builtinResMgr.get('empty-texture').getGFXTexture()!; } - if (bindingTexture) { + if (texture) { const subModels = this._subModels; for (let i = 0; i < subModels.length; i++) { const { descriptorSet } = subModels[i]; - descriptorSet.bindTexture(UNIFORM_REFLECTION_PROBE_TEXTURE_BINDING, bindingTexture); + descriptorSet.bindTexture(UNIFORM_REFLECTION_PROBE_TEXTURE_BINDING, texture); descriptorSet.bindSampler(UNIFORM_REFLECTION_PROBE_TEXTURE_BINDING, sampler); descriptorSet.update(); } diff --git a/cocos/rendering/reflectionProbeManager.ts b/cocos/rendering/reflection-probe-manager.ts similarity index 99% rename from cocos/rendering/reflectionProbeManager.ts rename to cocos/rendering/reflection-probe-manager.ts index a97a71b21fa..ec44c1d9703 100644 --- a/cocos/rendering/reflectionProbeManager.ts +++ b/cocos/rendering/reflection-probe-manager.ts @@ -58,7 +58,6 @@ export class ReflectionProbeManager { break; } } - console.log(`probe length = ${this._probes.length}`); } public exists (probeId: number): boolean { diff --git a/cocos/rendering/reflection-probe/reflection-probe-flow.ts b/cocos/rendering/reflection-probe/reflection-probe-flow.ts index 4a112ad89a5..150f92c8983 100644 --- a/cocos/rendering/reflection-probe/reflection-probe-flow.ts +++ b/cocos/rendering/reflection-probe/reflection-probe-flow.ts @@ -29,7 +29,7 @@ import { ReflectionProbeStage } from './reflection-probe-stage'; import { RenderFlowTag } from '../pipeline-serialization'; import { RenderPipeline } from '..'; import { Camera, CameraType, ProbeType, ReflectionProbe } from '../../render-scene/scene'; -import { ReflectionProbeManager } from '../reflectionProbeManager'; +import { ReflectionProbeManager } from '../reflection-probe-manager'; /** * @en reflection probe render flow diff --git a/cocos/rendering/render-reflection-probe-queue.ts b/cocos/rendering/render-reflection-probe-queue.ts index 73355205e82..642903ffe16 100644 --- a/cocos/rendering/render-reflection-probe-queue.ts +++ b/cocos/rendering/render-reflection-probe-queue.ts @@ -33,7 +33,7 @@ import { Model } from '../render-scene/scene/model'; import { Camera } from '../render-scene/scene'; import { PipelineRuntime } from './custom/pipeline'; import { reflectionProbeCulling } from './scene-culling'; -import { ReflectionProbeManager } from './reflectionProbeManager'; +import { ReflectionProbeManager } from './reflection-probe-manager'; const CC_USE_RGBE_OUTPUT = 'CC_USE_RGBE_OUTPUT'; const _phaseID = getPhaseID('default'); diff --git a/cocos/rendering/scene-culling.ts b/cocos/rendering/scene-culling.ts index 277e38d8268..8db7a3e9310 100644 --- a/cocos/rendering/scene-culling.ts +++ b/cocos/rendering/scene-culling.ts @@ -33,7 +33,7 @@ import { ShadowType, CSMOptimizationMode } from '../render-scene/scene/shadows'; import { PipelineSceneData } from './pipeline-scene-data'; import { ShadowLayerVolume } from './shadow/csm-layers'; import { warnID } from '../core/platform'; -import { ReflectionProbeManager } from './reflectionProbeManager'; +import { ReflectionProbeManager } from './reflection-probe-manager'; import { LODModelsCachedUtils } from './lod-models-utils'; const _tempVec3 = new Vec3(); diff --git a/editor/assets/chunks/legacy/shading-standard-base.chunk b/editor/assets/chunks/legacy/shading-standard-base.chunk index f394b8a5a62..f246806ecc1 100644 --- a/editor/assets/chunks/legacy/shading-standard-base.chunk +++ b/editor/assets/chunks/legacy/shading-standard-base.chunk @@ -203,7 +203,7 @@ vec4 CCStandardShadingBase (StandardSurface s, vec4 shadowPos) { #endif - #if CC_USE_IBL == IBL_RGBE || USE_REFLECTION_PROBE != NONE + #if CC_USE_IBL == IBL_RGBE || USE_REFLECTION_PROBE != REFLECTION_PROBE_NONE vec3 env = unpackRGBE(envmap); #else vec3 env = SRGBToLinear(envmap.rgb); diff --git a/editor/assets/effects/builtin-unlit.effect b/editor/assets/effects/builtin-unlit.effect index 89eff207d60..d291ad980f7 100644 --- a/editor/assets/effects/builtin-unlit.effect +++ b/editor/assets/effects/builtin-unlit.effect @@ -109,6 +109,7 @@ CCProgram unlit-vs %{ CCProgram unlit-fs %{ precision highp float; #include + #include #include #if USE_ALPHA_TEST @@ -149,6 +150,9 @@ CCProgram unlit-fs %{ #endif CC_APPLY_FOG(o); + #if CC_USE_RGBE_OUTPUT + o = packRGBE(o.rgb); + #endif return CCFragOutput(o); } }% diff --git a/native/cocos/bindings/auto/jsb_pipeline_auto.cpp b/native/cocos/bindings/auto/jsb_pipeline_auto.cpp index 6184b3da994..532adeb7799 100644 --- a/native/cocos/bindings/auto/jsb_pipeline_auto.cpp +++ b/native/cocos/bindings/auto/jsb_pipeline_auto.cpp @@ -6918,6 +6918,248 @@ bool js_register_cc_pipeline_REFLECTIONSTORAGE(se::Object* obj) { } +se::Class* __jsb_cc_pipeline_REFLECTIONPROBECUBEMAP_class = nullptr; +se::Object* __jsb_cc_pipeline_REFLECTIONPROBECUBEMAP_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_pipeline_REFLECTIONPROBECUBEMAP) + +static bool js_cc_pipeline_REFLECTIONPROBECUBEMAP_DESCRIPTOR_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gfx::DescriptorSetLayoutBinding result; + + result = cc::pipeline::REFLECTIONPROBECUBEMAP::DESCRIPTOR; + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "REFLECTIONPROBECUBEMAP_DESCRIPTOR_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_PROP_GET(js_cc_pipeline_REFLECTIONPROBECUBEMAP_DESCRIPTOR_get) + +static bool js_cc_pipeline_REFLECTIONPROBECUBEMAP_LAYOUT_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gfx::UniformSamplerTexture result; + + result = cc::pipeline::REFLECTIONPROBECUBEMAP::LAYOUT; + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "REFLECTIONPROBECUBEMAP_LAYOUT_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_PROP_GET(js_cc_pipeline_REFLECTIONPROBECUBEMAP_LAYOUT_get) + +static bool js_cc_pipeline_REFLECTIONPROBECUBEMAP_NAME_get(se::State& s) +{ + CC_UNUSED bool ok = true; + ccstd::string result; + + result = (ccstd::string)cc::pipeline::REFLECTIONPROBECUBEMAP::NAME; + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "REFLECTIONPROBECUBEMAP_NAME_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_PROP_GET(js_cc_pipeline_REFLECTIONPROBECUBEMAP_NAME_get) + +// js_ctor +static bool js_new_cc_pipeline_REFLECTIONPROBECUBEMAP(se::State& s) // NOLINT(readability-identifier-naming) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + + cc::pipeline::REFLECTIONPROBECUBEMAP *result; + result = (cc::pipeline::REFLECTIONPROBECUBEMAP *)new cc::pipeline::REFLECTIONPROBECUBEMAP(); + + + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); + return true; +} +SE_BIND_CTOR(js_new_cc_pipeline_REFLECTIONPROBECUBEMAP, __jsb_cc_pipeline_REFLECTIONPROBECUBEMAP_class, js_delete_cc_pipeline_REFLECTIONPROBECUBEMAP) + +static bool js_delete_cc_pipeline_REFLECTIONPROBECUBEMAP(se::State& s) +{ + // js_dtoroverride + return true; +} +SE_BIND_FINALIZE_FUNC(js_delete_cc_pipeline_REFLECTIONPROBECUBEMAP) + +template<> +bool sevalue_to_native(const se::Value &from, cc::pipeline::REFLECTIONPROBECUBEMAP * to, se::Object *ctx) +{ + assert(from.isObject()); + se::Object *json = from.toObject(); + auto* data = reinterpret_cast(json->getPrivateData()); + if (data) { + *to = *data; + return true; + } + se::Value field; + bool ok = true; + + return ok; +} + + +bool js_register_cc_pipeline_REFLECTIONPROBECUBEMAP(se::Object* obj) { + auto* cls = se::Class::create("REFLECTIONPROBECUBEMAP", obj, nullptr, _SE(js_new_cc_pipeline_REFLECTIONPROBECUBEMAP)); + + + + cls->defineStaticProperty("BINDING", nullptr, nullptr); + cls->defineStaticProperty("DESCRIPTOR", _SE(js_cc_pipeline_REFLECTIONPROBECUBEMAP_DESCRIPTOR_get), nullptr); + cls->defineStaticProperty("LAYOUT", _SE(js_cc_pipeline_REFLECTIONPROBECUBEMAP_LAYOUT_get), nullptr); + cls->defineStaticProperty("NAME", _SE(js_cc_pipeline_REFLECTIONPROBECUBEMAP_NAME_get), nullptr); + + + + cls->defineFinalizeFunction(_SE(js_delete_cc_pipeline_REFLECTIONPROBECUBEMAP)); + + + cls->install(); + JSBClassType::registerClass(cls); + + __jsb_cc_pipeline_REFLECTIONPROBECUBEMAP_proto = cls->getProto(); + __jsb_cc_pipeline_REFLECTIONPROBECUBEMAP_class = cls; + se::ScriptEngine::getInstance()->clearException(); + return true; +} + + +se::Class* __jsb_cc_pipeline_REFLECTIONPROBEPLANARMAP_class = nullptr; +se::Object* __jsb_cc_pipeline_REFLECTIONPROBEPLANARMAP_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_pipeline_REFLECTIONPROBEPLANARMAP) + +static bool js_cc_pipeline_REFLECTIONPROBEPLANARMAP_DESCRIPTOR_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gfx::DescriptorSetLayoutBinding result; + + result = cc::pipeline::REFLECTIONPROBEPLANARMAP::DESCRIPTOR; + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "REFLECTIONPROBEPLANARMAP_DESCRIPTOR_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_PROP_GET(js_cc_pipeline_REFLECTIONPROBEPLANARMAP_DESCRIPTOR_get) + +static bool js_cc_pipeline_REFLECTIONPROBEPLANARMAP_LAYOUT_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::gfx::UniformSamplerTexture result; + + result = cc::pipeline::REFLECTIONPROBEPLANARMAP::LAYOUT; + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "REFLECTIONPROBEPLANARMAP_LAYOUT_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_PROP_GET(js_cc_pipeline_REFLECTIONPROBEPLANARMAP_LAYOUT_get) + +static bool js_cc_pipeline_REFLECTIONPROBEPLANARMAP_NAME_get(se::State& s) +{ + CC_UNUSED bool ok = true; + ccstd::string result; + + result = (ccstd::string)cc::pipeline::REFLECTIONPROBEPLANARMAP::NAME; + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "REFLECTIONPROBEPLANARMAP_NAME_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_PROP_GET(js_cc_pipeline_REFLECTIONPROBEPLANARMAP_NAME_get) + +// js_ctor +static bool js_new_cc_pipeline_REFLECTIONPROBEPLANARMAP(se::State& s) // NOLINT(readability-identifier-naming) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + + cc::pipeline::REFLECTIONPROBEPLANARMAP *result; + result = (cc::pipeline::REFLECTIONPROBEPLANARMAP *)new cc::pipeline::REFLECTIONPROBEPLANARMAP(); + + + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); + return true; +} +SE_BIND_CTOR(js_new_cc_pipeline_REFLECTIONPROBEPLANARMAP, __jsb_cc_pipeline_REFLECTIONPROBEPLANARMAP_class, js_delete_cc_pipeline_REFLECTIONPROBEPLANARMAP) + +static bool js_delete_cc_pipeline_REFLECTIONPROBEPLANARMAP(se::State& s) +{ + // js_dtoroverride + return true; +} +SE_BIND_FINALIZE_FUNC(js_delete_cc_pipeline_REFLECTIONPROBEPLANARMAP) + +template<> +bool sevalue_to_native(const se::Value &from, cc::pipeline::REFLECTIONPROBEPLANARMAP * to, se::Object *ctx) +{ + assert(from.isObject()); + se::Object *json = from.toObject(); + auto* data = reinterpret_cast(json->getPrivateData()); + if (data) { + *to = *data; + return true; + } + se::Value field; + bool ok = true; + + return ok; +} + + +bool js_register_cc_pipeline_REFLECTIONPROBEPLANARMAP(se::Object* obj) { + auto* cls = se::Class::create("REFLECTIONPROBEPLANARMAP", obj, nullptr, _SE(js_new_cc_pipeline_REFLECTIONPROBEPLANARMAP)); + + + + cls->defineStaticProperty("BINDING", nullptr, nullptr); + cls->defineStaticProperty("DESCRIPTOR", _SE(js_cc_pipeline_REFLECTIONPROBEPLANARMAP_DESCRIPTOR_get), nullptr); + cls->defineStaticProperty("LAYOUT", _SE(js_cc_pipeline_REFLECTIONPROBEPLANARMAP_LAYOUT_get), nullptr); + cls->defineStaticProperty("NAME", _SE(js_cc_pipeline_REFLECTIONPROBEPLANARMAP_NAME_get), nullptr); + + + + cls->defineFinalizeFunction(_SE(js_delete_cc_pipeline_REFLECTIONPROBEPLANARMAP)); + + + cls->install(); + JSBClassType::registerClass(cls); + + __jsb_cc_pipeline_REFLECTIONPROBEPLANARMAP_proto = cls->getProto(); + __jsb_cc_pipeline_REFLECTIONPROBEPLANARMAP_class = cls; + se::ScriptEngine::getInstance()->clearException(); + return true; +} + + static bool js_cc_pipeline_localDescriptorSetLayoutResizeMaxJoints(se::State& s) { // js_function @@ -21677,6 +21919,8 @@ bool register_all_pipeline(se::Object* obj) { js_register_cc_pipeline_SPRITETEXTURE(ns); js_register_cc_pipeline_REFLECTIONTEXTURE(ns); js_register_cc_pipeline_REFLECTIONSTORAGE(ns); + js_register_cc_pipeline_REFLECTIONPROBECUBEMAP(ns); + js_register_cc_pipeline_REFLECTIONPROBEPLANARMAP(ns); js_register_cc_pipeline_RenderPipelineInfo(ns); js_register_cc_pipeline_RenderPipeline(ns); js_register_cc_pipeline_RenderFlowInfo(ns); diff --git a/native/cocos/bindings/auto/jsb_pipeline_auto.h b/native/cocos/bindings/auto/jsb_pipeline_auto.h index 2ceb715f847..35844177a6d 100644 --- a/native/cocos/bindings/auto/jsb_pipeline_auto.h +++ b/native/cocos/bindings/auto/jsb_pipeline_auto.h @@ -417,6 +417,24 @@ template<> bool sevalue_to_native(const se::Value &from, cc::pipeline::REFLECTIONSTORAGE * to, se::Object *ctx); +JSB_REGISTER_OBJECT_TYPE(cc::pipeline::REFLECTIONPROBECUBEMAP); +extern se::Object *__jsb_cc_pipeline_REFLECTIONPROBECUBEMAP_proto; // NOLINT +extern se::Class * __jsb_cc_pipeline_REFLECTIONPROBECUBEMAP_class; // NOLINT + + +template<> +bool sevalue_to_native(const se::Value &from, cc::pipeline::REFLECTIONPROBECUBEMAP * to, se::Object *ctx); + + +JSB_REGISTER_OBJECT_TYPE(cc::pipeline::REFLECTIONPROBEPLANARMAP); +extern se::Object *__jsb_cc_pipeline_REFLECTIONPROBEPLANARMAP_proto; // NOLINT +extern se::Class * __jsb_cc_pipeline_REFLECTIONPROBEPLANARMAP_class; // NOLINT + + +template<> +bool sevalue_to_native(const se::Value &from, cc::pipeline::REFLECTIONPROBEPLANARMAP * to, se::Object *ctx); + + JSB_REGISTER_OBJECT_TYPE(cc::pipeline::RenderPipelineInfo); extern se::Object *__jsb_cc_pipeline_RenderPipelineInfo_proto; // NOLINT extern se::Class * __jsb_cc_pipeline_RenderPipelineInfo_class; // NOLINT diff --git a/native/cocos/bindings/auto/jsb_scene_auto.cpp b/native/cocos/bindings/auto/jsb_scene_auto.cpp index b560c08f806..56621010f4a 100644 --- a/native/cocos/bindings/auto/jsb_scene_auto.cpp +++ b/native/cocos/bindings/auto/jsb_scene_auto.cpp @@ -811,6 +811,14 @@ using namespace cc; #define cc_scene_Model_useLightProbe_set(self_, val_) self_->setUseLightProbe(val_) +#define cc_scene_Model_bakeToReflectionProbe_get(self_) self_->getBakeToReflectionProbe() +#define cc_scene_Model_bakeToReflectionProbe_set(self_, val_) self_->setBakeToReflectionProbe(val_) + + +#define cc_scene_Model_reflectionProbeType_get(self_) self_->getReflectionProbeType() +#define cc_scene_Model_reflectionProbeType_set(self_, val_) self_->setReflectionProbeType(val_) + + #define cc_scene_SubModel_passes_get(self_) self_->getPasses() #define cc_scene_SubModel_passes_set(self_, val_) self_->setPasses(val_) @@ -14535,6 +14543,58 @@ static bool js_cc_scene_Model_updateLocalShadowBias(se::State& s) } SE_BIND_FUNC(js_cc_scene_Model_updateLocalShadowBias) +static bool js_cc_scene_Model_updateReflctionProbeCubemap(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::scene::Model *arg1 = (cc::scene::Model *) NULL ; + cc::TextureCube *arg2 = (cc::TextureCube *) NULL ; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "Model_updateReflctionProbeCubemap,2,SWIGTYPE_p_cc__TextureCube"); + (arg1)->updateReflctionProbeCubemap(arg2); + + + return true; +} +SE_BIND_FUNC(js_cc_scene_Model_updateReflctionProbeCubemap) + +static bool js_cc_scene_Model_updateReflctionProbePlanarMap(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::scene::Model *arg1 = (cc::scene::Model *) NULL ; + cc::gfx::Texture *arg2 = (cc::gfx::Texture *) NULL ; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "Model_updateReflctionProbePlanarMap,2,SWIGTYPE_p_cc__gfx__Texture"); + (arg1)->updateReflctionProbePlanarMap(arg2); + + + return true; +} +SE_BIND_FUNC(js_cc_scene_Model_updateReflctionProbePlanarMap) + static bool js_cc_scene_Model_attachToScene(se::State& s) { // js_function @@ -15669,6 +15729,85 @@ static bool js_cc_scene_Model_useLightProbe_get(se::State& s) } SE_BIND_PROP_GET(js_cc_scene_Model_useLightProbe_get) +static bool js_cc_scene_Model_bakeToReflectionProbe_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::scene::Model *arg1 = (cc::scene::Model *) NULL ; + bool arg2 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) bool + ok &= sevalue_to_native(args[0], &arg2); + SE_PRECONDITION2(ok, false, "Model_bakeToReflectionProbe_set,2,SWIGTYPE_bool"); + cc_scene_Model_bakeToReflectionProbe_set(arg1,arg2); + + + return true; +} +SE_BIND_PROP_SET(js_cc_scene_Model_bakeToReflectionProbe_set) + +static bool js_cc_scene_Model_bakeToReflectionProbe_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::scene::Model *arg1 = (cc::scene::Model *) NULL ; + bool result; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (bool)cc_scene_Model_bakeToReflectionProbe_get(arg1); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + + + return true; +} +SE_BIND_PROP_GET(js_cc_scene_Model_bakeToReflectionProbe_get) + +static bool js_cc_scene_Model_reflectionProbeType_set(se::State& s) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::scene::Model *arg1 = (cc::scene::Model *) NULL ; + uint32_t arg2 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "Model_reflectionProbeType_set,2,SWIGTYPE_uint32_t"); + + cc_scene_Model_reflectionProbeType_set(arg1,arg2); + + + return true; +} +SE_BIND_PROP_SET(js_cc_scene_Model_reflectionProbeType_set) + +static bool js_cc_scene_Model_reflectionProbeType_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::scene::Model *arg1 = (cc::scene::Model *) NULL ; + uint32_t result; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = cc_scene_Model_reflectionProbeType_get(arg1); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "Model_reflectionProbeType_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_PROP_GET(js_cc_scene_Model_reflectionProbeType_get) + bool js_register_cc_scene_Model(se::Object* obj) { auto* cls = se::Class::create("Model", obj, nullptr, _SE(js_new_cc_scene_Model)); @@ -15696,6 +15835,8 @@ bool js_register_cc_scene_Model(se::Object* obj) { cls->defineProperty("isDynamicBatching", _SE(js_cc_scene_Model_isDynamicBatching_get), _SE(js_cc_scene_Model_isDynamicBatching_set)); cls->defineProperty("priority", _SE(js_cc_scene_Model_priority_get), _SE(js_cc_scene_Model_priority_set)); cls->defineProperty("useLightProbe", _SE(js_cc_scene_Model_useLightProbe_get), _SE(js_cc_scene_Model_useLightProbe_set)); + cls->defineProperty("bakeToReflectionProbe", _SE(js_cc_scene_Model_bakeToReflectionProbe_get), _SE(js_cc_scene_Model_bakeToReflectionProbe_set)); + cls->defineProperty("reflectionProbeType", _SE(js_cc_scene_Model_reflectionProbeType_get), _SE(js_cc_scene_Model_reflectionProbeType_set)); cls->defineFunction("destroy", _SE(js_cc_scene_Model_destroy)); cls->defineFunction("initSubModel", _SE(js_cc_scene_Model_initSubModel)); @@ -15725,6 +15866,8 @@ bool js_register_cc_scene_Model(se::Object* obj) { cls->defineFunction("updateSHUBOs", _SE(js_cc_scene_Model_updateSHUBOs)); cls->defineFunction("updateWorldBoundUBOs", _SE(js_cc_scene_Model_updateWorldBoundUBOs)); cls->defineFunction("updateLocalShadowBias", _SE(js_cc_scene_Model_updateLocalShadowBias)); + cls->defineFunction("updateReflctionProbeCubemap", _SE(js_cc_scene_Model_updateReflctionProbeCubemap)); + cls->defineFunction("updateReflctionProbePlanarMap", _SE(js_cc_scene_Model_updateReflctionProbePlanarMap)); cls->defineFunction("attachToScene", _SE(js_cc_scene_Model_attachToScene)); cls->defineFunction("detachFromScene", _SE(js_cc_scene_Model_detachFromScene)); cls->defineFunction("setLocalSHBuffer", _SE(js_cc_scene_Model_setLocalSHBuffer)); diff --git a/native/cocos/renderer/pipeline/Define.cpp b/native/cocos/renderer/pipeline/Define.cpp index f047c639ad5..be8e454538c 100644 --- a/native/cocos/renderer/pipeline/Define.cpp +++ b/native/cocos/renderer/pipeline/Define.cpp @@ -579,6 +579,38 @@ const gfx::UniformStorageImage REFLECTIONSTORAGE::LAYOUT = { 1, }; +const ccstd::string REFLECTIONPROBECUBEMAP::NAME = "cc_reflectionProbeCubemap"; +const gfx::DescriptorSetLayoutBinding REFLECTIONPROBECUBEMAP::DESCRIPTOR = { + REFLECTIONPROBECUBEMAP::BINDING, + gfx::DescriptorType::SAMPLER_TEXTURE, + 1, + gfx::ShaderStageFlagBit::FRAGMENT, + {}, +}; +const gfx::UniformSamplerTexture REFLECTIONPROBECUBEMAP::LAYOUT = { + localSet, + REFLECTIONPROBECUBEMAP::BINDING, + REFLECTIONPROBECUBEMAP::NAME, + gfx::Type::SAMPLER_CUBE, + 1, +}; + +const ccstd::string REFLECTIONPROBEPLANARMAP::NAME = "cc_reflectionProbePlanarMap"; +const gfx::DescriptorSetLayoutBinding REFLECTIONPROBEPLANARMAP::DESCRIPTOR = { + REFLECTIONPROBEPLANARMAP::BINDING, + gfx::DescriptorType::SAMPLER_TEXTURE, + 1, + gfx::ShaderStageFlagBit::FRAGMENT, + {}, +}; +const gfx::UniformSamplerTexture REFLECTIONPROBEPLANARMAP::LAYOUT = { + localSet, + REFLECTIONPROBEPLANARMAP::BINDING, + REFLECTIONPROBEPLANARMAP::NAME, + gfx::Type::SAMPLER2D, + 1, +}; + uint32_t skyboxFlag = static_cast(gfx::ClearFlagBit::STENCIL) << 1; uint32_t nextPow2(uint32_t val) { diff --git a/native/cocos/renderer/pipeline/Define.h b/native/cocos/renderer/pipeline/Define.h index ac437e19b5b..63dd67d0635 100644 --- a/native/cocos/renderer/pipeline/Define.h +++ b/native/cocos/renderer/pipeline/Define.h @@ -255,6 +255,9 @@ enum class CC_DLL ModelLocalBindings { STORAGE_REFLECTION, + SAMPLER_REFLECTION_PROBE_CUBE, + SAMPLER_REFLECTION_PROBE_PLANAR, + COUNT, }; CC_ENUM_CONVERSION_OPERATOR(ModelLocalBindings) @@ -641,6 +644,20 @@ struct CC_DLL REFLECTIONSTORAGE { static const ccstd::string NAME; }; +struct CC_DLL REFLECTIONPROBECUBEMAP { + static constexpr uint32_t BINDING = static_cast(ModelLocalBindings::SAMPLER_REFLECTION_PROBE_CUBE); + static const gfx::DescriptorSetLayoutBinding DESCRIPTOR; + static const gfx::UniformSamplerTexture LAYOUT; + static const ccstd::string NAME; +}; + +struct CC_DLL REFLECTIONPROBEPLANARMAP { + static constexpr uint32_t BINDING = static_cast(ModelLocalBindings::SAMPLER_REFLECTION_PROBE_PLANAR); + static const gfx::DescriptorSetLayoutBinding DESCRIPTOR; + static const gfx::UniformSamplerTexture LAYOUT; + static const ccstd::string NAME; +}; + static constexpr uint32_t CLUSTER_LIGHT_BINDING = 4; static constexpr uint32_t CLUSTER_LIGHT_INDEX_BINDING = 5; static constexpr uint32_t CLUSTER_LIGHT_GRID_BINDING = 6; diff --git a/native/cocos/renderer/pipeline/GlobalDescriptorSetManager.cpp b/native/cocos/renderer/pipeline/GlobalDescriptorSetManager.cpp index 8669343b2cd..29cabe88397 100644 --- a/native/cocos/renderer/pipeline/GlobalDescriptorSetManager.cpp +++ b/native/cocos/renderer/pipeline/GlobalDescriptorSetManager.cpp @@ -231,6 +231,11 @@ void GlobalDSManager::setDescriptorSetLayout() { localDescriptorSetLayout.bindings[REFLECTIONTEXTURE::BINDING] = REFLECTIONTEXTURE::DESCRIPTOR; localDescriptorSetLayout.storeImages[REFLECTIONSTORAGE::NAME] = REFLECTIONSTORAGE::LAYOUT; localDescriptorSetLayout.bindings[REFLECTIONSTORAGE::BINDING] = REFLECTIONSTORAGE::DESCRIPTOR; + + localDescriptorSetLayout.samplers[REFLECTIONPROBECUBEMAP::NAME] = REFLECTIONPROBECUBEMAP::LAYOUT; + localDescriptorSetLayout.bindings[REFLECTIONPROBECUBEMAP::BINDING] = REFLECTIONPROBECUBEMAP::DESCRIPTOR; + localDescriptorSetLayout.samplers[REFLECTIONPROBEPLANARMAP::NAME] = REFLECTIONPROBEPLANARMAP::LAYOUT; + localDescriptorSetLayout.bindings[REFLECTIONPROBEPLANARMAP::BINDING] = REFLECTIONPROBEPLANARMAP::DESCRIPTOR; } } // namespace pipeline diff --git a/native/cocos/scene/Model.cpp b/native/cocos/scene/Model.cpp index bde5b4832c5..51787d2dfda 100644 --- a/native/cocos/scene/Model.cpp +++ b/native/cocos/scene/Model.cpp @@ -509,6 +509,48 @@ void Model::updateLocalShadowBias() { _localDataUpdated = true; } +void Model::updateReflctionProbeCubemap(TextureCube *texture) { + _localDataUpdated = true; + if (texture == nullptr) { + texture = BuiltinResMgr::getInstance()->get(ccstd::string("default-cube-texture")); + } + gfx::Texture *gfxTexture = texture->getGFXTexture(); + if (gfxTexture) { + auto *sampler = _device->getSampler(texture->getSamplerInfo()); + for (SubModel *subModel : _subModels) { + gfx::DescriptorSet *descriptorSet = subModel->getDescriptorSet(); + descriptorSet->bindTexture(pipeline::REFLECTIONPROBECUBEMAP::BINDING, gfxTexture); + descriptorSet->bindSampler(pipeline::REFLECTIONPROBECUBEMAP::BINDING, sampler); + descriptorSet->update(); + } + } +} +void Model::updateReflctionProbePlanarMap(gfx::Texture *texture) { + _localDataUpdated = true; + + gfx::Texture *bindingTexture = texture; + if (!bindingTexture) { + bindingTexture = BuiltinResMgr::getInstance()->get(ccstd::string("empty-texture"))->getGFXTexture(); + } + if (bindingTexture) { + gfx::SamplerInfo info{ + cc::gfx::Filter::LINEAR, + cc::gfx::Filter::LINEAR, + cc::gfx::Filter::NONE, + cc::gfx::Address::CLAMP, + cc::gfx::Address::CLAMP, + cc::gfx::Address::CLAMP, + }; + auto *sampler = _device->getSampler(info); + for (SubModel *subModel : _subModels) { + gfx::DescriptorSet *descriptorSet = subModel->getDescriptorSet(); + descriptorSet->bindTexture(pipeline::REFLECTIONPROBEPLANARMAP::BINDING, bindingTexture); + descriptorSet->bindSampler(pipeline::REFLECTIONPROBEPLANARMAP::BINDING, sampler); + descriptorSet->update(); + } + } +} + void Model::setInstancedAttribute(const ccstd::string &name, const float *value, uint32_t byteLength) { for (const auto &subModel : _subModels) { subModel->setInstancedAttribute(name, value, byteLength); diff --git a/native/cocos/scene/Model.h b/native/cocos/scene/Model.h index f548db7fb74..224ce89bfce 100644 --- a/native/cocos/scene/Model.h +++ b/native/cocos/scene/Model.h @@ -41,6 +41,7 @@ #include "renderer/gfx-base/GFXDef-common.h" #include "renderer/gfx-base/GFXTexture.h" #include "scene/SubModel.h" +#include "core/assets/TextureCube.h" namespace cc { @@ -112,6 +113,8 @@ class Model : public RefCounted, public event::EventTarget { void updateOctree(); void updateWorldBoundUBOs(); void updateLocalShadowBias(); + void updateReflctionProbeCubemap(TextureCube *texture); + void updateReflctionProbePlanarMap(gfx::Texture *texture); inline void attachToScene(RenderScene *scene) { _scene = scene; @@ -152,6 +155,14 @@ class Model : public RefCounted, public event::EventTarget { _useLightProbe = val; onMacroPatchesStateChanged(); } + inline bool getBakeToReflectionProbe() const { return _bakeToReflectionProbe; } + inline void setBakeToReflectionProbe(bool val) { + _bakeToReflectionProbe = val; + } + inline bool getReflectionProbeType() const { return _reflectionProbeType; } + inline void setReflectionProbeType(int32_t val) { + _reflectionProbeType = val; + } inline int32_t getTetrahedronIndex() const { return _tetrahedronIndex; } inline void setTetrahedronIndex(int32_t index) { _tetrahedronIndex = index; } inline bool showTetrahedron() const { return isLightProbeAvailable(); } @@ -221,6 +232,9 @@ class Model : public RefCounted, public event::EventTarget { Vec3 _lastWorldBoundCenter{INFINITY, INFINITY, INFINITY}; bool _useLightProbe = false; + bool _bakeToReflectionProbe{true}; + int32_t _reflectionProbeType{0}; + bool _enabled{false}; bool _castShadow{false}; bool _receiveShadow{false}; diff --git a/native/tools/swig-config/scene.i b/native/tools/swig-config/scene.i index 944e2bc3715..3c4cc69ba46 100644 --- a/native/tools/swig-config/scene.i +++ b/native/tools/swig-config/scene.i @@ -443,6 +443,8 @@ using namespace cc; %attribute(cc::scene::Model, bool, isDynamicBatching, isDynamicBatching, setDynamicBatching); %attribute(cc::scene::Model, uint32_t, priority, getPriority, setPriority); %attribute(cc::scene::Model, bool, useLightProbe, getUseLightProbe, setUseLightProbe); +%attribute(cc::scene::Model, bool, bakeToReflectionProbe, getBakeToReflectionProbe, setBakeToReflectionProbe); +%attribute(cc::scene::Model, uint32_t, reflectionProbeType, getReflectionProbeType, setReflectionProbeType); %attribute(cc::scene::SubModel, std::shared_ptr>> &, passes, getPasses, setPasses); %attribute(cc::scene::SubModel, ccstd::vector> &, shaders, getShaders, setShaders); From 6f83d4dbd2318435cde98d9a48da46dae1c3d0f3 Mon Sep 17 00:00:00 2001 From: Ling Zhan Date: Fri, 28 Oct 2022 23:33:16 +0800 Subject: [PATCH 108/829] [feat] physics-2d supports switching back-end in EDITOR (#13177) * [feat] physics-2d supports switching back-end in EDITOR * tweak * tweak * tweak * eslint ignore ban-types (object, Function) in 2d physics-system.ts * tweak --- cocos/physics-2d/box2d/instantiate.ts | 34 +- cocos/physics-2d/builtin/instantiate.ts | 34 +- .../components/colliders/collider-2d.ts | 2 +- .../framework/components/joints/joint-2d.ts | 2 +- .../framework/components/rigid-body-2d.ts | 10 +- cocos/physics-2d/framework/index.ts | 8 + cocos/physics-2d/framework/instance.ts | 248 ------------ .../physics-2d/framework/physics-selector.ts | 383 +++++++++++++++++- cocos/physics-2d/framework/physics-system.ts | 29 +- 9 files changed, 433 insertions(+), 317 deletions(-) delete mode 100644 cocos/physics-2d/framework/instance.ts diff --git a/cocos/physics-2d/box2d/instantiate.ts b/cocos/physics-2d/box2d/instantiate.ts index 44b1bee3546..2917d12e06b 100644 --- a/cocos/physics-2d/box2d/instantiate.ts +++ b/cocos/physics-2d/box2d/instantiate.ts @@ -1,4 +1,4 @@ -import { select } from '../framework/physics-selector'; +import { selector } from '../framework/physics-selector'; import { b2PhysicsWorld } from './physics-world'; import { b2RigidBody2D } from './rigid-body'; import { b2BoxShape } from './shapes/box-shape-2d'; @@ -13,20 +13,24 @@ import { b2FixedJoint } from './joints/fixed-joint'; import { b2WheelJoint } from './joints/wheel-joint'; import { b2HingeJoint } from './joints/hinge-joint'; -select('box2d', { - PhysicsWorld: b2PhysicsWorld, - RigidBody: b2RigidBody2D, +import { Game, game } from '../../game'; - BoxShape: b2BoxShape, - CircleShape: b2CircleShape, - PolygonShape: b2PolygonShape, +game.once(Game.EVENT_PRE_SUBSYSTEM_INIT, () => { + selector.register('box2d', { + PhysicsWorld: b2PhysicsWorld, + RigidBody: b2RigidBody2D, - MouseJoint: b2MouseJoint, - DistanceJoint: b2DistanceJoint, - SpringJoint: b2SpringJoint, - RelativeJoint: b2RelativeJoint, - SliderJoint: b2SliderJoint, - FixedJoint: b2FixedJoint, - WheelJoint: b2WheelJoint, - HingeJoint: b2HingeJoint, + BoxShape: b2BoxShape, + CircleShape: b2CircleShape, + PolygonShape: b2PolygonShape, + + MouseJoint: b2MouseJoint, + DistanceJoint: b2DistanceJoint, + SpringJoint: b2SpringJoint, + RelativeJoint: b2RelativeJoint, + SliderJoint: b2SliderJoint, + FixedJoint: b2FixedJoint, + WheelJoint: b2WheelJoint, + HingeJoint: b2HingeJoint, + }); }); diff --git a/cocos/physics-2d/builtin/instantiate.ts b/cocos/physics-2d/builtin/instantiate.ts index 2913d49efed..095704acbea 100644 --- a/cocos/physics-2d/builtin/instantiate.ts +++ b/cocos/physics-2d/builtin/instantiate.ts @@ -1,23 +1,27 @@ -import { select } from '../framework/physics-selector'; +import { selector } from '../framework/physics-selector'; import { BuiltinPhysicsWorld } from './builtin-world'; import { BuiltinBoxShape } from './shapes/box-shape-2d'; import { BuiltinCircleShape } from './shapes/circle-shape-2d'; import { BuiltinPolygonShape } from './shapes/polygon-shape-2d'; -select('builtin', { - PhysicsWorld: BuiltinPhysicsWorld, - RigidBody: null, +import { Game, game } from '../../game'; - BoxShape: BuiltinBoxShape, - CircleShape: BuiltinCircleShape, - PolygonShape: BuiltinPolygonShape, +game.once(Game.EVENT_PRE_SUBSYSTEM_INIT, () => { + selector.register('builtin', { + PhysicsWorld: BuiltinPhysicsWorld, + RigidBody: null, - MouseJoint: null, - DistanceJoint: null, - SpringJoint: null, - RelativeJoint: null, - SliderJoint: null, - FixedJoint: null, - WheelJoint: null, - HingeJoint: null, + BoxShape: BuiltinBoxShape, + CircleShape: BuiltinCircleShape, + PolygonShape: BuiltinPolygonShape, + + MouseJoint: null, + DistanceJoint: null, + SpringJoint: null, + RelativeJoint: null, + SliderJoint: null, + FixedJoint: null, + WheelJoint: null, + HingeJoint: null, + }); }); diff --git a/cocos/physics-2d/framework/components/colliders/collider-2d.ts b/cocos/physics-2d/framework/components/colliders/collider-2d.ts index 72f4fb60bf3..73cbbec79c8 100644 --- a/cocos/physics-2d/framework/components/colliders/collider-2d.ts +++ b/cocos/physics-2d/framework/components/colliders/collider-2d.ts @@ -7,7 +7,7 @@ import { PhysicsGroup } from '../../../../physics/framework/physics-enum'; import { Eventify } from '../../../../core/event'; import { RigidBody2D } from '../rigid-body-2d'; -import { createShape } from '../../instance'; +import { createShape } from '../../physics-selector'; import { ECollider2DType } from '../../physics-types'; import { IBaseShape } from '../../../spec/i-physics-shape'; import { legacyCC } from '../../../../core/global-exports'; diff --git a/cocos/physics-2d/framework/components/joints/joint-2d.ts b/cocos/physics-2d/framework/components/joints/joint-2d.ts index 4d369e4dd83..1105d4adcb8 100644 --- a/cocos/physics-2d/framework/components/joints/joint-2d.ts +++ b/cocos/physics-2d/framework/components/joints/joint-2d.ts @@ -4,7 +4,7 @@ import { property, type, ccclass } from '../../../../core/data/class-decorator'; import { RigidBody2D } from '../rigid-body-2d'; import { IJoint2D } from '../../../spec/i-physics-joint'; import { EJoint2DType } from '../../physics-types'; -import { createJoint } from '../../instance'; +import { createJoint } from '../../physics-selector'; import { legacyCC } from '../../../../core/global-exports'; import { Component } from '../../../../scene-graph'; diff --git a/cocos/physics-2d/framework/components/rigid-body-2d.ts b/cocos/physics-2d/framework/components/rigid-body-2d.ts index 7a9b569ab89..1fb4dc8fdff 100644 --- a/cocos/physics-2d/framework/components/rigid-body-2d.ts +++ b/cocos/physics-2d/framework/components/rigid-body-2d.ts @@ -3,7 +3,7 @@ import { IRigidBody2D } from '../../spec/i-rigid-body'; import { _decorator, Vec2, IVec2Like } from '../../../core'; import { ERigidBody2DType } from '../physics-types'; import { ccclass } from '../../../core/data/class-decorator'; -import { createRigidBody } from '../instance'; +import { createRigidBody } from '../physics-selector'; import { PhysicsGroup } from '../../../physics/framework/physics-enum'; import { legacyCC } from '../../../core/global-exports'; import { Component } from '../../../scene-graph'; @@ -295,8 +295,8 @@ export class RigidBody2D extends Component { /** * @en * Apply a force at a world point. If the force is not - * applied at the center of mass, it will generate a torque and - * affect the angular velocity. + * applied at the center of mass, it will generate a torque and + * affect the angular velocity. * @zh * 施加一个力到刚体上的一个点。如果力没有施加到刚体的质心上,还会产生一个扭矩并且影响到角速度。 * @param force - the world force vector. @@ -340,8 +340,8 @@ export class RigidBody2D extends Component { /** * @en * Apply a impulse at a world point, this immediately modifies the velocity. - * If the impulse is not applied at the center of mass, it will generate a torque and - * affect the angular velocity. + * If the impulse is not applied at the center of mass, it will generate a torque and + * affect the angular velocity. * @zh * 施加冲量到刚体上的一个点,将立即改变刚体的线性速度。 * 如果冲量施加到的点不是刚体的质心,那么将产生一个扭矩并影响刚体的角速度。 diff --git a/cocos/physics-2d/framework/index.ts b/cocos/physics-2d/framework/index.ts index 6d424cccf2b..0b5026a6818 100644 --- a/cocos/physics-2d/framework/index.ts +++ b/cocos/physics-2d/framework/index.ts @@ -1,5 +1,9 @@ +import { legacyCC } from '../../core/global-exports'; + import * as PolygonSeparator from './utils/polygon-separator'; +import { selector } from './physics-selector'; + export * from './physics-types'; export * from './physics-system'; @@ -29,3 +33,7 @@ export * from './components/joints/hinge-joint-2d'; export const Physics2DUtils = { PolygonSeparator, }; + +legacyCC.internal.physics2d = { + selector, +}; diff --git a/cocos/physics-2d/framework/instance.ts b/cocos/physics-2d/framework/instance.ts deleted file mode 100644 index 37e4d5e12bc..00000000000 --- a/cocos/physics-2d/framework/instance.ts +++ /dev/null @@ -1,248 +0,0 @@ -import { EDITOR, DEBUG, TEST } from 'internal:constants'; -import { IRigidBody2D } from '../spec/i-rigid-body'; -import { WRAPPER } from './physics-selector'; -import { IBoxShape, ICircleShape, IPolygonShape, IBaseShape } from '../spec/i-physics-shape'; -import { IPhysicsWorld } from '../spec/i-physics-world'; -import { errorID, warnID, warn } from '../../core'; -import { ECollider2DType, EJoint2DType } from './physics-types'; -import { legacyCC } from '../../core/global-exports'; -import { IJoint2D, IDistanceJoint, ISpringJoint, IFixedJoint, IMouseJoint, IRelativeJoint, ISliderJoint, IWheelJoint, IHingeJoint } from '../spec/i-physics-joint'; - -const FUNC = (...v: any) => 0 as any; - -export function checkPhysicsModule (obj: any) { - if (DEBUG && !TEST && (!EDITOR || legacyCC.GAME_VIEW) && obj == null) { - errorID(9600); - return true; - } - return false; -} - -export function createPhysicsWorld (): IPhysicsWorld { - if (DEBUG && checkPhysicsModule(WRAPPER.PhysicsWorld)) { return null as any; } - return new WRAPPER.PhysicsWorld() as IPhysicsWorld; -} - -type IEntireBody = IRigidBody2D -const EntireBody: IEntireBody = { - impl: null as any, - rigidBody: null as any, - isAwake: false, - isSleeping: false, - - initialize: FUNC, - - setType: FUNC, - - setLinearDamping: FUNC, - setAngularDamping: FUNC, - setGravityScale: FUNC, - setFixedRotation: FUNC, - setAllowSleep: FUNC, - - isActive: FUNC, - setActive: FUNC, - - wakeUp: FUNC, - sleep: FUNC, - - getMass: FUNC, - getInertia: FUNC, - - getLinearVelocity: FUNC, - setLinearVelocity: FUNC, - getLinearVelocityFromWorldPoint: FUNC, - getAngularVelocity: FUNC, - setAngularVelocity: FUNC, - - getLocalVector: FUNC, - getWorldVector: FUNC, - getLocalPoint: FUNC, - getWorldPoint: FUNC, - - getLocalCenter: FUNC, - getWorldCenter: FUNC, - - applyForce: FUNC, - applyForceToCenter: FUNC, - applyTorque: FUNC, - applyLinearImpulse: FUNC, - applyLinearImpulseToCenter: FUNC, - applyAngularImpulse: FUNC, - - onEnable: FUNC, - onDisable: FUNC, - onDestroy: FUNC, -}; - -export function createRigidBody (): IRigidBody2D { - const PHYSICS_2D_BUILTIN = legacyCC._global.CC_PHYSICS_2D_BUILTIN; - - if (PHYSICS_2D_BUILTIN) { - return EntireBody; - } else { - if (DEBUG && checkPhysicsModule(WRAPPER.RigidBody)) { return null as any; } - return new WRAPPER.RigidBody() as IRigidBody2D; - } -} - -// shapes -const CREATE_COLLIDER_PROXY = { INITED: false }; - -interface IEntireShape extends IBoxShape, ICircleShape, IPolygonShape { } -const ENTIRE_SHAPE: IEntireShape = { - impl: null, - collider: null as unknown as any, - worldAABB: null as unknown as any, - worldPoints: null as unknown as any, - worldPosition: null as unknown as any, - worldRadius: null as unknown as any, - - initialize: FUNC, - apply: FUNC, - - onLoad: FUNC, - onEnable: FUNC, - onDisable: FUNC, - onDestroy: FUNC, - onGroupChanged: FUNC, -}; - -export function createShape (type: ECollider2DType): IBaseShape { - initColliderProxy(); - return CREATE_COLLIDER_PROXY[type](); -} - -function initColliderProxy () { - if (CREATE_COLLIDER_PROXY.INITED) return; - CREATE_COLLIDER_PROXY.INITED = true; - - CREATE_COLLIDER_PROXY[ECollider2DType.BOX] = function createBoxShape (): IBoxShape { - if (DEBUG && checkPhysicsModule(WRAPPER.BoxShape)) { return ENTIRE_SHAPE; } - return new WRAPPER.BoxShape() as IBoxShape; - }; - - CREATE_COLLIDER_PROXY[ECollider2DType.CIRCLE] = function createCircleShape (): ICircleShape { - if (DEBUG && checkPhysicsModule(WRAPPER.CircleShape)) { return ENTIRE_SHAPE; } - return new WRAPPER.CircleShape() as ICircleShape; - }; - - CREATE_COLLIDER_PROXY[ECollider2DType.POLYGON] = function createPolygonShape (): IPolygonShape { - if (DEBUG && checkPhysicsModule(WRAPPER.PolygonShape)) { return ENTIRE_SHAPE; } - return new WRAPPER.PolygonShape() as IPolygonShape; - }; -} - -// joints -const CREATE_JOINT_PROXY = { INITED: false }; - -interface IEntireJoint extends IDistanceJoint, IFixedJoint, IMouseJoint, ISpringJoint, IRelativeJoint, ISliderJoint, IWheelJoint, IHingeJoint { } -const ENTIRE_JOINT: IEntireJoint = { - impl: null, - - initialize: FUNC, - - setDampingRatio: FUNC, - setFrequency: FUNC, - setMaxForce: FUNC, - setTarget: FUNC, - setDistance: FUNC, - setAngularOffset: FUNC, - setCorrectionFactor: FUNC, - setLinearOffset: FUNC, - setMaxLength: FUNC, - setMaxTorque: FUNC, - setLowerLimit: FUNC, - setUpperLimit: FUNC, - setMaxMotorForce: FUNC, - setMaxMotorTorque: FUNC, - setMotorSpeed: FUNC, - enableLimit: FUNC, - enableMotor: FUNC, - setLowerAngle: FUNC, - setUpperAngle: FUNC, -}; - -export function createJoint (type: EJoint2DType): IJoint2D { - initJointProxy(); - return CREATE_JOINT_PROXY[type](); -} - -function initJointProxy () { - if (CREATE_JOINT_PROXY.INITED) return; - CREATE_JOINT_PROXY.INITED = true; - - const PHYSICS_2D_BUILTIN = legacyCC._global.CC_PHYSICS_2D_BUILTIN; - - CREATE_JOINT_PROXY[EJoint2DType.SPRING] = function createSpringJoint (): ISpringJoint { - if (PHYSICS_2D_BUILTIN) { - return ENTIRE_JOINT; - } else { - if (DEBUG && checkPhysicsModule(WRAPPER.SpringJoint)) { return ENTIRE_JOINT; } - return new WRAPPER.SpringJoint() as ISpringJoint; - } - }; - - CREATE_JOINT_PROXY[EJoint2DType.DISTANCE] = function createDistanceJoint (): IDistanceJoint { - if (PHYSICS_2D_BUILTIN) { - return ENTIRE_JOINT; - } else { - if (DEBUG && checkPhysicsModule(WRAPPER.DistanceJoint)) { return ENTIRE_JOINT; } - return new WRAPPER.DistanceJoint() as IDistanceJoint; - } - }; - - CREATE_JOINT_PROXY[EJoint2DType.FIXED] = function createFixedJoint (): IFixedJoint { - if (PHYSICS_2D_BUILTIN) { - return ENTIRE_JOINT; - } else { - if (DEBUG && checkPhysicsModule(WRAPPER.FixedJoint)) { return ENTIRE_JOINT; } - return new WRAPPER.FixedJoint() as IFixedJoint; - } - }; - - CREATE_JOINT_PROXY[EJoint2DType.MOUSE] = function createMouseJoint (): IMouseJoint { - if (PHYSICS_2D_BUILTIN) { - return ENTIRE_JOINT; - } else { - if (DEBUG && checkPhysicsModule(WRAPPER.MouseJoint)) { return ENTIRE_JOINT; } - return new WRAPPER.MouseJoint() as IMouseJoint; - } - }; - - CREATE_JOINT_PROXY[EJoint2DType.RELATIVE] = function createRelativeJoint (): IRelativeJoint { - if (PHYSICS_2D_BUILTIN) { - return ENTIRE_JOINT; - } else { - if (DEBUG && checkPhysicsModule(WRAPPER.RelativeJoint)) { return ENTIRE_JOINT; } - return new WRAPPER.RelativeJoint() as IRelativeJoint; - } - }; - - CREATE_JOINT_PROXY[EJoint2DType.SLIDER] = function createSliderJoint (): ISliderJoint { - if (PHYSICS_2D_BUILTIN) { - return ENTIRE_JOINT; - } else { - if (DEBUG && checkPhysicsModule(WRAPPER.SliderJoint)) { return ENTIRE_JOINT; } - return new WRAPPER.SliderJoint() as ISliderJoint; - } - }; - - CREATE_JOINT_PROXY[EJoint2DType.WHEEL] = function createWheelJoint (): IWheelJoint { - if (PHYSICS_2D_BUILTIN) { - return ENTIRE_JOINT; - } else { - if (DEBUG && checkPhysicsModule(WRAPPER.WheelJoint)) { return ENTIRE_JOINT; } - return new WRAPPER.WheelJoint() as IWheelJoint; - } - }; - - CREATE_JOINT_PROXY[EJoint2DType.HINGE] = function createHingeJoint (): IHingeJoint { - if (PHYSICS_2D_BUILTIN) { - return ENTIRE_JOINT; - } else { - if (DEBUG && checkPhysicsModule(WRAPPER.HingeJoint)) { return ENTIRE_JOINT; } - return new WRAPPER.HingeJoint() as IHingeJoint; - } - }; -} diff --git a/cocos/physics-2d/framework/physics-selector.ts b/cocos/physics-2d/framework/physics-selector.ts index 1e4763e9c13..fe74d5bb179 100644 --- a/cocos/physics-2d/framework/physics-selector.ts +++ b/cocos/physics-2d/framework/physics-selector.ts @@ -1,33 +1,380 @@ +/* eslint-disable @typescript-eslint/no-unsafe-return */ +import { EDITOR, DEBUG, TEST } from 'internal:constants'; +import { IRigidBody2D } from '../spec/i-rigid-body'; +import { IBoxShape, ICircleShape, IPolygonShape, IBaseShape } from '../spec/i-physics-shape'; +import { IPhysicsWorld } from '../spec/i-physics-world'; +import { errorID, warnID, warn } from '../../core'; +import { ECollider2DType, EJoint2DType } from './physics-types'; import { legacyCC } from '../../core/global-exports'; +import { IJoint2D, IDistanceJoint, ISpringJoint, IFixedJoint, IMouseJoint, + IRelativeJoint, ISliderJoint, IWheelJoint, IHingeJoint } from '../spec/i-physics-joint'; + +export type IPhysicsEngineId = 'builtin' | 'box2d' | string; interface IPhysicsWrapperObject { PhysicsWorld: any, RigidBody?: any, - BoxShape: any, - CircleShape: any, + BoxShape?: any, + CircleShape?: any, PolygonShape?: any, - DistanceJoint: any, - FixedJoint: any, - MouseJoint: any, - SpringJoint: any, - RelativeJoint: any, - SliderJoint: any, - WheelJoint: any, - HingeJoint: any, + DistanceJoint?: any, + FixedJoint?: any, + MouseJoint?: any, + SpringJoint?: any, + RelativeJoint?: any, + SliderJoint?: any, + WheelJoint?: any, + HingeJoint?: any, +} + +type IPhysicsBackend = { [key: string]: IPhysicsWrapperObject; } + +export interface IPhysicsSelector { + /** + * @en + * The id of the physics engine being used by the physics system. + * @zh + * 物理系统正在使用的物理引擎的唯一标志。 + */ + readonly id: IPhysicsEngineId, + + /** + * @en + * The wrapper of the physics engine being used by the physics system. + * @zh + * 物理系统使用的物理引擎的封装层。 + */ + readonly wrapper: IPhysicsWrapperObject, + + /** + * @en + * All physics engine backends that the physics module has registered. + * @zh + * 物理模块已注册的所有物理引擎后端。 + */ + readonly backend: IPhysicsBackend, + + /** + * @en + * An instance of the physical world through which you can access the lowlevel objects. + * @zh + * 物理世界实例,通过它可以访问到底层对象。 + */ + readonly physicsWorld: IPhysicsWorld | null; + + /** + * @en + * To register the backend, the system will use the last backend registered before initialization, + * and the registration after that needs to be switched manually. + * @zh + * 注册后端,系统将使用在初始化前注册的最后一个后端,此后注册的需要手动切换。 + */ + register: (id: IPhysicsEngineId, wrapper: IPhysicsWrapperObject) => void, + + /** + * @en + * Switch to the physics backend corresponding to the id in the registry. + * @zh + * 切换为注册表里对应 id 的物理后端。 + */ + switchTo: (id: IPhysicsEngineId) => void, + + // polyfill + [x: string]: any, +} + +function register (id: IPhysicsEngineId, wrapper: IPhysicsWrapperObject): void { + if (!EDITOR && !TEST) console.info(`[PHYSICS2D]: register ${id}.`); + selector.backend[id] = wrapper; + if (!selector.physicsWorld || selector.id === id) { + const mutableSelector = selector as Mutable; + mutableSelector.id = id; + mutableSelector.wrapper = wrapper; + } +} + +function switchTo (id: IPhysicsEngineId) { + //if (!selector.runInEditor) return; + const mutableSelector = selector as Mutable; + if (selector.physicsWorld && id !== selector.id && selector.backend[id] != null) { + //selector.physicsWorld.destroy();//todo + if (!TEST) console.info(`[PHYSICS2D]: switch from ${selector.id} to ${id}.`); + mutableSelector.id = id; + mutableSelector.wrapper = selector.backend[id]; + mutableSelector.physicsWorld = createPhysicsWorld(); + } else { + if (!EDITOR && !TEST) console.info(`[PHYSICS2D]: using ${mutableSelector.id}.`); + mutableSelector.physicsWorld = createPhysicsWorld(); + } +} + +/** + * @en + * The physics selector is used to register and switch the physics engine backend. + * @zh + * 物理选择器用于注册和切换物理引擎后端。 + */ +export const selector: IPhysicsSelector = { + id: '', + switchTo, + register, + wrapper: {} as any, + backend: {} as any, + physicsWorld: null as any, + + /// hide for now /// + runInEditor: !EDITOR, +}; + +const FUNC = (...v: any) => 0 as any; +const ENTIRE_WORLD: IPhysicsWorld = { + impl: null, + debugDrawFlags: 0, + setGravity: FUNC, + setAllowSleep: FUNC, + step: FUNC, + syncPhysicsToScene: FUNC, + syncSceneToPhysics: FUNC, + raycast: FUNC, + testPoint: FUNC, + testAABB: FUNC, + drawDebug: FUNC, +}; + +export function checkPhysicsModule (obj: any) { + if (DEBUG && !TEST && (!EDITOR || legacyCC.GAME_VIEW) && obj == null) { + errorID(9600); + return true; + } + return false; +} + +export function createPhysicsWorld (): IPhysicsWorld { + if (DEBUG && checkPhysicsModule(selector.wrapper.PhysicsWorld)) { return ENTIRE_WORLD; } + return new selector.wrapper.PhysicsWorld(); +} + +const EntireBody: IRigidBody2D = { + impl: null as any, + rigidBody: null as any, + isAwake: false, + isSleeping: false, + + initialize: FUNC, + + setType: FUNC, + + setLinearDamping: FUNC, + setAngularDamping: FUNC, + setGravityScale: FUNC, + setFixedRotation: FUNC, + setAllowSleep: FUNC, + + isActive: FUNC, + setActive: FUNC, + + wakeUp: FUNC, + sleep: FUNC, + + getMass: FUNC, + getInertia: FUNC, + + getLinearVelocity: FUNC, + setLinearVelocity: FUNC, + getLinearVelocityFromWorldPoint: FUNC, + getAngularVelocity: FUNC, + setAngularVelocity: FUNC, + + getLocalVector: FUNC, + getWorldVector: FUNC, + getLocalPoint: FUNC, + getWorldPoint: FUNC, + + getLocalCenter: FUNC, + getWorldCenter: FUNC, + + applyForce: FUNC, + applyForceToCenter: FUNC, + applyTorque: FUNC, + applyLinearImpulse: FUNC, + applyLinearImpulseToCenter: FUNC, + applyAngularImpulse: FUNC, + + onEnable: FUNC, + onDisable: FUNC, + onDestroy: FUNC, +}; + +export function createRigidBody (): IRigidBody2D { + const PHYSICS_2D_BUILTIN = selector.id === 'builtin'; + + if (PHYSICS_2D_BUILTIN) { + return EntireBody; + } else { + if (DEBUG && checkPhysicsModule(selector.wrapper.RigidBody)) { return EntireBody; } + return new selector.wrapper.RigidBody(); + } } -type IPhysicsEngineId = 'builtin' | 'box2d' | string | undefined; +// shapes +const CREATE_COLLIDER_PROXY = { INITED: false }; + +interface IEntireShape extends IBoxShape, ICircleShape, IPolygonShape { } +const ENTIRE_SHAPE: IEntireShape = { + impl: null, + collider: null as unknown as any, + worldAABB: null as unknown as any, + worldPoints: null as unknown as any, + worldPosition: null as unknown as any, + worldRadius: null as unknown as any, + + initialize: FUNC, + apply: FUNC, + + onLoad: FUNC, + onEnable: FUNC, + onDisable: FUNC, + onDestroy: FUNC, + onGroupChanged: FUNC, +}; + +export function createShape (type: ECollider2DType): IBaseShape { + initColliderProxy(); + return CREATE_COLLIDER_PROXY[type](); +} + +function initColliderProxy () { + if (CREATE_COLLIDER_PROXY.INITED) return; + CREATE_COLLIDER_PROXY.INITED = true; + + CREATE_COLLIDER_PROXY[ECollider2DType.BOX] = function createBoxShape (): IBoxShape { + if (DEBUG && checkPhysicsModule(selector.wrapper.BoxShape)) { return ENTIRE_SHAPE; } + return new selector.wrapper.BoxShape(); + }; + + CREATE_COLLIDER_PROXY[ECollider2DType.CIRCLE] = function createCircleShape (): ICircleShape { + if (DEBUG && checkPhysicsModule(selector.wrapper.CircleShape)) { return ENTIRE_SHAPE; } + return new selector.wrapper.CircleShape(); + }; + + CREATE_COLLIDER_PROXY[ECollider2DType.POLYGON] = function createPolygonShape (): IPolygonShape { + if (DEBUG && checkPhysicsModule(selector.wrapper.PolygonShape)) { return ENTIRE_SHAPE; } + return new selector.wrapper.PolygonShape(); + }; +} + +// joints +const CREATE_JOINT_PROXY = { INITED: false }; + +interface IEntireJoint extends IDistanceJoint, IFixedJoint, IMouseJoint, ISpringJoint, IRelativeJoint, ISliderJoint, IWheelJoint, IHingeJoint { } +const ENTIRE_JOINT: IEntireJoint = { + impl: null, + + initialize: FUNC, + + setDampingRatio: FUNC, + setFrequency: FUNC, + setMaxForce: FUNC, + setTarget: FUNC, + setDistance: FUNC, + setAngularOffset: FUNC, + setCorrectionFactor: FUNC, + setLinearOffset: FUNC, + setMaxLength: FUNC, + setMaxTorque: FUNC, + setLowerLimit: FUNC, + setUpperLimit: FUNC, + setMaxMotorForce: FUNC, + setMaxMotorTorque: FUNC, + setMotorSpeed: FUNC, + enableLimit: FUNC, + enableMotor: FUNC, + setLowerAngle: FUNC, + setUpperAngle: FUNC, +}; + +export function createJoint (type: EJoint2DType): IJoint2D { + initJointProxy(); + return CREATE_JOINT_PROXY[type](); +} + +function initJointProxy () { + if (CREATE_JOINT_PROXY.INITED) return; + CREATE_JOINT_PROXY.INITED = true; + + const PHYSICS_2D_BUILTIN = selector.id === 'builtin'; + + CREATE_JOINT_PROXY[EJoint2DType.SPRING] = function createSpringJoint (): ISpringJoint { + if (PHYSICS_2D_BUILTIN) { + return ENTIRE_JOINT; + } else { + if (DEBUG && checkPhysicsModule(selector.wrapper.SpringJoint)) { return ENTIRE_JOINT; } + return new selector.wrapper.SpringJoint(); + } + }; + + CREATE_JOINT_PROXY[EJoint2DType.DISTANCE] = function createDistanceJoint (): IDistanceJoint { + if (PHYSICS_2D_BUILTIN) { + return ENTIRE_JOINT; + } else { + if (DEBUG && checkPhysicsModule(selector.wrapper.DistanceJoint)) { return ENTIRE_JOINT; } + return new selector.wrapper.DistanceJoint(); + } + }; + + CREATE_JOINT_PROXY[EJoint2DType.FIXED] = function createFixedJoint (): IFixedJoint { + if (PHYSICS_2D_BUILTIN) { + return ENTIRE_JOINT; + } else { + if (DEBUG && checkPhysicsModule(selector.wrapper.FixedJoint)) { return ENTIRE_JOINT; } + return new selector.wrapper.FixedJoint(); + } + }; + + CREATE_JOINT_PROXY[EJoint2DType.MOUSE] = function createMouseJoint (): IMouseJoint { + if (PHYSICS_2D_BUILTIN) { + return ENTIRE_JOINT; + } else { + if (DEBUG && checkPhysicsModule(selector.wrapper.MouseJoint)) { return ENTIRE_JOINT; } + return new selector.wrapper.MouseJoint(); + } + }; -export let WRAPPER: IPhysicsWrapperObject; + CREATE_JOINT_PROXY[EJoint2DType.RELATIVE] = function createRelativeJoint (): IRelativeJoint { + if (PHYSICS_2D_BUILTIN) { + return ENTIRE_JOINT; + } else { + if (DEBUG && checkPhysicsModule(selector.wrapper.RelativeJoint)) { return ENTIRE_JOINT; } + return new selector.wrapper.RelativeJoint(); + } + }; -export let physicsEngineId: IPhysicsEngineId; + CREATE_JOINT_PROXY[EJoint2DType.SLIDER] = function createSliderJoint (): ISliderJoint { + if (PHYSICS_2D_BUILTIN) { + return ENTIRE_JOINT; + } else { + if (DEBUG && checkPhysicsModule(selector.wrapper.SliderJoint)) { return ENTIRE_JOINT; } + return new selector.wrapper.SliderJoint(); + } + }; -export function select (id: IPhysicsEngineId, wrapper: IPhysicsWrapperObject) { - physicsEngineId = id; - legacyCC._global.CC_PHYSICS_2D_BUILTIN = id == 'builtin'; - legacyCC._global.CC_PHYSICS_2D_BOX2D = id == 'box2d'; + CREATE_JOINT_PROXY[EJoint2DType.WHEEL] = function createWheelJoint (): IWheelJoint { + if (PHYSICS_2D_BUILTIN) { + return ENTIRE_JOINT; + } else { + if (DEBUG && checkPhysicsModule(selector.wrapper.WheelJoint)) { return ENTIRE_JOINT; } + return new selector.wrapper.WheelJoint(); + } + }; - WRAPPER = wrapper; + CREATE_JOINT_PROXY[EJoint2DType.HINGE] = function createHingeJoint (): IHingeJoint { + if (PHYSICS_2D_BUILTIN) { + return ENTIRE_JOINT; + } else { + if (DEBUG && checkPhysicsModule(selector.wrapper.HingeJoint)) { return ENTIRE_JOINT; } + return new selector.wrapper.HingeJoint(); + } + }; } diff --git a/cocos/physics-2d/framework/physics-system.ts b/cocos/physics-2d/framework/physics-system.ts index 670801b00fa..e817ce937a4 100644 --- a/cocos/physics-2d/framework/physics-system.ts +++ b/cocos/physics-2d/framework/physics-system.ts @@ -1,8 +1,8 @@ import { EDITOR } from 'internal:constants'; import { System, Vec2, IVec2Like, Rect, Eventify, Enum } from '../../core'; import { IPhysicsWorld } from '../spec/i-physics-world'; -import { createPhysicsWorld } from './instance'; -import { physicsEngineId } from './physics-selector'; +import { createPhysicsWorld, selector, IPhysicsSelector } from './physics-selector'; + import { DelayEvent } from './physics-internal-types'; import { ICollisionMatrix } from '../../physics/framework/physics-config'; import { CollisionMatrix } from '../../physics/framework/collision-matrix'; @@ -131,7 +131,9 @@ export class PhysicsSystem2D extends Eventify(System) { * @zh * 获取物理世界的封装对象,通过它你可以访问到实际的底层对象。 */ - readonly physicsWorld: IPhysicsWorld; + public get physicsWorld () { + return selector.physicsWorld!; + } /** * @en @@ -142,15 +144,15 @@ export class PhysicsSystem2D extends Eventify(System) { static readonly ID = 'PHYSICS_2D'; static get PHYSICS_NONE () { - return !physicsEngineId; + return !selector.id; } static get PHYSICS_BUILTIN () { - return physicsEngineId === 'builtin'; + return selector.id === 'builtin'; } static get PHYSICS_BOX2D () { - return physicsEngineId === 'box2d'; + return selector.id === 'box2d'; } /** @@ -229,7 +231,9 @@ export class PhysicsSystem2D extends Eventify(System) { } } - this.physicsWorld = createPhysicsWorld(); + const mutableSelector = selector as Mutable; + mutableSelector.physicsWorld = createPhysicsWorld(); + this.gravity = this._gravity; this.allowSleep = this._allowSleep; } @@ -281,6 +285,7 @@ export class PhysicsSystem2D extends Eventify(System) { director.emit(Director.EVENT_AFTER_PHYSICS); } + // eslint-disable-next-line @typescript-eslint/ban-types _callAfterStep (target: object, func: Function) { if (this._steping) { this._delayEvents.push({ @@ -347,12 +352,8 @@ export class PhysicsSystem2D extends Eventify(System) { } } -director.once(Director.EVENT_INIT, () => { - initPhysicsSystem(); -}); - function initPhysicsSystem () { - if (!PhysicsSystem2D.PHYSICS_NONE && (!EDITOR || legacyCC.GAME_VIEW)) { - director.registerSystem(PhysicsSystem2D.ID, PhysicsSystem2D.instance, System.Priority.LOW); - } + director.registerSystem(PhysicsSystem2D.ID, PhysicsSystem2D.instance, System.Priority.LOW); } + +director.once(Director.EVENT_INIT, () => { initPhysicsSystem(); }); From 94da5e9e0bff817e2335e92a79aa080f170446b6 Mon Sep 17 00:00:00 2001 From: BppleMan <1286363484@qq.com> Date: Mon, 31 Oct 2022 10:34:43 +0800 Subject: [PATCH 109/829] Add editor gizmo icon for light-probe (#13184) Co-authored-by: BppleMan --- editor/assets/gizmo/light-probe.png | Bin 0 -> 2527 bytes editor/assets/gizmo/light-probe.png.meta | 43 +++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 editor/assets/gizmo/light-probe.png create mode 100644 editor/assets/gizmo/light-probe.png.meta diff --git a/editor/assets/gizmo/light-probe.png b/editor/assets/gizmo/light-probe.png new file mode 100644 index 0000000000000000000000000000000000000000..8f247d310817400aa917be29978ad4ce36e62943 GIT binary patch literal 2527 zcmdT`XHydl5)K?lQ^b-`g$S<#Mv4+%S`aBhK#BAcAe0=3k!BDi3010qlAtIOh$2!1 zNeD`jjtWvmAyT9WktPH}CzKEm=k6EWx7(TBXZD%h+1)QYPl^q~;)tk>C;$LBVhK01 zJHU=VE_~=9Qe9}z4nX7<-1Rm9Aa>%9^8v`YQU@g8Z95AS0IgSU{vZ+XGqyGc04j)L zTyMdHhEPj0V+S1H()coV)Lf>0HCczln-(>3mMD%x>)V{8+ufyznmJ1p@{a&JocTh5 za2mi$aLsXLEC@u_P2B)oRqtrKH1XxI;)7(L4i7FpCRWhwV9bHVj!*@Zi%WA>reFaR ziA(1LJU?vVtB~Wula9ilT!(3!zV+KOd@xai-<0%vU`q~t%5x#qjSnVb5cT{RNr zL)U7zivGGLpTuc$xg||WTpALY*rehvF2eK-J`|pBv0)Nl=vE^nPd;%eCWlYrlu*B- z4Qv#`0VSj&Hsf(G!)_5>{P@rn`|#4CND3}*UM1ol3wh4dQ{HsIr+72daZx*z@Kg&! zDN=%q7#P~lur``*tKAtfcMU8EBd6CDZV;w}oVR~BG6;2cdIXQ?KRf{^$caQT?tXvAvI`VZ?jMOG7-y`N>1FJ_bfvrpLFEgg(cF!`ROa6#pH zL2fQ(-#jvD%Jy()*evVn&Usa-QL_5&@}Tz)D!F@fj|9&c;n7C9l%mztxm&Q2U(e7r zhT{oK?KX2pZFN~)4)yt(CkMyBF73LCi*?1cqw+9y>y4AP4T^Xx{8%T?2eNwg)s$4a zY{@q(&}D|)_LbqS?3$RsQ`t!zw&0f(k7tsmn)jW3zR&c=wqZX3Ar@i`sQ*JP>bq0; zW-UtaR+(U9`r#36YD{*ieK|ycXvrv4*oXTDC^vk0Nb4|s+_wtHeZDhoNZ7pf!aER3 zF~Sq_D{}0l^(W+_(~2_v%F@`K6K!>_8^b}z(4-6GIzH^4ewC*z@9Y+3C{8u#rx#%% zO*`ymQ?=%&8;amsD5Y>*B!uhU-C2)blaW9YBP+CVOM$bU;}l@>AX=>hSWjp70&D$^ zZy1V)809vEeRLEvVPWZ2`Z=`C!M3%qbai`;+l#$9mihBv zbhauuw7hGlMwgkNc7<~jq+aKWLP~&mSvsr-yEmCtEZDVzd3+_wA;aZy3)qxKqL~f!21dGYGWW10}F-YjXis zo_~$vrCwfuWjmeBS3yd&XdOHen80)l|6-@<<#)zwk?caOfI#w%rm!suQp9_A7tH|x zlC&eY2B2J7ks!@NRuc{?K9>tgv$;I5N)Qk}b+AE_pkbxrOs$H&hO(%I!gNZ2K*8xs z@XWr2+{&A?6f7KH?jK3RW7Lr(Z@Ca9m6=bbx{B8&As59}=N{=Y=h^Jgw_Vu2#?-M& zaOm4qETb{Cfhx2E*3HaeJGN?xX2koQ)Sp}sc6nM48b*s97h+WanRhPZ$ExHr>OudM zD*LV2F%!ZaG!wg6De9;97QzhHXVxa#TL&4+vlIh7-QKP5<-3t=q?bS3fy{Hw%Pntu;rVxQIzpRUw*V^5$CEKKDDJ}OwjI%ve zrmKoTKBXL`#bvKX8(1H8@VI~FzHyQjL3w^>Oz-XWilf|-1u=g@ zOD}a&Z}!ZYkG=BU>fz>^)mF`F%=?j>Xp)V{1*wYb^^du!_sW~;D2a2bG@!Q=Yx&Z( z;k!C-CPMMBuVHnuLC#fteMUl2t2b_U=%w`u;gU`Q-IX05IISv5VRI#fyyvy%1nb)& z&sw+{=Jh|19HdtJLlS>+XB?KUIb-!bYf2f?a%K@1LnwL%xr0b zZbZmKrPSWh$4^ZmzEv56^GuI21VoyS**BiAq`lcKOJ1$GhUBoiImr2AW-L*wMXNT@ z%Pv=i@#fJPG)W$V(t$YPDlnsZ7*VS+K7GR`^?>Cp8$_Q?@%~2n++xCuqEncjAXOkQ zlc#=6Jm$q3aGmphvq9lM+5xb4o3kB{JYt{gZ^>v3 zzlP=ap>;2RV-W(t{TS9-6t(@3;%B$4Wk18eB``mL&C%+cw8QZmC%!_#F&%pld|S)@ zHtf<&^`X7c?7_H~O5koLx)$U6KWm3#tj3NDQQQc+E@B_|C{Iw2GI0^LX9);~8iwEM zp#bFD_RuB!nM3{_zwD#k-anW+mp7l%H0QmC>i6Pu=us%DlMerXPb>QU4@gpH$mS;K P=^w`O3c`$L;uZIAQP`dE literal 0 HcmV?d00001 diff --git a/editor/assets/gizmo/light-probe.png.meta b/editor/assets/gizmo/light-probe.png.meta new file mode 100644 index 00000000000..672d7e3dbe1 --- /dev/null +++ b/editor/assets/gizmo/light-probe.png.meta @@ -0,0 +1,43 @@ +{ + "ver": "1.0.25", + "importer": "image", + "imported": true, + "uuid": "81450dd5-50d3-4ae3-8d3b-97c4b10409e9", + "files": [ + ".json", + ".png" + ], + "subMetas": { + "6c48a": { + "importer": "texture", + "uuid": "81450dd5-50d3-4ae3-8d3b-97c4b10409e9@6c48a", + "displayName": "light-probe", + "id": "6c48a", + "name": "texture", + "userData": { + "wrapModeS": "clamp-to-edge", + "wrapModeT": "clamp-to-edge", + "minfilter": "linear", + "magfilter": "linear", + "mipfilter": "none", + "anisotropy": 0, + "isUuid": true, + "imageUuidOrDatabaseUri": "81450dd5-50d3-4ae3-8d3b-97c4b10409e9", + "visible": true + }, + "ver": "1.0.22", + "imported": true, + "files": [ + ".json" + ], + "subMetas": {} + } + }, + "userData": { + "type": "texture", + "fixAlphaTransparencyArtifacts": true, + "hasAlpha": true, + "redirect": "81450dd5-50d3-4ae3-8d3b-97c4b10409e9@6c48a", + "flipVertical": true + } +} From 7b35b3dcceb5ca33ef645074dbea02ba21d1f2fe Mon Sep 17 00:00:00 2001 From: hyde zhou Date: Mon, 31 Oct 2022 15:35:30 +0800 Subject: [PATCH 110/829] added default values (#13175) --- cocos/rendering/custom/pipeline.ts | 9 + cocos/rendering/custom/web-pipeline.ts | 14 +- .../cocos/bindings/auto/jsb_render_auto.cpp | 601 +++++++++++++++--- .../pipeline/custom/RenderInterfaceTypes.h | 27 + 4 files changed, 567 insertions(+), 84 deletions(-) diff --git a/cocos/rendering/custom/pipeline.ts b/cocos/rendering/custom/pipeline.ts index f82cc6ceb03..ef9020881cd 100644 --- a/cocos/rendering/custom/pipeline.ts +++ b/cocos/rendering/custom/pipeline.ts @@ -87,10 +87,15 @@ export interface Setter extends RenderNode { export interface RasterQueueBuilder extends Setter { addSceneOfCamera (camera: Camera, light: LightInfo, sceneFlags: SceneFlags): void; + addSceneOfCamera (camera: Camera, light: LightInfo/*, SceneFlags.NONE*/): void; addScene (name: string, sceneFlags: SceneFlags): void; + addScene (name: string/*, SceneFlags.NONE*/): void; addFullscreenQuad (material: Material, passID: number, sceneFlags: SceneFlags): void; + addFullscreenQuad (material: Material, passID: number/*, SceneFlags.NONE*/): void; addCameraQuad (camera: Camera, material: Material, passID: number, sceneFlags: SceneFlags): void; + addCameraQuad (camera: Camera, material: Material, passID: number/*, SceneFlags.NONE*/): void; clearRenderTarget (name: string, color: Color): void; + clearRenderTarget (name: string/*, new Color()*/): void; setViewport (viewport: Viewport): void; } @@ -98,6 +103,7 @@ export interface RasterPassBuilder extends Setter { addRasterView (name: string, view: RasterView): void; addComputeView (name: string, view: ComputeView): void; addQueue (hint: QueueHint): RasterQueueBuilder; + addQueue (/*QueueHint.NONE*/): RasterQueueBuilder; setViewport (viewport: Viewport): void; } @@ -159,11 +165,14 @@ export interface Pipeline extends PipelineRuntime { containsResource (name: string): boolean; addRenderTexture (name: string, format: Format, width: number, height: number, renderWindow: RenderWindow): number; addRenderTarget (name: string, format: Format, width: number, height: number, residency: ResourceResidency): number; + addRenderTarget (name: string, format: Format, width: number, height: number/*, ResourceResidency.MANAGED*/): number; addDepthStencil (name: string, format: Format, width: number, height: number, residency: ResourceResidency): number; + addDepthStencil (name: string, format: Format, width: number, height: number/*, ResourceResidency.MANAGED*/): number; updateRenderWindow (name: string, renderWindow: RenderWindow): void; beginFrame (): void; endFrame (): void; addRasterPass (width: number, height: number, layoutName: string): RasterPassBuilder; + addRasterPass (width: number, height: number/*, 'default'*/): RasterPassBuilder; addComputePass (layoutName: string): ComputePassBuilder; addMovePass (): MovePassBuilder; addCopyPass (): CopyPassBuilder; diff --git a/cocos/rendering/custom/web-pipeline.ts b/cocos/rendering/custom/web-pipeline.ts index 7c9868ffd67..9990021dede 100644 --- a/cocos/rendering/custom/web-pipeline.ts +++ b/cocos/rendering/custom/web-pipeline.ts @@ -513,7 +513,7 @@ export class WebRasterQueueBuilder extends WebSetter implements RasterQueueBuild set name (name: string) { this._renderGraph.setName(this._vertID, name); } - addSceneOfCamera (camera: Camera, light: LightInfo, sceneFlags: SceneFlags, name = 'Camera'): void { + addSceneOfCamera (camera: Camera, light: LightInfo, sceneFlags = SceneFlags.NONE, name = 'Camera'): void { const sceneData = new SceneData(name, sceneFlags, light); sceneData.camera = camera; this._renderGraph.addVertex( @@ -528,7 +528,7 @@ export class WebRasterQueueBuilder extends WebSetter implements RasterQueueBuild } setTextureUBOView(this, camera, this._pipeline); } - addScene (sceneName: string, sceneFlags: SceneFlags): void { + addScene (sceneName: string, sceneFlags = SceneFlags.NONE): void { const sceneData = new SceneData(sceneName, sceneFlags); this._renderGraph.addVertex( RenderGraphValue.Scene, sceneData, sceneName, '', new RenderData(), false, this._vertID, @@ -540,7 +540,7 @@ export class WebRasterQueueBuilder extends WebSetter implements RasterQueueBuild name, '', new RenderData(), false, this._vertID, ); } - addCameraQuad (camera: Camera, material: Material, passID: number, sceneFlags: SceneFlags) { + addCameraQuad (camera: Camera, material: Material, passID: number, sceneFlags = SceneFlags.NONE) { this._renderGraph.addVertex( RenderGraphValue.Blit, new Blit(material, passID, sceneFlags, camera), 'CameraQuad', '', new RenderData(), false, this._vertID, @@ -554,7 +554,7 @@ export class WebRasterQueueBuilder extends WebSetter implements RasterQueueBuild } setTextureUBOView(this, camera, this._pipeline); } - clearRenderTarget (name: string, color: Color) { + clearRenderTarget (name: string, color: Color = new Color()) { this._renderGraph.addVertex( RenderGraphValue.Clear, [new ClearView(name, ClearFlagBit.COLOR, color)], 'ClearRenderTarget', '', new RenderData(), false, this._vertID, @@ -1006,7 +1006,7 @@ export class WebPipeline implements Pipeline { ); } } - addRenderTarget (name: string, format: Format, width: number, height: number, residency: ResourceResidency) { + addRenderTarget (name: string, format: Format, width: number, height: number, residency = ResourceResidency.MANAGED) { const desc = new ResourceDesc(); desc.dimension = ResourceDimension.TEXTURE2D; desc.width = width; @@ -1026,7 +1026,7 @@ export class WebPipeline implements Pipeline { new SamplerInfo(), ); } - addDepthStencil (name: string, format: Format, width: number, height: number, residency: ResourceResidency) { + addDepthStencil (name: string, format: Format, width: number, height: number, residency = ResourceResidency.MANAGED) { const desc = new ResourceDesc(); desc.dimension = ResourceDimension.TEXTURE2D; desc.width = width; @@ -1104,7 +1104,7 @@ export class WebPipeline implements Pipeline { this.endFrame(); } - addRasterPass (width: number, height: number, layoutName: string): RasterPassBuilder { + addRasterPass (width: number, height: number, layoutName = 'default'): RasterPassBuilder { const name = 'Raster'; const pass = new RasterPass(); pass.viewport.width = width; diff --git a/native/cocos/bindings/auto/jsb_render_auto.cpp b/native/cocos/bindings/auto/jsb_render_auto.cpp index 2ae521d4406..4bba4a9be2c 100644 --- a/native/cocos/bindings/auto/jsb_render_auto.cpp +++ b/native/cocos/bindings/auto/jsb_render_auto.cpp @@ -1213,22 +1213,17 @@ se::Class* __jsb_cc_render_RasterQueueBuilder_class = nullptr; se::Object* __jsb_cc_render_RasterQueueBuilder_proto = nullptr; SE_DECLARE_FINALIZE_FUNC(js_delete_cc_render_RasterQueueBuilder) -static bool js_cc_render_RasterQueueBuilder_addSceneOfCamera(se::State& s) +static bool js_cc_render_RasterQueueBuilder_addSceneOfCamera__SWIG_0(se::State& s) { - // js_function + // js_overloaded_function CC_UNUSED bool ok = true; const auto& args = s.args(); - size_t argc = args.size(); cc::render::RasterQueueBuilder *arg1 = (cc::render::RasterQueueBuilder *) NULL ; cc::scene::Camera *arg2 = (cc::scene::Camera *) NULL ; LightInfo arg3 ; SceneFlags arg4 ; - if(argc != 3) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); - return false; - } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE* @@ -1249,24 +1244,18 @@ static bool js_cc_render_RasterQueueBuilder_addSceneOfCamera(se::State& s) return true; } -SE_BIND_FUNC(js_cc_render_RasterQueueBuilder_addSceneOfCamera) -static bool js_cc_render_RasterQueueBuilder_addScene(se::State& s) +static bool js_cc_render_RasterQueueBuilder_addScene__SWIG_0(se::State& s) { - // js_function + // js_overloaded_function CC_UNUSED bool ok = true; const auto& args = s.args(); - size_t argc = args.size(); cc::render::RasterQueueBuilder *arg1 = (cc::render::RasterQueueBuilder *) NULL ; ccstd::string *arg2 = 0 ; SceneFlags arg3 ; ccstd::string temp2 ; - if(argc != 2) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); - return false; - } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE& @@ -1284,24 +1273,18 @@ static bool js_cc_render_RasterQueueBuilder_addScene(se::State& s) return true; } -SE_BIND_FUNC(js_cc_render_RasterQueueBuilder_addScene) -static bool js_cc_render_RasterQueueBuilder_addFullscreenQuad(se::State& s) +static bool js_cc_render_RasterQueueBuilder_addFullscreenQuad__SWIG_0(se::State& s) { - // js_function + // js_overloaded_function CC_UNUSED bool ok = true; const auto& args = s.args(); - size_t argc = args.size(); cc::render::RasterQueueBuilder *arg1 = (cc::render::RasterQueueBuilder *) NULL ; Material *arg2 = (Material *) NULL ; uint32_t arg3 ; SceneFlags arg4 ; - if(argc != 3) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); - return false; - } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE* @@ -1322,25 +1305,19 @@ static bool js_cc_render_RasterQueueBuilder_addFullscreenQuad(se::State& s) return true; } -SE_BIND_FUNC(js_cc_render_RasterQueueBuilder_addFullscreenQuad) -static bool js_cc_render_RasterQueueBuilder_addCameraQuad(se::State& s) +static bool js_cc_render_RasterQueueBuilder_addCameraQuad__SWIG_0(se::State& s) { - // js_function + // js_overloaded_function CC_UNUSED bool ok = true; const auto& args = s.args(); - size_t argc = args.size(); cc::render::RasterQueueBuilder *arg1 = (cc::render::RasterQueueBuilder *) NULL ; cc::scene::Camera *arg2 = (cc::scene::Camera *) NULL ; Material *arg3 = (Material *) NULL ; uint32_t arg4 ; SceneFlags arg5 ; - if(argc != 4) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 4); - return false; - } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE* @@ -1364,25 +1341,19 @@ static bool js_cc_render_RasterQueueBuilder_addCameraQuad(se::State& s) return true; } -SE_BIND_FUNC(js_cc_render_RasterQueueBuilder_addCameraQuad) -static bool js_cc_render_RasterQueueBuilder_clearRenderTarget(se::State& s) +static bool js_cc_render_RasterQueueBuilder_clearRenderTarget__SWIG_0(se::State& s) { - // js_function + // js_overloaded_function CC_UNUSED bool ok = true; const auto& args = s.args(); - size_t argc = args.size(); cc::render::RasterQueueBuilder *arg1 = (cc::render::RasterQueueBuilder *) NULL ; ccstd::string *arg2 = 0 ; gfx::Color *arg3 = 0 ; ccstd::string temp2 ; gfx::Color temp3 ; - if(argc != 2) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); - return false; - } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE& @@ -1400,7 +1371,6 @@ static bool js_cc_render_RasterQueueBuilder_clearRenderTarget(se::State& s) return true; } -SE_BIND_FUNC(js_cc_render_RasterQueueBuilder_clearRenderTarget) static bool js_cc_render_RasterQueueBuilder_setViewport(se::State& s) { @@ -1431,6 +1401,259 @@ static bool js_cc_render_RasterQueueBuilder_setViewport(se::State& s) } SE_BIND_FUNC(js_cc_render_RasterQueueBuilder_setViewport) +static bool js_cc_render_RasterQueueBuilder_addSceneOfCamera__SWIG_1(se::State& s) +{ + // js_overloaded_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + cc::render::RasterQueueBuilder *arg1 = (cc::render::RasterQueueBuilder *) NULL ; + cc::scene::Camera *arg2 = (cc::scene::Camera *) NULL ; + LightInfo arg3 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "RasterQueueBuilder_addSceneOfCamera,2,SWIGTYPE_p_cc__scene__Camera"); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[1], &arg3, s.thisObject()); + SE_PRECONDITION2(ok, false, "RasterQueueBuilder_addSceneOfCamera,3,SWIGTYPE_LightInfo"); + + (arg1)->addSceneOfCamera(arg2,arg3); + + + return true; +} + +static bool js_cc_render_RasterQueueBuilder_addSceneOfCamera(se::State& s) +{ + // js_function_dispatcher + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + + // js_function_dispatch_case + if (argc == 3) { + ok = js_cc_render_RasterQueueBuilder_addSceneOfCamera__SWIG_0(s); + if (ok) { + return true; + } + } // js_function_dispatch_case + if (argc == 2) { + ok = js_cc_render_RasterQueueBuilder_addSceneOfCamera__SWIG_1(s); + if (ok) { + return true; + } + } + SE_REPORT_ERROR("wrong number of arguments: %d", (int)argc); + return false; +} +SE_BIND_FUNC(js_cc_render_RasterQueueBuilder_addSceneOfCamera) + +static bool js_cc_render_RasterQueueBuilder_addScene__SWIG_1(se::State& s) +{ + // js_overloaded_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + cc::render::RasterQueueBuilder *arg1 = (cc::render::RasterQueueBuilder *) NULL ; + ccstd::string *arg2 = 0 ; + ccstd::string temp2 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "RasterQueueBuilder_addScene,2,SWIGTYPE_p_ccstd__string"); + arg2 = &temp2; + + (arg1)->addScene((ccstd::string const &)*arg2); + + + return true; +} + +static bool js_cc_render_RasterQueueBuilder_addScene(se::State& s) +{ + // js_function_dispatcher + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + + // js_function_dispatch_case + if (argc == 2) { + ok = js_cc_render_RasterQueueBuilder_addScene__SWIG_0(s); + if (ok) { + return true; + } + } // js_function_dispatch_case + if (argc == 1) { + ok = js_cc_render_RasterQueueBuilder_addScene__SWIG_1(s); + if (ok) { + return true; + } + } + SE_REPORT_ERROR("wrong number of arguments: %d", (int)argc); + return false; +} +SE_BIND_FUNC(js_cc_render_RasterQueueBuilder_addScene) + +static bool js_cc_render_RasterQueueBuilder_addFullscreenQuad__SWIG_1(se::State& s) +{ + // js_overloaded_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + cc::render::RasterQueueBuilder *arg1 = (cc::render::RasterQueueBuilder *) NULL ; + Material *arg2 = (Material *) NULL ; + uint32_t arg3 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "RasterQueueBuilder_addFullscreenQuad,2,SWIGTYPE_p_Material"); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[1], &arg3, s.thisObject()); + SE_PRECONDITION2(ok, false, "RasterQueueBuilder_addFullscreenQuad,3,SWIGTYPE_uint32_t"); + + (arg1)->addFullscreenQuad(arg2,arg3); + + + return true; +} + +static bool js_cc_render_RasterQueueBuilder_addFullscreenQuad(se::State& s) +{ + // js_function_dispatcher + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + + // js_function_dispatch_case + if (argc == 3) { + ok = js_cc_render_RasterQueueBuilder_addFullscreenQuad__SWIG_0(s); + if (ok) { + return true; + } + } // js_function_dispatch_case + if (argc == 2) { + ok = js_cc_render_RasterQueueBuilder_addFullscreenQuad__SWIG_1(s); + if (ok) { + return true; + } + } + SE_REPORT_ERROR("wrong number of arguments: %d", (int)argc); + return false; +} +SE_BIND_FUNC(js_cc_render_RasterQueueBuilder_addFullscreenQuad) + +static bool js_cc_render_RasterQueueBuilder_addCameraQuad__SWIG_1(se::State& s) +{ + // js_overloaded_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + cc::render::RasterQueueBuilder *arg1 = (cc::render::RasterQueueBuilder *) NULL ; + cc::scene::Camera *arg2 = (cc::scene::Camera *) NULL ; + Material *arg3 = (Material *) NULL ; + uint32_t arg4 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "RasterQueueBuilder_addCameraQuad,2,SWIGTYPE_p_cc__scene__Camera"); + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[1], &arg3, s.thisObject()); + SE_PRECONDITION2(ok, false, "RasterQueueBuilder_addCameraQuad,3,SWIGTYPE_p_Material"); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[2], &arg4, s.thisObject()); + SE_PRECONDITION2(ok, false, "RasterQueueBuilder_addCameraQuad,4,SWIGTYPE_uint32_t"); + + (arg1)->addCameraQuad(arg2,arg3,arg4); + + + return true; +} + +static bool js_cc_render_RasterQueueBuilder_addCameraQuad(se::State& s) +{ + // js_function_dispatcher + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + + // js_function_dispatch_case + if (argc == 4) { + ok = js_cc_render_RasterQueueBuilder_addCameraQuad__SWIG_0(s); + if (ok) { + return true; + } + } // js_function_dispatch_case + if (argc == 3) { + ok = js_cc_render_RasterQueueBuilder_addCameraQuad__SWIG_1(s); + if (ok) { + return true; + } + } + SE_REPORT_ERROR("wrong number of arguments: %d", (int)argc); + return false; +} +SE_BIND_FUNC(js_cc_render_RasterQueueBuilder_addCameraQuad) + +static bool js_cc_render_RasterQueueBuilder_clearRenderTarget__SWIG_1(se::State& s) +{ + // js_overloaded_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + cc::render::RasterQueueBuilder *arg1 = (cc::render::RasterQueueBuilder *) NULL ; + ccstd::string *arg2 = 0 ; + ccstd::string temp2 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "RasterQueueBuilder_clearRenderTarget,2,SWIGTYPE_p_ccstd__string"); + arg2 = &temp2; + + (arg1)->clearRenderTarget((ccstd::string const &)*arg2); + + + return true; +} + +static bool js_cc_render_RasterQueueBuilder_clearRenderTarget(se::State& s) +{ + // js_function_dispatcher + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + + // js_function_dispatch_case + if (argc == 2) { + ok = js_cc_render_RasterQueueBuilder_clearRenderTarget__SWIG_0(s); + if (ok) { + return true; + } + } // js_function_dispatch_case + if (argc == 1) { + ok = js_cc_render_RasterQueueBuilder_clearRenderTarget__SWIG_1(s); + if (ok) { + return true; + } + } + SE_REPORT_ERROR("wrong number of arguments: %d", (int)argc); + return false; +} +SE_BIND_FUNC(js_cc_render_RasterQueueBuilder_clearRenderTarget) + static bool js_delete_cc_render_RasterQueueBuilder(se::State& s) { // js_dtoroverride @@ -1442,12 +1665,12 @@ bool js_register_cc_render_RasterQueueBuilder(se::Object* obj) { auto* cls = se::Class::create("RasterQueueBuilder", obj, __jsb_cc_render_Setter_proto, nullptr); + cls->defineFunction("setViewport", _SE(js_cc_render_RasterQueueBuilder_setViewport)); cls->defineFunction("addSceneOfCamera", _SE(js_cc_render_RasterQueueBuilder_addSceneOfCamera)); cls->defineFunction("addScene", _SE(js_cc_render_RasterQueueBuilder_addScene)); cls->defineFunction("addFullscreenQuad", _SE(js_cc_render_RasterQueueBuilder_addFullscreenQuad)); cls->defineFunction("addCameraQuad", _SE(js_cc_render_RasterQueueBuilder_addCameraQuad)); cls->defineFunction("clearRenderTarget", _SE(js_cc_render_RasterQueueBuilder_clearRenderTarget)); - cls->defineFunction("setViewport", _SE(js_cc_render_RasterQueueBuilder_setViewport)); @@ -1541,21 +1764,16 @@ static bool js_cc_render_RasterPassBuilder_addComputeView(se::State& s) } SE_BIND_FUNC(js_cc_render_RasterPassBuilder_addComputeView) -static bool js_cc_render_RasterPassBuilder_addQueue(se::State& s) +static bool js_cc_render_RasterPassBuilder_addQueue__SWIG_0(se::State& s) { - // js_function + // js_overloaded_function CC_UNUSED bool ok = true; const auto& args = s.args(); - size_t argc = args.size(); cc::render::RasterPassBuilder *arg1 = (cc::render::RasterPassBuilder *) NULL ; QueueHint arg2 ; cc::render::RasterQueueBuilder *result = 0 ; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); @@ -1572,7 +1790,6 @@ static bool js_cc_render_RasterPassBuilder_addQueue(se::State& s) return true; } -SE_BIND_FUNC(js_cc_render_RasterPassBuilder_addQueue) static bool js_cc_render_RasterPassBuilder_setViewport(se::State& s) { @@ -1603,6 +1820,52 @@ static bool js_cc_render_RasterPassBuilder_setViewport(se::State& s) } SE_BIND_FUNC(js_cc_render_RasterPassBuilder_setViewport) +static bool js_cc_render_RasterPassBuilder_addQueue__SWIG_1(se::State& s) +{ + // js_overloaded_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + cc::render::RasterPassBuilder *arg1 = (cc::render::RasterPassBuilder *) NULL ; + cc::render::RasterQueueBuilder *result = 0 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (cc::render::RasterQueueBuilder *)(arg1)->addQueue(); + // %typemap(out) SWIGTYPE* + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "RasterPassBuilder_addQueue, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + return true; +} + +static bool js_cc_render_RasterPassBuilder_addQueue(se::State& s) +{ + // js_function_dispatcher + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + + // js_function_dispatch_case + if (argc == 1) { + ok = js_cc_render_RasterPassBuilder_addQueue__SWIG_0(s); + if (ok) { + return true; + } + } // js_function_dispatch_case + if (argc == 0) { + ok = js_cc_render_RasterPassBuilder_addQueue__SWIG_1(s); + if (ok) { + return true; + } + } + SE_REPORT_ERROR("wrong number of arguments: %d", (int)argc); + return false; +} +SE_BIND_FUNC(js_cc_render_RasterPassBuilder_addQueue) + static bool js_delete_cc_render_RasterPassBuilder(se::State& s) { // js_dtoroverride @@ -1616,8 +1879,8 @@ bool js_register_cc_render_RasterPassBuilder(se::Object* obj) { cls->defineFunction("addRasterView", _SE(js_cc_render_RasterPassBuilder_addRasterView)); cls->defineFunction("addComputeView", _SE(js_cc_render_RasterPassBuilder_addComputeView)); - cls->defineFunction("addQueue", _SE(js_cc_render_RasterPassBuilder_addQueue)); cls->defineFunction("setViewport", _SE(js_cc_render_RasterPassBuilder_setViewport)); + cls->defineFunction("addQueue", _SE(js_cc_render_RasterPassBuilder_addQueue)); @@ -2816,13 +3079,12 @@ static bool js_cc_render_Pipeline_addRenderTexture(se::State& s) } SE_BIND_FUNC(js_cc_render_Pipeline_addRenderTexture) -static bool js_cc_render_Pipeline_addRenderTarget(se::State& s) +static bool js_cc_render_Pipeline_addRenderTarget__SWIG_0(se::State& s) { - // js_function + // js_overloaded_function CC_UNUSED bool ok = true; const auto& args = s.args(); - size_t argc = args.size(); cc::render::Pipeline *arg1 = (cc::render::Pipeline *) NULL ; ccstd::string *arg2 = 0 ; gfx::Format arg3 ; @@ -2832,10 +3094,6 @@ static bool js_cc_render_Pipeline_addRenderTarget(se::State& s) ccstd::string temp2 ; uint32_t result; - if(argc != 5) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 5); - return false; - } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE& @@ -2873,15 +3131,13 @@ static bool js_cc_render_Pipeline_addRenderTarget(se::State& s) return true; } -SE_BIND_FUNC(js_cc_render_Pipeline_addRenderTarget) -static bool js_cc_render_Pipeline_addDepthStencil(se::State& s) +static bool js_cc_render_Pipeline_addDepthStencil__SWIG_0(se::State& s) { - // js_function + // js_overloaded_function CC_UNUSED bool ok = true; const auto& args = s.args(); - size_t argc = args.size(); cc::render::Pipeline *arg1 = (cc::render::Pipeline *) NULL ; ccstd::string *arg2 = 0 ; gfx::Format arg3 ; @@ -2891,10 +3147,6 @@ static bool js_cc_render_Pipeline_addDepthStencil(se::State& s) ccstd::string temp2 ; uint32_t result; - if(argc != 5) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 5); - return false; - } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE& @@ -2932,7 +3184,6 @@ static bool js_cc_render_Pipeline_addDepthStencil(se::State& s) return true; } -SE_BIND_FUNC(js_cc_render_Pipeline_addDepthStencil) static bool js_cc_render_Pipeline_updateRenderWindow(se::State& s) { @@ -3011,13 +3262,12 @@ static bool js_cc_render_Pipeline_endFrame(se::State& s) } SE_BIND_FUNC(js_cc_render_Pipeline_endFrame) -static bool js_cc_render_Pipeline_addRasterPass(se::State& s) +static bool js_cc_render_Pipeline_addRasterPass__SWIG_0(se::State& s) { - // js_function + // js_overloaded_function CC_UNUSED bool ok = true; const auto& args = s.args(); - size_t argc = args.size(); cc::render::Pipeline *arg1 = (cc::render::Pipeline *) NULL ; uint32_t arg2 ; uint32_t arg3 ; @@ -3025,10 +3275,6 @@ static bool js_cc_render_Pipeline_addRasterPass(se::State& s) ccstd::string temp4 ; cc::render::RasterPassBuilder *result = 0 ; - if(argc != 3) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); - return false; - } arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); @@ -3055,7 +3301,6 @@ static bool js_cc_render_Pipeline_addRasterPass(se::State& s) return true; } -SE_BIND_FUNC(js_cc_render_Pipeline_addRasterPass) static bool js_cc_render_Pipeline_addComputePass(se::State& s) { @@ -3242,6 +3487,208 @@ static bool js_cc_render_Pipeline_getDescriptorSetLayout(se::State& s) } SE_BIND_FUNC(js_cc_render_Pipeline_getDescriptorSetLayout) +static bool js_cc_render_Pipeline_addRenderTarget__SWIG_1(se::State& s) +{ + // js_overloaded_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + cc::render::Pipeline *arg1 = (cc::render::Pipeline *) NULL ; + ccstd::string *arg2 = 0 ; + gfx::Format arg3 ; + uint32_t arg4 ; + uint32_t arg5 ; + ccstd::string temp2 ; + uint32_t result; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "Pipeline_addRenderTarget,2,SWIGTYPE_p_ccstd__string"); + arg2 = &temp2; + + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[1], &arg3, s.thisObject()); + SE_PRECONDITION2(ok, false, "Pipeline_addRenderTarget,3,SWIGTYPE_gfx__Format"); + + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[2], &arg4, s.thisObject()); + SE_PRECONDITION2(ok, false, "Pipeline_addRenderTarget,4,SWIGTYPE_uint32_t"); + + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[3], &arg5, s.thisObject()); + SE_PRECONDITION2(ok, false, "Pipeline_addRenderTarget,5,SWIGTYPE_uint32_t"); + + result = (arg1)->addRenderTarget((ccstd::string const &)*arg2,arg3,arg4,arg5); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "Pipeline_addRenderTarget, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + + return true; +} + +static bool js_cc_render_Pipeline_addRenderTarget(se::State& s) +{ + // js_function_dispatcher + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + + // js_function_dispatch_case + if (argc == 5) { + ok = js_cc_render_Pipeline_addRenderTarget__SWIG_0(s); + if (ok) { + return true; + } + } // js_function_dispatch_case + if (argc == 4) { + ok = js_cc_render_Pipeline_addRenderTarget__SWIG_1(s); + if (ok) { + return true; + } + } + SE_REPORT_ERROR("wrong number of arguments: %d", (int)argc); + return false; +} +SE_BIND_FUNC(js_cc_render_Pipeline_addRenderTarget) + +static bool js_cc_render_Pipeline_addDepthStencil__SWIG_1(se::State& s) +{ + // js_overloaded_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + cc::render::Pipeline *arg1 = (cc::render::Pipeline *) NULL ; + ccstd::string *arg2 = 0 ; + gfx::Format arg3 ; + uint32_t arg4 ; + uint32_t arg5 ; + ccstd::string temp2 ; + uint32_t result; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "Pipeline_addDepthStencil,2,SWIGTYPE_p_ccstd__string"); + arg2 = &temp2; + + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[1], &arg3, s.thisObject()); + SE_PRECONDITION2(ok, false, "Pipeline_addDepthStencil,3,SWIGTYPE_gfx__Format"); + + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[2], &arg4, s.thisObject()); + SE_PRECONDITION2(ok, false, "Pipeline_addDepthStencil,4,SWIGTYPE_uint32_t"); + + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[3], &arg5, s.thisObject()); + SE_PRECONDITION2(ok, false, "Pipeline_addDepthStencil,5,SWIGTYPE_uint32_t"); + + result = (arg1)->addDepthStencil((ccstd::string const &)*arg2,arg3,arg4,arg5); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "Pipeline_addDepthStencil, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + + return true; +} + +static bool js_cc_render_Pipeline_addDepthStencil(se::State& s) +{ + // js_function_dispatcher + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + + // js_function_dispatch_case + if (argc == 5) { + ok = js_cc_render_Pipeline_addDepthStencil__SWIG_0(s); + if (ok) { + return true; + } + } // js_function_dispatch_case + if (argc == 4) { + ok = js_cc_render_Pipeline_addDepthStencil__SWIG_1(s); + if (ok) { + return true; + } + } + SE_REPORT_ERROR("wrong number of arguments: %d", (int)argc); + return false; +} +SE_BIND_FUNC(js_cc_render_Pipeline_addDepthStencil) + +static bool js_cc_render_Pipeline_addRasterPass__SWIG_1(se::State& s) +{ + // js_overloaded_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + cc::render::Pipeline *arg1 = (cc::render::Pipeline *) NULL ; + uint32_t arg2 ; + uint32_t arg3 ; + cc::render::RasterPassBuilder *result = 0 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "Pipeline_addRasterPass,2,SWIGTYPE_uint32_t"); + + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[1], &arg3, s.thisObject()); + SE_PRECONDITION2(ok, false, "Pipeline_addRasterPass,3,SWIGTYPE_uint32_t"); + + result = (cc::render::RasterPassBuilder *)(arg1)->addRasterPass(arg2,arg3); + // %typemap(out) SWIGTYPE* + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "Pipeline_addRasterPass, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + return true; +} + +static bool js_cc_render_Pipeline_addRasterPass(se::State& s) +{ + // js_function_dispatcher + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + + // js_function_dispatch_case + if (argc == 3) { + ok = js_cc_render_Pipeline_addRasterPass__SWIG_0(s); + if (ok) { + return true; + } + } // js_function_dispatch_case + if (argc == 2) { + ok = js_cc_render_Pipeline_addRasterPass__SWIG_1(s); + if (ok) { + return true; + } + } + SE_REPORT_ERROR("wrong number of arguments: %d", (int)argc); + return false; +} +SE_BIND_FUNC(js_cc_render_Pipeline_addRasterPass) + static bool js_cc_render_Pipeline_layoutGraphBuilder_get(se::State& s) { CC_UNUSED bool ok = true; @@ -3277,18 +3724,18 @@ bool js_register_cc_render_Pipeline(se::Object* obj) { cls->defineFunction("endSetup", _SE(js_cc_render_Pipeline_endSetup)); cls->defineFunction("containsResource", _SE(js_cc_render_Pipeline_containsResource)); cls->defineFunction("addRenderTexture", _SE(js_cc_render_Pipeline_addRenderTexture)); - cls->defineFunction("addRenderTarget", _SE(js_cc_render_Pipeline_addRenderTarget)); - cls->defineFunction("addDepthStencil", _SE(js_cc_render_Pipeline_addDepthStencil)); cls->defineFunction("updateRenderWindow", _SE(js_cc_render_Pipeline_updateRenderWindow)); cls->defineFunction("beginFrame", _SE(js_cc_render_Pipeline_beginFrame)); cls->defineFunction("endFrame", _SE(js_cc_render_Pipeline_endFrame)); - cls->defineFunction("addRasterPass", _SE(js_cc_render_Pipeline_addRasterPass)); cls->defineFunction("addComputePass", _SE(js_cc_render_Pipeline_addComputePass)); cls->defineFunction("addMovePass", _SE(js_cc_render_Pipeline_addMovePass)); cls->defineFunction("addCopyPass", _SE(js_cc_render_Pipeline_addCopyPass)); cls->defineFunction("presentAll", _SE(js_cc_render_Pipeline_presentAll)); cls->defineFunction("createSceneTransversal", _SE(js_cc_render_Pipeline_createSceneTransversal)); cls->defineFunction("getDescriptorSetLayout", _SE(js_cc_render_Pipeline_getDescriptorSetLayout)); + cls->defineFunction("addRenderTarget", _SE(js_cc_render_Pipeline_addRenderTarget)); + cls->defineFunction("addDepthStencil", _SE(js_cc_render_Pipeline_addDepthStencil)); + cls->defineFunction("addRasterPass", _SE(js_cc_render_Pipeline_addRasterPass)); diff --git a/native/cocos/renderer/pipeline/custom/RenderInterfaceTypes.h b/native/cocos/renderer/pipeline/custom/RenderInterfaceTypes.h index 4b9b06882bd..daa81c23c22 100644 --- a/native/cocos/renderer/pipeline/custom/RenderInterfaceTypes.h +++ b/native/cocos/renderer/pipeline/custom/RenderInterfaceTypes.h @@ -146,6 +146,21 @@ class RasterQueueBuilder : public Setter { virtual void addCameraQuad(scene::Camera *camera, Material *material, uint32_t passID, SceneFlags sceneFlags) = 0; virtual void clearRenderTarget(const ccstd::string &name, const gfx::Color &color) = 0; virtual void setViewport(const gfx::Viewport &viewport) = 0; + void addSceneOfCamera(scene::Camera *camera, LightInfo light) { + addSceneOfCamera(camera, std::move(light), SceneFlags::NONE); + } + void addScene(const ccstd::string &name) { + addScene(name, SceneFlags::NONE); + } + void addFullscreenQuad(Material *material, uint32_t passID) { + addFullscreenQuad(material, passID, SceneFlags::NONE); + } + void addCameraQuad(scene::Camera *camera, Material *material, uint32_t passID) { + addCameraQuad(camera, material, passID, SceneFlags::NONE); + } + void clearRenderTarget(const ccstd::string &name) { + clearRenderTarget(name, {}); + } }; class RasterPassBuilder : public Setter { @@ -156,6 +171,9 @@ class RasterPassBuilder : public Setter { virtual void addComputeView(const ccstd::string &name, const ComputeView &view) = 0; virtual RasterQueueBuilder *addQueue(QueueHint hint) = 0; virtual void setViewport(const gfx::Viewport &viewport) = 0; + RasterQueueBuilder *addQueue() { + return addQueue(QueueHint::NONE); + } }; class ComputeQueueBuilder : public Setter { @@ -274,6 +292,15 @@ class Pipeline : public PipelineRuntime { virtual SceneTransversal *createSceneTransversal(const scene::Camera *camera, const scene::RenderScene *scene) = 0; virtual LayoutGraphBuilder *getLayoutGraphBuilder() = 0; virtual gfx::DescriptorSetLayout *getDescriptorSetLayout(const ccstd::string &shaderName, UpdateFrequency freq) = 0; + uint32_t addRenderTarget(const ccstd::string &name, gfx::Format format, uint32_t width, uint32_t height) { + return addRenderTarget(name, format, width, height, ResourceResidency::MANAGED); + } + uint32_t addDepthStencil(const ccstd::string &name, gfx::Format format, uint32_t width, uint32_t height) { + return addDepthStencil(name, format, width, height, ResourceResidency::MANAGED); + } + RasterPassBuilder *addRasterPass(uint32_t width, uint32_t height) { + return addRasterPass(width, height, "default"); + } }; class PipelineBuilder { From cb0b9b0377560949c679e77484a7c58dd73188b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leslie=20Leigh=20=28=E6=9D=8E=E7=9A=84=E5=BA=8F=29?= Date: Mon, 31 Oct 2022 15:42:41 +0800 Subject: [PATCH 111/829] Remove unused code (#13191) --- cocos/animation/marionette/clip-motion.ts | 5 +-- cocos/animation/marionette/graph-debug.ts | 29 ---------------- cocos/animation/marionette/graph-eval.ts | 42 ----------------------- 3 files changed, 1 insertion(+), 75 deletions(-) diff --git a/cocos/animation/marionette/clip-motion.ts b/cocos/animation/marionette/clip-motion.ts index 33b6b3dfaf3..3636735e03d 100644 --- a/cocos/animation/marionette/clip-motion.ts +++ b/cocos/animation/marionette/clip-motion.ts @@ -5,7 +5,7 @@ import { AnimationClip } from '../animation-clip'; import { AnimationState } from '../animation-state'; import { cloneAnimationGraphEditorExtrasFrom } from './animation-graph-editor-extras-clone-helper'; import { createEval } from './create-eval'; -import { getMotionRuntimeID, GRAPH_DEBUG_ENABLED, pushWeight, RUNTIME_ID_ENABLED } from './graph-debug'; +import { getMotionRuntimeID, RUNTIME_ID_ENABLED } from './graph-debug'; import { ClipStatus } from './graph-eval'; import { MotionEvalContext, Motion, MotionEval } from './motion'; @@ -83,9 +83,6 @@ class ClipMotionEval implements MotionEval { if (weight === 0.0) { return; } - if (GRAPH_DEBUG_ENABLED) { - pushWeight(this._state.name, weight); - } const time = this._state.duration * progress; this._state.time = time; this._state.weight = weight; diff --git a/cocos/animation/marionette/graph-debug.ts b/cocos/animation/marionette/graph-debug.ts index cc5665bcca0..ceba794d7fc 100644 --- a/cocos/animation/marionette/graph-debug.ts +++ b/cocos/animation/marionette/graph-debug.ts @@ -1,7 +1,6 @@ import { EDITOR } from 'internal:constants'; import { editorExtrasTag } from '../../core/data'; -import { debug } from '../../core'; import { AnimationBlend } from './animation-blend'; import { ClipMotion } from './clip-motion'; @@ -14,31 +13,3 @@ export function getMotionRuntimeID (motion: ClipMotion | AnimationBlend) { } export const GRAPH_DEBUG_ENABLED = false; - -export const graphDebug = GRAPH_DEBUG_ENABLED - ? debug - : EMPTY as typeof debug; - -export const graphDebugGroup = GRAPH_DEBUG_ENABLED - ? console.group - : EMPTY as typeof debug; - -export const graphDebugGroupEnd = GRAPH_DEBUG_ENABLED - ? console.groupEnd - : EMPTY as typeof debug; - -function EMPTY (...args: unknown[]) { } - -const weightsStats: [string, number][] = []; - -export function pushWeight (name: string, weight: number) { - weightsStats.push([name, weight]); -} - -export function getWeightsStats () { - return `[${weightsStats.map(([name, weight]) => `[${name}: ${weight}]`).join(' ')}]`; -} - -export function clearWeightsStats () { - weightsStats.length = 0; -} diff --git a/cocos/animation/marionette/graph-eval.ts b/cocos/animation/marionette/graph-eval.ts index 859b734b354..0e6bbb9ed26 100644 --- a/cocos/animation/marionette/graph-eval.ts +++ b/cocos/animation/marionette/graph-eval.ts @@ -16,7 +16,6 @@ import { AnimationMask } from './animation-mask'; import { warnID } from '../../core'; import { BlendStateBuffer, LayeredBlendStateBuffer } from '../../3d/skeletal-animation/skeletal-animation-blending'; import { MAX_ANIMATION_LAYER } from '../../3d/skeletal-animation/limits'; -import { clearWeightsStats, getWeightsStats, graphDebug, graphDebugGroup, graphDebugGroupEnd, GRAPH_DEBUG_ENABLED } from './graph-debug'; import { AnimationClip } from '../animation-clip'; import type { AnimationController } from './animation-controller'; import { StateMachineComponent } from './state-machine-component'; @@ -85,10 +84,6 @@ export class AnimationGraphEval { _blendBuffer: blendBuffer, _layerEvaluations: layerEvaluations, } = this; - graphDebugGroup(`New frame started.`); - if (GRAPH_DEBUG_ENABLED) { - clearWeightsStats(); - } const nLayers = layerEvaluations.length; for (let iLayer = 0; iLayer < nLayers; ++iLayer) { const layerEval = layerEvaluations[iLayer]; @@ -105,11 +100,7 @@ export class AnimationGraphEval { } } } - if (GRAPH_DEBUG_ENABLED) { - graphDebug(`Weights: ${getWeightsStats()}`); - } this._blendBuffer.apply(); - graphDebugGroupEnd(); } public getVariables (): Iterable]>> { @@ -542,7 +533,6 @@ class LayerEval { */ private _eval (deltaTime: Readonly) { assertIsTrue(!this.exited); - graphDebugGroup(`[Layer ${this.name}]: UpdateStart ${deltaTime}s`); const haltOnNonMotionState = this._continueDanglingTransition(); if (haltOnNonMotionState) { @@ -550,7 +540,6 @@ class LayerEval { } const MAX_ITERATIONS = 100; - let passConsumed = 0.0; let remainTimePiece = deltaTime; for (let continueNextIterationForce = true, // Force next iteration even remain time piece is zero @@ -559,21 +548,11 @@ class LayerEval { ) { continueNextIterationForce = false; - if (iterations !== 0) { - graphDebug(`Pass end. Consumed ${passConsumed}s, remain: ${remainTimePiece}s`); - } - if (iterations === MAX_ITERATIONS) { warnID(14000, MAX_ITERATIONS); break; } - graphDebug(`Pass ${iterations} started.`); - - if (GRAPH_DEBUG_ENABLED) { - passConsumed = 0.0; - } - ++iterations; // Update current transition if we're in transition. @@ -591,9 +570,6 @@ class LayerEval { } const currentUpdatingConsume = this._updateCurrentTransition(remainTimePiece); - if (GRAPH_DEBUG_ENABLED) { - passConsumed = currentUpdatingConsume; - } remainTimePiece -= currentUpdatingConsume; if (this._currentNode.kind === NodeKind.exit) { break; @@ -616,10 +592,6 @@ class LayerEval { requires: updateRequires, } = transitionMatch; - graphDebug(`[SubStateMachine ${this.name}]: CurrentNodeUpdate: ${currentNode.name}`); - if (GRAPH_DEBUG_ENABLED) { - passConsumed = updateRequires; - } remainTimePiece -= updateRequires; if (currentNode.kind === NodeKind.animation) { @@ -634,7 +606,6 @@ class LayerEval { continueNextIterationForce = true; } else { // If no transition matched, we update current node. - graphDebug(`[SubStateMachine ${this.name}]: CurrentNodeUpdate: ${currentNode.name}`); if (currentNode.kind === NodeKind.animation) { currentNode.updateFromPort(remainTimePiece); this._fromUpdated = true; @@ -646,16 +617,10 @@ class LayerEval { // I'm sure conscious of it's redundant with above statement, just emphasize. remainTimePiece = 0.0; } - if (GRAPH_DEBUG_ENABLED) { - passConsumed = remainTimePiece; - } continue; } } - graphDebug(`[SubStateMachine ${this.name}]: UpdateEnd`); - graphDebugGroupEnd(); - if (this._fromUpdated && this._currentNode.kind === NodeKind.animation) { this._fromUpdated = false; this._currentNode.triggerFromPortUpdate(this._controller); @@ -1031,24 +996,17 @@ class LayerEval { const hasFinished = ratio === 1.0; if (fromNode.kind === NodeKind.animation && shouldUpdatePorts) { - graphDebugGroup(`Update ${fromNode.name}`); fromNode.updateFromPort(contrib); this._fromUpdated = true; - graphDebugGroupEnd(); } if (toNode.kind === NodeKind.animation && shouldUpdatePorts) { - graphDebugGroup(`Update ${toNode.name}`); toNode.updateToPort(contrib); this._toUpdated = true; - graphDebugGroupEnd(); } - graphDebugGroupEnd(); - if (hasFinished) { // Transition done. - graphDebug(`[SubStateMachine ${this.name}]: Transition finished: ${fromNode.name} -> ${toNodeName}.`); this._finishCurrentTransition(); } From 9181bf5e7c3df19d8f23dea5004e4b8028ec1fc2 Mon Sep 17 00:00:00 2001 From: zhangxin <59186205+chichinohaha@users.noreply.github.com> Date: Mon, 31 Oct 2022 16:12:58 +0800 Subject: [PATCH 112/829] =?UTF-8?q?update=20reflection-probe's=20inspector?= =?UTF-8?q?=20and=20move=20develop's=20code=20to=20editor=EF=BC=8Cadd=20gi?= =?UTF-8?q?zmo=20icon=20(#13185)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cocos/3d/framework/index.ts | 2 +- cocos/3d/framework/mesh-renderer.ts | 12 +- cocos/misc/reflection-probe-component.ts | 134 ++++-------------- cocos/render-scene/scene/reflection-probe.ts | 22 +-- editor/assets/gizmo/reflection-probe.png | Bin 0 -> 519 bytes editor/assets/gizmo/reflection-probe.png.meta | 42 ++++++ editor/exports/reflection-probe.ts | 1 + editor/inspector/components-footer.js | 1 + editor/inspector/components.js | 1 - .../components/reflection-probe-footer.js | 49 +++++++ .../inspector/components/reflection-probe.js | 28 ---- 11 files changed, 141 insertions(+), 151 deletions(-) create mode 100644 editor/assets/gizmo/reflection-probe.png create mode 100644 editor/assets/gizmo/reflection-probe.png.meta create mode 100644 editor/exports/reflection-probe.ts create mode 100644 editor/inspector/components/reflection-probe-footer.js delete mode 100644 editor/inspector/components/reflection-probe.js diff --git a/cocos/3d/framework/index.ts b/cocos/3d/framework/index.ts index dc20bfbf3d4..b426ef06e25 100644 --- a/cocos/3d/framework/index.ts +++ b/cocos/3d/framework/index.ts @@ -24,7 +24,7 @@ THE SOFTWARE. */ -export { MeshRenderer } from './mesh-renderer'; +export { MeshRenderer, ReflectionProbeType } from './mesh-renderer'; /** deprecated */ export * from './deprecated'; diff --git a/cocos/3d/framework/mesh-renderer.ts b/cocos/3d/framework/mesh-renderer.ts index b59ae4948ba..5f4c459c6c1 100644 --- a/cocos/3d/framework/mesh-renderer.ts +++ b/cocos/3d/framework/mesh-renderer.ts @@ -81,23 +81,23 @@ const ModelShadowReceivingMode = Enum({ * @en Reflection probe type * @zh 反射探针类型。 */ -export const ReflectionProbeType = Enum({ +export enum ReflectionProbeType { /** * @en Use the default skybox. * @zh 使用默认天空盒 */ - NONE: 0, + NONE = 0, /** * @en Cubemap generate by probe * @zh Probe烘焙的cubemap */ - BAKED_CUBEMAP: 1, + BAKED_CUBEMAP = 1, /** * @en Realtime planar reflection * @zh 实时平面反射 */ - PLANAR_REFLECTION: 2, -}); + PLANAR_REFLECTION = 2, +} /** * @en Model's light map settings. @@ -371,7 +371,7 @@ export class MeshRenderer extends ModelRenderer { * @en Used to set whether to use the reflection probe or set probe's type. * @zh 用于设置是否使用反射探针或者设置反射探针的类型。 */ - @type(ReflectionProbeType) + @type(Enum(ReflectionProbeType)) get reflectionProbe () { return this._reflectionProbeType; } diff --git a/cocos/misc/reflection-probe-component.ts b/cocos/misc/reflection-probe-component.ts index 8cc156e784e..470128e8f0c 100644 --- a/cocos/misc/reflection-probe-component.ts +++ b/cocos/misc/reflection-probe-component.ts @@ -22,57 +22,54 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -import { ccclass, executeInEditMode, menu, playOnFocus, readOnly, serializable, tooltip, type, visible } from 'cc.decorator'; +import { ccclass, executeInEditMode, menu, playOnFocus, serializable, tooltip, type, visible } from 'cc.decorator'; import { EDITOR } from 'internal:constants'; -import { CCBoolean, Color, Enum, Vec3 } from '../core'; -import { BufferTextureCopy } from '../gfx/base/define'; +import { CCObject, Color, Enum, Vec3 } from '../core'; -import { deviceManager } from '../gfx'; -import { Component } from '../scene-graph/component'; +import { TextureCube } from '../asset/assets'; +import { scene } from '../render-scene'; +import { ProbeClearFlag, ProbeType } from '../render-scene/scene/reflection-probe'; import { CAMERA_DEFAULT_MASK } from '../rendering/define'; -import { RenderTexture, TextureCube } from '../asset/assets'; import { ReflectionProbeManager } from '../rendering/reflection-probe-manager'; +import { Component } from '../scene-graph/component'; import { Layers } from '../scene-graph/layers'; -import { legacyCC } from '../core/global-exports'; import { Camera } from './camera-component'; -import { scene } from '../render-scene'; -import { ProbeClearFlag, ProbeType } from '../render-scene/scene/reflection-probe'; -export const ProbeResolution = Enum({ +export enum ProbeResolution { /** * @zh 分辨率 128 * 128。 * @en renderTexture resolution 128 * 128. * @readonly */ - Low_128x128: 128, + Low_128x128= 128, /** * @zh 分辨率 256 * 256。 * @en renderTexture resolution 256 * 256. * @readonly */ - Low_256x256: 256, + Low_256x256= 256, /** * @zh 分辨率 512 * 512。 * @en renderTexture resolution 512 * 512. * @readonly */ - Medium_512x512: 512, + Medium_512x512= 512, /** * @zh 分辨率 1024 * 1024。 * @en renderTexture resolution 1024 * 1024. * @readonly */ - High_1024x1024: 1024, + High_1024x1024= 1024, /** * @zh 分辨率 2048 * 2048。 * @en renderTexture resolution 2048 * 2048. * @readonly */ - Ultra_2048x2048: 2048, -}); + Ultra_2048x2048= 2048, +} @ccclass('cc.ReflectionProbe') @menu('Rendering/ReflectionProbe') @executeInEditMode @@ -96,7 +93,7 @@ export class ReflectionProbe extends Component { protected _cubemap: TextureCube | null = null; @serializable - protected _size = new Vec3(); + protected _size = new Vec3(1, 1, 1); @serializable protected _sourceCamera: Camera | null = null; @@ -116,6 +113,7 @@ export class ReflectionProbe extends Component { this._size = value; this.probe.size = this._size; } + @type(Vec3) get size () { return this._size; } @@ -124,16 +122,24 @@ export class ReflectionProbe extends Component { * @en Environment reflection or plane reflection. * @zh 设置探针类型,环境反射或者平面反射 */ - @type(ProbeType) + @type(Enum(ProbeType)) set probeType (value: number) { this._probeType = value; this.probe.probeType = value; if (this._probeType === ProbeType.CUBE) { this.probe.switchProbeType(value); - } else if (!this._sourceCamera) { - console.error('the reflection camera is invalid, please set the reflection camera'); - } else { + if (EDITOR) { + this._objFlags |= CCObject.Flags.IsRotationLocked; + } + } else { + if (EDITOR && this._objFlags & CCObject.Flags.IsRotationLocked) { + this._objFlags ^= CCObject.Flags.IsRotationLocked; + } + if (!this._sourceCamera) { + console.error('the reflection camera is invalid, please set the reflection camera'); + return; + } this.probe.switchProbeType(value, this._sourceCamera.camera); } } @@ -145,7 +151,7 @@ export class ReflectionProbe extends Component { * @en set render texture size * @zh 设置渲染纹理大小 */ - @type(ProbeResolution) + @type(Enum(ProbeResolution)) set resolution (value: number) { this._resolution = value; this.probe.resolution = value; @@ -158,7 +164,7 @@ export class ReflectionProbe extends Component { * @en Clearing flags of the camera, specifies which part of the framebuffer will be actually cleared every frame. * @zh 相机的缓冲清除标志位,指定帧缓冲的哪部分要每帧清除。 */ - @type(ProbeClearFlag) + @type(Enum(ProbeClearFlag)) set clearFlag (value: number) { this._clearFlag = value; this.probe.clearFlag = this._clearFlag; @@ -263,41 +269,6 @@ export class ReflectionProbe extends Component { } } - public async bakeCubemap () { - if (this.probeType === ProbeType.CUBE) { - await this.captureCube(); - } - } - - /* eslint-disable no-await-in-loop */ - /** - * @en Render the six faces of the Probe and use the tool to generate a cubemap and save it to the asset directory. - * @zh 渲染Probe的6个面,并且使用工具生成cubemap保存至asset目录。 - */ - public async captureCube () { - await this.probe.captureCubemap(); - //Save rendertexture data to the resource directory - const caps = (legacyCC.director.root).device.capabilities; - const files: string[] = []; - for (let faceIdx = 0; faceIdx < 6; faceIdx++) { - const fileName = `capture_${faceIdx}.png`; - files.push(fileName); - let pixelData = this._readPixels(this.probe.bakedCubeTextures[faceIdx]); - if (caps.clipSpaceMinZ === -1) { - pixelData = this._flipImage(pixelData, this._resolution, this._resolution); - } - await EditorExtends.Asset.saveDataToImage(pixelData, this._resolution, this._resolution, this.node.scene.name, fileName); - } - //use the tool to generate a cubemap and save to asset directory - const isHDR = (legacyCC.director.root).pipeline.pipelineSceneData.isHDR; - await EditorExtends.Asset.bakeReflectionProbe(files, isHDR, this.node.scene.name, this.probe.getProbeId(), (assert: any) => { - this.cubemap = assert; - }); - if (this._cubemap) { - ReflectionProbeManager.probeManager.updateBakedCubemap(this.probe); - } - } - private _createProbe () { if (this._probeId < 0 || ReflectionProbeManager.probeManager.exists(this._probeId)) { this._probeId = this.node.scene.getNewReflectionProbeId(); @@ -315,51 +286,4 @@ export class ReflectionProbe extends Component { this._probe.size = this._size; this._probe.cubemap = this._cubemap!; } - - private _readPixels (rt: RenderTexture): Uint8Array | null { - const width = rt.width; - const height = rt.height; - - const needSize = 4 * width * height; - const buffer = new Uint8Array(needSize); - - const gfxTexture = rt.getGFXTexture(); - if (!gfxTexture) { - return null; - } - - const gfxDevice = deviceManager.gfxDevice; - - const bufferViews: ArrayBufferView[] = []; - const regions: BufferTextureCopy[] = []; - - const region0 = new BufferTextureCopy(); - region0.texOffset.x = 0; - region0.texOffset.y = 0; - region0.texExtent.width = rt.width; - region0.texExtent.height = rt.height; - regions.push(region0); - - bufferViews.push(buffer); - gfxDevice?.copyTextureToBuffers(gfxTexture, bufferViews, regions); - return buffer; - } - - private _flipImage (data: Uint8Array | null, width: number, height: number) { - if (!data) { - return null; - } - const newData = new Uint8Array(data.length); - for (let i = 0; i < height; i++) { - for (let j = 0; j < width; j++) { - const index = (width * i + j) * 4; - const newIndex = (width * (height - i - 1) + j) * 4; - newData[newIndex] = data[index]; - newData[newIndex + 1] = data[index + 1]; - newData[newIndex + 2] = data[index + 2]; - newData[newIndex + 3] = data[index + 3]; - } - } - return newData; - } } diff --git a/cocos/render-scene/scene/reflection-probe.ts b/cocos/render-scene/scene/reflection-probe.ts index d8566e2f8c8..1c5aeb28ce2 100644 --- a/cocos/render-scene/scene/reflection-probe.ts +++ b/cocos/render-scene/scene/reflection-probe.ts @@ -23,6 +23,7 @@ THE SOFTWARE. */ import { EDITOR } from 'internal:constants'; +import { type } from 'cc.decorator'; import { Camera, CameraAperture, CameraFOVAxis, CameraISO, CameraProjection, CameraShutter, CameraType, SKYBOX_FLAG, TrackingType } from './camera'; import { Node } from '../../scene-graph/node'; import { CCObject, Color, Enum, Quat, Rect, toRadian, Vec2, Vec3 } from '../../core'; @@ -33,14 +34,15 @@ import { ClearFlagBit } from '../../gfx'; import { TextureCube } from '../../asset/assets/texture-cube'; import { RenderTexture } from '../../asset/assets/render-texture'; -export const ProbeClearFlag = Enum({ - SKYBOX: SKYBOX_FLAG | ClearFlagBit.DEPTH_STENCIL, - SOLID_COLOR: ClearFlagBit.ALL, -}); -export const ProbeType = Enum({ - CUBE: 0, - PLANAR: 1, -}); +export enum ProbeClearFlag { + SKYBOX= SKYBOX_FLAG | ClearFlagBit.DEPTH_STENCIL, + SOLID_COLOR= ClearFlagBit.ALL, +} + +export enum ProbeType { + CUBE= 0, + PLANAR= 1, +} const cameraDir: Vec3[] = [ new Vec3(0, -90, 0), new Vec3(0, 90, 0), @@ -66,12 +68,12 @@ export class ReflectionProbe { public realtimePlanarTexture: RenderTexture | null = null; protected _resolution = 512; - protected _clearFlag = ProbeClearFlag.SKYBOX; + protected _clearFlag:number = ProbeClearFlag.SKYBOX; protected _backgroundColor = new Color(0, 0, 0, 255); protected _visibility = CAMERA_DEFAULT_MASK; protected _probeType = ProbeType.CUBE; protected _cubemap: TextureCube | null = null; - protected _size = new Vec3(); + protected _size = new Vec3(1, 1, 1); /** * @en Objects inside bouding box. * @zh 包围盒范围内的物体 diff --git a/editor/assets/gizmo/reflection-probe.png b/editor/assets/gizmo/reflection-probe.png new file mode 100644 index 0000000000000000000000000000000000000000..fad3a56cf0aab20f43200874a15ce116601fd1a8 GIT binary patch literal 519 zcmV+i0{H!jP)@ER z-IowZ0RB5gOfV5ud|0t=S;|N_vO3nDwJnOG#hh^Anzf^Fw6sAkoJ6r2N=Hi$q`(bJ z)`8|>{hP((OweiAwP_^BhUP&!RE8L6tVS>9+6}8>JzC~c(2{Gacz5Xi9$nhF+sHvNr^8u0AkKl;q zPzW%vM;^I002ov JPDHLkV1gR<-PHg9 literal 0 HcmV?d00001 diff --git a/editor/assets/gizmo/reflection-probe.png.meta b/editor/assets/gizmo/reflection-probe.png.meta new file mode 100644 index 00000000000..db53c2f5c40 --- /dev/null +++ b/editor/assets/gizmo/reflection-probe.png.meta @@ -0,0 +1,42 @@ +{ + "ver": "1.0.25", + "importer": "image", + "imported": true, + "uuid": "dee6f7cc-ba21-4091-948f-4f508495f260", + "files": [ + ".json", + ".png" + ], + "subMetas": { + "6c48a": { + "importer": "texture", + "uuid": "dee6f7cc-ba21-4091-948f-4f508495f260@6c48a", + "displayName": "reflection-probe", + "id": "6c48a", + "name": "texture", + "userData": { + "wrapModeS": "repeat", + "wrapModeT": "repeat", + "minfilter": "linear", + "magfilter": "linear", + "mipfilter": "nearest", + "anisotropy": 0, + "isUuid": true, + "imageUuidOrDatabaseUri": "dee6f7cc-ba21-4091-948f-4f508495f260", + "visible": true + }, + "ver": "1.0.22", + "imported": true, + "files": [ + ".json" + ], + "subMetas": {} + } + }, + "userData": { + "type": "texture", + "fixAlphaTransparencyArtifacts": true, + "hasAlpha": true, + "redirect": "dee6f7cc-ba21-4091-948f-4f508495f260@6c48a" + } +} diff --git a/editor/exports/reflection-probe.ts b/editor/exports/reflection-probe.ts new file mode 100644 index 00000000000..14721490c20 --- /dev/null +++ b/editor/exports/reflection-probe.ts @@ -0,0 +1 @@ +export { ReflectionProbeManager } from '../../cocos/rendering/reflection-probe-manager'; \ No newline at end of file diff --git a/editor/inspector/components-footer.js b/editor/inspector/components-footer.js index 88322929e72..86c222792bb 100644 --- a/editor/inspector/components-footer.js +++ b/editor/inspector/components-footer.js @@ -2,4 +2,5 @@ const { join } = require('path'); module.exports = { 'cc.LightProbeGroup': join(__dirname, './components/light-probe-group-footer.js'), + 'cc.ReflectionProbe': join(__dirname, './components/reflection-probe-footer.js'), }; diff --git a/editor/inspector/components.js b/editor/inspector/components.js index 3b44751c1ec..0ac285836d1 100644 --- a/editor/inspector/components.js +++ b/editor/inspector/components.js @@ -20,6 +20,5 @@ module.exports = { 'cc.WebView': join(__dirname, './components/webview.js'), 'cc.Widget': join(__dirname, './components/widget.js'), 'cc.Class': join(__dirname, './components/class.js'), - 'cc.ReflectionProbe': join(__dirname, './components/reflection-probe.js'), 'cc.LODGroup': join(__dirname, './components/lodGroup/index.js'), }; diff --git a/editor/inspector/components/reflection-probe-footer.js b/editor/inspector/components/reflection-probe-footer.js new file mode 100644 index 00000000000..9f52db74bf6 --- /dev/null +++ b/editor/inspector/components/reflection-probe-footer.js @@ -0,0 +1,49 @@ +exports.template = /* html */` + +`; + +exports.style = /* css */` +.reflection-probe-footer { + display: flex; + flex-wrap: wrap; + margin-top: 6px; +} + +ui-button[hidden] { + display: none; +} + +.bake { + flex: 1; +} + +`; + +exports.$ = { + bake: '.bake' +}; + +exports.update = async function(dump) { + if (dump) { + this.dump = dump; + /** @type {HTMLElement} */ + const button = this.$.bake; + const cubeTypes = (this.dump.value.probeType.values ?? [this.dump.value.probeType.value]); + const cubeEnumIndex = this.dump.value.probeType.enumList.findIndex(item => item.name === 'CUBE'); + button.hidden = cubeTypes.some(item => item !== cubeEnumIndex); + } + +}; + +exports.ready = function() { + this.$.bake.addEventListener('confirm', () => { + const uuids = this.dump.value.uuid.values ?? [this.dump.value.uuid.value]; + Editor.Message.send('scene', 'reflection-probe:bake-cube-map', uuids); + }) +}; + +exports.close = function() { + +}; diff --git a/editor/inspector/components/reflection-probe.js b/editor/inspector/components/reflection-probe.js deleted file mode 100644 index ae40d1e60da..00000000000 --- a/editor/inspector/components/reflection-probe.js +++ /dev/null @@ -1,28 +0,0 @@ -const { template, $, update } = require('./base'); -const MARGIN = '4PX'; - -exports.template = template; -exports.$ = $; -exports.update = update; - -exports.ready = function() { - const $prop = document.createElement('ui-prop'); - this.$.componentContainer.before($prop); - - const $label = document.createElement('ui-label'); - $label.setAttribute('slot', 'label'); - $label.value = 'Generate'; - $prop.appendChild($label); - - const $button = document.createElement('ui-button'); - $button.setAttribute('slot', 'content'); - $button.setAttribute('class', 'blue'); - $button.innerText = 'Generate'; - $prop.appendChild($button); - - $button.addEventListener('confirm', async () => { - // Call the bakeCubemap function in the Reflection Probe component - }); -}; - - From 118ab30e39541563831e2856994e72db375587c9 Mon Sep 17 00:00:00 2001 From: zhangxin <59186205+chichinohaha@users.noreply.github.com> Date: Mon, 31 Oct 2022 16:52:59 +0800 Subject: [PATCH 113/829] add reflection probe prefab (#13193) --- .../light/Reflection Probe.prefab | 106 ++++++++++++++++++ .../light/Reflection Probe.prefab.meta | 13 +++ 2 files changed, 119 insertions(+) create mode 100644 editor/assets/default_prefab/light/Reflection Probe.prefab create mode 100644 editor/assets/default_prefab/light/Reflection Probe.prefab.meta diff --git a/editor/assets/default_prefab/light/Reflection Probe.prefab b/editor/assets/default_prefab/light/Reflection Probe.prefab new file mode 100644 index 00000000000..81abe43e4a1 --- /dev/null +++ b/editor/assets/default_prefab/light/Reflection Probe.prefab @@ -0,0 +1,106 @@ +[ + { + "__type__": "cc.Prefab", + "_name": "Reflection Probe", + "_objFlags": 0, + "_native": "", + "data": { + "__id__": 1 + }, + "optimizationPolicy": 0, + "persistent": false, + "asyncLoadAssets": false + }, + { + "__type__": "cc.Node", + "_name": "Reflection Probe", + "_objFlags": 0, + "__editorExtras__": {}, + "_parent": null, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 2 + } + ], + "_prefab": { + "__id__": 4 + }, + "_lpos": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_mobility": 0, + "_layer": 1073741824, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "" + }, + { + "__type__": "cc.ReflectionProbe", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 1 + }, + "_enabled": true, + "__prefab": { + "__id__": 3 + }, + "_resolution": 512, + "_clearFlag": 14, + "_backgroundColor": { + "__type__": "cc.Color", + "r": 0, + "g": 0, + "b": 0, + "a": 255 + }, + "_visibility": 1083179008, + "_probeType": 0, + "_cubemap": null, + "_size": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_sourceCamera": null, + "_probeId": 8, + "_id": "" + }, + { + "__type__": "cc.CompPrefabInfo", + "fileId": "19F7YKQTZB17IO5txxISws" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "e0JfJQZohBa5oXEZWTaEi2" + } +] \ No newline at end of file diff --git a/editor/assets/default_prefab/light/Reflection Probe.prefab.meta b/editor/assets/default_prefab/light/Reflection Probe.prefab.meta new file mode 100644 index 00000000000..1a27e9c5dbb --- /dev/null +++ b/editor/assets/default_prefab/light/Reflection Probe.prefab.meta @@ -0,0 +1,13 @@ +{ + "ver": "1.1.40", + "importer": "prefab", + "imported": true, + "uuid": "d8b49b64-cfba-4cfa-be53-1e469547b28b", + "files": [ + ".json" + ], + "subMetas": {}, + "userData": { + "syncNodeName": "Reflection Probe" + } +} From 7ccd14e6e67c325eecd22b4bf2a5c9b2e145df80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B1=9F=E6=88=98?= <40414978+PatriceJiang@users.noreply.github.com> Date: Mon, 31 Oct 2022 17:24:54 +0800 Subject: [PATCH 114/829] JSB export math class : Vec2/Vec3/Vec4/Quat/Mat3/Mat4/Color (#12968) --- @types/jsb.d.ts | 21 + cocos/core/math/index.ts | 1 + cocos/core/math/math-native-ext.ts | 108 + native/cocos/application/CocosApplication.cpp | 2 +- native/cocos/bindings/auto/jsb_cocos_auto.cpp | 9545 +++++++---------- native/cocos/bindings/auto/jsb_cocos_auto.h | 50 +- .../cocos/bindings/auto/jsb_geometry_auto.cpp | 1 + .../bindings/manual/jsb_cocos_manual.cpp | 54 +- .../bindings/manual/jsb_conversions_spec.cpp | 87 +- .../bindings/manual/jsb_conversions_spec.h | 22 - native/cocos/core/Root.cpp | 4 +- native/cocos/engine/Engine.cpp | 4 +- .../interfaces/modules/ISystemWindow.h | 4 +- native/cocos/profiler/DebugRenderer.cpp | 2 +- native/cocos/profiler/Profiler.cpp | 6 +- .../cocos/renderer/gfx-vulkan/VKSwapchain.cpp | 4 +- native/cocos/ui/edit-box/EditBox-win32.cpp | 4 +- native/tools/swig-config/cocos.i | 27 +- native/tools/swig-config/geometry.i | 1 + pal/input/native/mouse-input.ts | 2 +- pal/input/native/touch-input.ts | 2 +- 21 files changed, 4026 insertions(+), 5925 deletions(-) create mode 100644 cocos/core/math/math-native-ext.ts diff --git a/@types/jsb.d.ts b/@types/jsb.d.ts index ad7bc45a326..c66ddae3d41 100644 --- a/@types/jsb.d.ts +++ b/@types/jsb.d.ts @@ -194,6 +194,27 @@ declare namespace jsb { export function getOriginalPCMBuffer (url: string, channelID: number): ArrayBuffer | undefined; } + class NativePOD { + underlyingData(): ArrayBuffer; + _data(): TypedArray; + __data: TypedArray; + } + + export class Color extends NativePOD { + } + export class Quat extends NativePOD { + } + export class Vec2 extends NativePOD { + } + export class Vec3 extends NativePOD { + } + export class Vec4 extends NativePOD { + } + + export class Mat3 extends NativePOD { + } + export class Mat4 extends NativePOD { + } export interface ManifestAsset { md5: string; path: string; diff --git a/cocos/core/math/index.ts b/cocos/core/math/index.ts index 0568754fcda..72390efb1df 100644 --- a/cocos/core/math/index.ts +++ b/cocos/core/math/index.ts @@ -27,6 +27,7 @@ import * as bits from './bits'; import './deprecated'; +import './math-native-ext'; /** * Export module bits. */ diff --git a/cocos/core/math/math-native-ext.ts b/cocos/core/math/math-native-ext.ts new file mode 100644 index 00000000000..eb1f7eda157 --- /dev/null +++ b/cocos/core/math/math-native-ext.ts @@ -0,0 +1,108 @@ +/* + Copyright (c) 2022 Xiamen Yaji Software Co., Ltd. + http://www.cocos.com + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated engine source code (the "Software"), a limited, + worldwide, royalty-free, non-assignable, revocable and non-exclusive license + to use Cocos Creator solely to develop games on your target platforms. You shall + not use Cocos Creator software for developing other software or tools that's + used for developing games. You are not granted to publish, distribute, + sublicense, and/or sell copies of Cocos Creator. + The software or tools in this License Agreement are licensed, not sold. + Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +import { NATIVE } from 'internal:constants'; +import { Mat4 } from './mat4'; +import { Mat3 } from './mat3'; +import { Vec3 } from './vec3'; +import { Vec2 } from './vec2'; +import { Vec4 } from './vec4'; +import { Quat } from './quat'; +import { Color } from './color'; + +const defineAttr = (proto, name, offset) => { + Object.defineProperty(proto, name, { + configurable: true, + enumerable: true, + get () { + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return this._data()[offset]; + }, + set (v: number) { + this._data()[offset] = v; + }, + }); +}; + +enum MathType { + VEC2 = 0, + VEC3, + VEC4, + QUATERNION, + MAT3, + MAT4, + SIZE, + RECT, + COLOR, +} + +function extendType (proto:any, parentProto:any, typ: MathType) { + proto._data = function () { + if (!this.__data) { + this.__data = new Float32Array(this.underlyingData()); + } + return this.__data as Float32Array; + }; + Object.setPrototypeOf(proto, parentProto); + Object.defineProperty(proto, 'type', { configurable: true, enumerable: true, writable: false, value: typ }); +} + +if (NATIVE) { + extendType(jsb.Mat4.prototype, Mat4.prototype, MathType.MAT4); + + for (let i = 0; i < 16; i++) { + const numb = `0${i}`; + defineAttr(jsb.Mat4.prototype, `m${numb.substring(numb.length - 2)}`, i); + } + + for (let i = 0; i < 9; i++) { + const numb = `0${i}`; + defineAttr(jsb.Mat3.prototype, `m${numb.substring(numb.length - 2)}`, i); + } + extendType(jsb.Mat3.prototype, Mat3.prototype, MathType.MAT3); + + defineAttr(jsb.Vec2.prototype, 'x', 0); + defineAttr(jsb.Vec2.prototype, 'y', 1); + extendType(jsb.Vec2.prototype, Vec2.prototype, MathType.VEC2); + + defineAttr(jsb.Vec3.prototype, 'x', 0); + defineAttr(jsb.Vec3.prototype, 'y', 1); + defineAttr(jsb.Vec3.prototype, 'z', 2); + + extendType(jsb.Vec3.prototype, Vec3.prototype, MathType.VEC3); + + defineAttr(jsb.Vec4.prototype, 'x', 0); + defineAttr(jsb.Vec4.prototype, 'y', 1); + defineAttr(jsb.Vec4.prototype, 'z', 2); + defineAttr(jsb.Vec4.prototype, 'w', 3); + + extendType(jsb.Vec4.prototype, Vec4.prototype, MathType.VEC4); + + defineAttr(jsb.Quat.prototype, 'x', 0); + defineAttr(jsb.Quat.prototype, 'y', 1); + defineAttr(jsb.Quat.prototype, 'z', 2); + defineAttr(jsb.Quat.prototype, 'w', 3); + + extendType(jsb.Quat.prototype, Quat.prototype, MathType.QUATERNION); + + Object.setPrototypeOf(jsb.Color.prototype, Color.prototype); + Object.defineProperty(jsb.Color.prototype, 'type', { configurable: true, enumerable: true, writable: false, value: MathType.COLOR }); +} diff --git a/native/cocos/application/CocosApplication.cpp b/native/cocos/application/CocosApplication.cpp index 202d5ddf575..dbe3ff2f115 100644 --- a/native/cocos/application/CocosApplication.cpp +++ b/native/cocos/application/CocosApplication.cpp @@ -97,7 +97,7 @@ int CocosApplication::init() { IScreen *screen = _engine->getInterface(); float pixelRatio = screen->getDevicePixelRatio(); uint32_t windowId = _systemWindow->getWindowId(); - events::Resize::broadcast(logicSize.x * pixelRatio, logicSize.y * pixelRatio, windowId); + events::Resize::broadcast(logicSize.width * pixelRatio, logicSize.height * pixelRatio, windowId); #endif return 0; } diff --git a/native/cocos/bindings/auto/jsb_cocos_auto.cpp b/native/cocos/bindings/auto/jsb_cocos_auto.cpp index fead9beb0cc..44ccfc0e470 100644 --- a/native/cocos/bindings/auto/jsb_cocos_auto.cpp +++ b/native/cocos/bindings/auto/jsb_cocos_auto.cpp @@ -114,116 +114,123 @@ -se::Class* __jsb_cc_CCObject_class = nullptr; -se::Object* __jsb_cc_CCObject_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_CCObject) - -static bool js_cc_CCObject_deferredDestroy_static(se::State& s) +static bool js_cc_clampf(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); + float arg1 ; + float arg2 ; + float arg3 ; + float result; - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + if(argc != 3) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); return false; } - cc::CCObject::deferredDestroy(); - - - return true; -} -SE_BIND_FUNC(js_cc_CCObject_deferredDestroy_static) - -static bool js_cc_CCObject__objFlags_set(se::State& s) -{ - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::CCObject *arg1 = (cc::CCObject *) NULL ; - int32_t temp2 ; + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg1, nullptr); + SE_PRECONDITION2(ok, false, "clampf,1,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "clampf,2,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[2], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "clampf,3,SWIGTYPE_float"); + result = (float)cc::clampf(arg1,arg2,arg3); - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) enum SWIGTYPE (int32_t temp2) - ok &= sevalue_to_native(args[0], &temp2); - SE_PRECONDITION2(ok, false, "CCObject__objFlags_set,2,SWIGTYPE_cc__CCObject__Flags"); - arg1->_objFlags = (cc::CCObject::Flags)temp2; + // out 1 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); return true; } -SE_BIND_PROP_SET(js_cc_CCObject__objFlags_set) +SE_BIND_FUNC(js_cc_clampf) -static bool js_cc_CCObject__objFlags_get(se::State& s) +se::Class* __jsb_cc_Vec2_class = nullptr; +se::Object* __jsb_cc_Vec2_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_Vec2) + +static bool js_new_cc_Vec2__SWIG_0(se::State& s) // NOLINT(readability-identifier-naming) { + // js_overloaded_ctor + const auto& args = s.args(); CC_UNUSED bool ok = true; - cc::CCObject *arg1 = (cc::CCObject *) NULL ; - int32_t temp ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // out 4 - s.rval().setInt32(static_cast(arg1->_objFlags)); + cc::Vec2 *result; + result = (cc::Vec2 *)new cc::Vec2(); + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); return true; } -SE_BIND_PROP_GET(js_cc_CCObject__objFlags_get) -static bool js_cc_CCObject__name_set(se::State& s) + +static bool js_new_cc_Vec2__SWIG_1(se::State& s) // NOLINT(readability-identifier-naming) { - CC_UNUSED bool ok = true; + // js_overloaded_ctor const auto& args = s.args(); - size_t argc = args.size(); - cc::CCObject *arg1 = (cc::CCObject *) NULL ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1->_name, s.thisObject()); - SE_PRECONDITION2(ok, false, "CCObject__name_set,2,SWIGTYPE_ccstd__string"); - + CC_UNUSED bool ok = true; + float arg1 ; + float arg2 ; + cc::Vec2 *result; + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg1, nullptr); + SE_PRECONDITION2(ok, false, "new_Vec2,1,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "new_Vec2,2,SWIGTYPE_float"); + result = (cc::Vec2 *)new cc::Vec2(arg1,arg2); + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); return true; } -SE_BIND_PROP_SET(js_cc_CCObject__name_set) -static bool js_cc_CCObject__name_get(se::State& s) + +static bool js_new_cc_Vec2__SWIG_2(se::State& s) // NOLINT(readability-identifier-naming) { + // js_overloaded_ctor + const auto& args = s.args(); CC_UNUSED bool ok = true; - cc::CCObject *arg1 = (cc::CCObject *) NULL ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(arg1->_name, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "CCObject__name_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->_name, s.thisObject(), s.rval()); - + float *arg1 = (float *) NULL ; + cc::Vec2 *result; + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg1, s.thisObject()); + SE_PRECONDITION2(ok, false, "new_Vec2,1,SWIGTYPE_p_float"); + result = (cc::Vec2 *)new cc::Vec2((float const *)arg1); + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); return true; } -SE_BIND_PROP_GET(js_cc_CCObject__name_get) -static bool js_new_cc_CCObject__SWIG_0(se::State& s) // NOLINT(readability-identifier-naming) + +static bool js_new_cc_Vec2__SWIG_3(se::State& s) // NOLINT(readability-identifier-naming) { // js_overloaded_ctor const auto& args = s.args(); CC_UNUSED bool ok = true; - ccstd::string arg1 ; - cc::CCObject *result; + cc::Vec2 *arg1 = 0 ; + cc::Vec2 *arg2 = 0 ; + cc::Vec2 temp1 ; + cc::Vec2 temp2 ; + cc::Vec2 *result; + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp1, s.thisObject()); + SE_PRECONDITION2(ok, false, "new_Vec2,1,SWIGTYPE_p_cc__Vec2"); + arg1 = &temp1; - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1, s.thisObject()); - SE_PRECONDITION2(ok, false, "new_CCObject,1,SWIGTYPE_ccstd__string"); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[1], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "new_Vec2,2,SWIGTYPE_p_cc__Vec2"); + arg2 = &temp2; - result = (cc::CCObject *)new cc::CCObject(arg1); + result = (cc::Vec2 *)new cc::Vec2((cc::Vec2 const &)*arg1,(cc::Vec2 const &)*arg2); auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); @@ -232,13 +239,20 @@ static bool js_new_cc_CCObject__SWIG_0(se::State& s) // NOLINT(readability-ident } -static bool js_new_cc_CCObject__SWIG_1(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_new_cc_Vec2__SWIG_4(se::State& s) // NOLINT(readability-identifier-naming) { // js_overloaded_ctor const auto& args = s.args(); CC_UNUSED bool ok = true; - cc::CCObject *result; - result = (cc::CCObject *)new cc::CCObject(); + cc::Vec2 *arg1 = 0 ; + cc::Vec2 temp1 ; + cc::Vec2 *result; + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp1, s.thisObject()); + SE_PRECONDITION2(ok, false, "new_Vec2,1,SWIGTYPE_p_cc__Vec2"); + arg1 = &temp1; + + result = (cc::Vec2 *)new cc::Vec2((cc::Vec2 const &)*arg1); auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); @@ -247,7 +261,7 @@ static bool js_new_cc_CCObject__SWIG_1(se::State& s) // NOLINT(readability-ident } -static bool js_new_CCObject(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_new_Vec2(se::State& s) // NOLINT(readability-identifier-naming) { // js_ctor_dispatcher size_t argc = s.args().size(); @@ -255,17 +269,41 @@ static bool js_new_CCObject(se::State& s) // NOLINT(readability-identifier-namin // switch all cases by means of series of if-returns. + // js_ctor_dispatch_case + if(argc == 0) { + ret = js_new_cc_Vec2__SWIG_0(s); + if (ret) { + return ret; + } /* reset exception and return */ + } + + // js_ctor_dispatch_case + if(argc == 2) { + ret = js_new_cc_Vec2__SWIG_1(s); + if (ret) { + return ret; + } /* reset exception and return */ + } + // js_ctor_dispatch_case if(argc == 1) { - ret = js_new_cc_CCObject__SWIG_0(s); + ret = js_new_cc_Vec2__SWIG_2(s); if (ret) { return ret; } /* reset exception and return */ } // js_ctor_dispatch_case - if(argc == 0) { - ret = js_new_cc_CCObject__SWIG_1(s); + if(argc == 2) { + ret = js_new_cc_Vec2__SWIG_3(s); + if (ret) { + return ret; + } /* reset exception and return */ + } + + // js_ctor_dispatch_case + if(argc == 1) { + ret = js_new_cc_Vec2__SWIG_4(s); if (ret) { return ret; } /* reset exception and return */ @@ -273,340 +311,350 @@ static bool js_new_CCObject(se::State& s) // NOLINT(readability-identifier-namin // default: - SE_REPORT_ERROR("Illegal arguments for construction of CCObject"); + SE_REPORT_ERROR("Illegal arguments for construction of Vec2"); return false; } -SE_BIND_CTOR(js_new_CCObject, __jsb_cc_CCObject_class, js_delete_cc_CCObject) +SE_BIND_CTOR(js_new_Vec2, __jsb_cc_Vec2_class, js_delete_cc_Vec2) -static bool js_delete_cc_CCObject(se::State& s) +static bool js_delete_cc_Vec2(se::State& s) { // js_dtoroverride return true; } -SE_BIND_FINALIZE_FUNC(js_delete_cc_CCObject) +SE_BIND_FINALIZE_FUNC(js_delete_cc_Vec2) -static bool js_cc_CCObject__destroy(se::State& s) -{ - // js_function +bool js_register_cc_Vec2(se::Object* obj) { + auto* cls = se::Class::create("Vec2", obj, nullptr, _SE(js_new_Vec2)); + - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::CCObject *arg1 = (cc::CCObject *) NULL ; - bool result; - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (bool)(arg1)->destroy(); - // out 5 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + + cls->defineFinalizeFunction(_SE(js_delete_cc_Vec2)); + + + cls->install(); + JSBClassType::registerClass(cls); + + __jsb_cc_Vec2_proto = cls->getProto(); + __jsb_cc_Vec2_class = cls; + se::ScriptEngine::getInstance()->clearException(); return true; } -SE_BIND_FUNC(js_cc_CCObject__destroy) -static bool js_cc_CCObject__destroyImmediate(se::State& s) -{ - // js_function + +se::Class* __jsb_cc_Color_class = nullptr; +se::Object* __jsb_cc_Color_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_Color) + +bool js_register_cc_Color(se::Object* obj) { + auto* cls = se::Class::create("Color", obj, nullptr, nullptr); + - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::CCObject *arg1 = (cc::CCObject *) NULL ; - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - (arg1)->destroyImmediate(); + + cls->install(); + JSBClassType::registerClass(cls); + + __jsb_cc_Color_proto = cls->getProto(); + __jsb_cc_Color_class = cls; + se::ScriptEngine::getInstance()->clearException(); return true; } -SE_BIND_FUNC(js_cc_CCObject__destroyImmediate) -static bool js_cc_CCObject_toString(se::State& s) + +se::Class* __jsb_cc_Vec3_class = nullptr; +se::Object* __jsb_cc_Vec3_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_Vec3) + +static bool js_new_cc_Vec3__SWIG_0(se::State& s) // NOLINT(readability-identifier-naming) { - // js_function - - CC_UNUSED bool ok = true; + // js_overloaded_ctor const auto& args = s.args(); - size_t argc = args.size(); - cc::CCObject *arg1 = (cc::CCObject *) NULL ; - ccstd::string result; - - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = ((cc::CCObject const *)arg1)->toString(); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "CCObject_toString, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - + CC_UNUSED bool ok = true; + cc::Vec3 *result; + result = (cc::Vec3 *)new cc::Vec3(); + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); return true; } -SE_BIND_FUNC(js_cc_CCObject_toString) -static bool js_cc_CCObject_name_set(se::State& s) + +static bool js_new_cc_Vec3__SWIG_1(se::State& s) // NOLINT(readability-identifier-naming) { - CC_UNUSED bool ok = true; + // js_overloaded_ctor const auto& args = s.args(); - size_t argc = args.size(); - cc::CCObject *arg1 = (cc::CCObject *) NULL ; - ccstd::string *arg2 = 0 ; - ccstd::string temp2 ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "CCObject_name_set,2,SWIGTYPE_p_ccstd__string"); - arg2 = &temp2; - - cc_CCObject_name_set(arg1,*arg2); + CC_UNUSED bool ok = true; + float arg1 ; + float arg2 ; + float arg3 ; + cc::Vec3 *result; + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg1, nullptr); + SE_PRECONDITION2(ok, false, "new_Vec3,1,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "new_Vec3,2,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[2], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "new_Vec3,3,SWIGTYPE_float"); + result = (cc::Vec3 *)new cc::Vec3(arg1,arg2,arg3); + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); return true; } -SE_BIND_PROP_SET(js_cc_CCObject_name_set) -static bool js_cc_CCObject_name_get(se::State& s) + +static bool js_new_cc_Vec3__SWIG_2(se::State& s) // NOLINT(readability-identifier-naming) { + // js_overloaded_ctor + const auto& args = s.args(); CC_UNUSED bool ok = true; - cc::CCObject *arg1 = (cc::CCObject *) NULL ; - ccstd::string *result = 0 ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (ccstd::string *) &cc_CCObject_name_get(arg1); - // %typemap(out) SWIGTYPE& - ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "CCObject_name_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); + float *arg1 = (float *) NULL ; + cc::Vec3 *result; + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg1, s.thisObject()); + SE_PRECONDITION2(ok, false, "new_Vec3,1,SWIGTYPE_p_float"); + result = (cc::Vec3 *)new cc::Vec3((float const *)arg1); + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); return true; } -SE_BIND_PROP_GET(js_cc_CCObject_name_get) -static bool js_cc_CCObject_hideFlags_set(se::State& s) + +static bool js_new_cc_Vec3__SWIG_3(se::State& s) // NOLINT(readability-identifier-naming) { - CC_UNUSED bool ok = true; + // js_overloaded_ctor const auto& args = s.args(); - size_t argc = args.size(); - cc::CCObject *arg1 = (cc::CCObject *) NULL ; - cc::CCObject::Flags arg2 ; - int32_t temp2 ; + CC_UNUSED bool ok = true; + cc::Vec3 *arg1 = 0 ; + cc::Vec3 *arg2 = 0 ; + cc::Vec3 temp1 ; + cc::Vec3 temp2 ; + cc::Vec3 *result; + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp1, s.thisObject()); + SE_PRECONDITION2(ok, false, "new_Vec3,1,SWIGTYPE_p_cc__Vec3"); + arg1 = &temp1; - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) enum SWIGTYPE (int32_t temp2) - ok &= sevalue_to_native(args[0], &temp2); - SE_PRECONDITION2(ok, false, "CCObject_hideFlags_set,2,SWIGTYPE_cc__CCObject__Flags"); - arg2 = (cc::CCObject::Flags)temp2; - cc_CCObject_hideFlags_set(arg1,arg2); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[1], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "new_Vec3,2,SWIGTYPE_p_cc__Vec3"); + arg2 = &temp2; + + result = (cc::Vec3 *)new cc::Vec3((cc::Vec3 const &)*arg1,(cc::Vec3 const &)*arg2); + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); return true; } -SE_BIND_PROP_SET(js_cc_CCObject_hideFlags_set) -static bool js_cc_CCObject_hideFlags_get(se::State& s) + +static bool js_new_cc_Vec3__SWIG_4(se::State& s) // NOLINT(readability-identifier-naming) { + // js_overloaded_ctor + const auto& args = s.args(); CC_UNUSED bool ok = true; - cc::CCObject *arg1 = (cc::CCObject *) NULL ; - cc::CCObject::Flags result; - int32_t temp ; + cc::Vec3 *arg1 = 0 ; + cc::Vec3 temp1 ; + cc::Vec3 *result; + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp1, s.thisObject()); + SE_PRECONDITION2(ok, false, "new_Vec3,1,SWIGTYPE_p_cc__Vec3"); + arg1 = &temp1; - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (cc::CCObject::Flags)cc_CCObject_hideFlags_get(arg1); - // out 4 - s.rval().setInt32(static_cast(result)); + result = (cc::Vec3 *)new cc::Vec3((cc::Vec3 const &)*arg1); + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); return true; } -SE_BIND_PROP_GET(js_cc_CCObject_hideFlags_get) -static bool js_cc_CCObject_replicated_set(se::State& s) + +static bool js_new_Vec3(se::State& s) // NOLINT(readability-identifier-naming) { - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::CCObject *arg1 = (cc::CCObject *) NULL ; - bool arg2 ; + // js_ctor_dispatcher + size_t argc = s.args().size(); + bool ret = false; - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) bool - ok &= sevalue_to_native(args[0], &arg2); - SE_PRECONDITION2(ok, false, "CCObject_replicated_set,2,SWIGTYPE_bool"); - cc_CCObject_replicated_set(arg1,arg2); + // switch all cases by means of series of if-returns. + // js_ctor_dispatch_case + if(argc == 0) { + ret = js_new_cc_Vec3__SWIG_0(s); + if (ret) { + return ret; + } /* reset exception and return */ + } - return true; -} -SE_BIND_PROP_SET(js_cc_CCObject_replicated_set) - -static bool js_cc_CCObject_replicated_get(se::State& s) -{ - CC_UNUSED bool ok = true; - cc::CCObject *arg1 = (cc::CCObject *) NULL ; - bool result; + // js_ctor_dispatch_case + if(argc == 3) { + ret = js_new_cc_Vec3__SWIG_1(s); + if (ret) { + return ret; + } /* reset exception and return */ + } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (bool)cc_CCObject_replicated_get(arg1); - // out 5 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + // js_ctor_dispatch_case + if(argc == 1) { + ret = js_new_cc_Vec3__SWIG_2(s); + if (ret) { + return ret; + } /* reset exception and return */ + } + // js_ctor_dispatch_case + if(argc == 2) { + ret = js_new_cc_Vec3__SWIG_3(s); + if (ret) { + return ret; + } /* reset exception and return */ + } - return true; + // js_ctor_dispatch_case + if(argc == 1) { + ret = js_new_cc_Vec3__SWIG_4(s); + if (ret) { + return ret; + } /* reset exception and return */ + } + + + // default: + SE_REPORT_ERROR("Illegal arguments for construction of Vec3"); + return false; } -SE_BIND_PROP_GET(js_cc_CCObject_replicated_get) +SE_BIND_CTOR(js_new_Vec3, __jsb_cc_Vec3_class, js_delete_cc_Vec3) -static bool js_cc_CCObject_isValid_get(se::State& s) +static bool js_delete_cc_Vec3(se::State& s) { - CC_UNUSED bool ok = true; - cc::CCObject *arg1 = (cc::CCObject *) NULL ; - bool result; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (bool)cc_CCObject_isValid_get(arg1); - // out 5 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - - + // js_dtoroverride return true; } -SE_BIND_PROP_GET(js_cc_CCObject_isValid_get) +SE_BIND_FINALIZE_FUNC(js_delete_cc_Vec3) -bool js_register_cc_CCObject(se::Object* obj) { - auto* cls = se::Class::create("CCObject", obj, nullptr, _SE(js_new_CCObject)); +bool js_register_cc_Vec3(se::Object* obj) { + auto* cls = se::Class::create("Vec3", obj, nullptr, _SE(js_new_Vec3)); - cls->defineProperty("_objFlags", _SE(js_cc_CCObject__objFlags_get), _SE(js_cc_CCObject__objFlags_set)); - cls->defineProperty("_name", _SE(js_cc_CCObject__name_get), _SE(js_cc_CCObject__name_set)); - cls->defineProperty("name", _SE(js_cc_CCObject_name_get), _SE(js_cc_CCObject_name_set)); - cls->defineProperty("hideFlags", _SE(js_cc_CCObject_hideFlags_get), _SE(js_cc_CCObject_hideFlags_set)); - cls->defineProperty("replicated", _SE(js_cc_CCObject_replicated_get), _SE(js_cc_CCObject_replicated_set)); - cls->defineProperty("isValid", _SE(js_cc_CCObject_isValid_get), nullptr); - cls->defineFunction("_destroy", _SE(js_cc_CCObject__destroy)); - cls->defineFunction("_destroyImmediate", _SE(js_cc_CCObject__destroyImmediate)); - cls->defineFunction("toString", _SE(js_cc_CCObject_toString)); - cls->defineStaticFunction("deferredDestroy", _SE(js_cc_CCObject_deferredDestroy_static)); - cls->defineFinalizeFunction(_SE(js_delete_cc_CCObject)); + cls->defineFinalizeFunction(_SE(js_delete_cc_Vec3)); cls->install(); - JSBClassType::registerClass(cls); + JSBClassType::registerClass(cls); - __jsb_cc_CCObject_proto = cls->getProto(); - __jsb_cc_CCObject_class = cls; + __jsb_cc_Vec3_proto = cls->getProto(); + __jsb_cc_Vec3_class = cls; se::ScriptEngine::getInstance()->clearException(); return true; } -static bool js_cc_isObjectValid__SWIG_0(se::State& s) +se::Class* __jsb_cc_Vec4_class = nullptr; +se::Object* __jsb_cc_Vec4_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_Vec4) + +static bool js_new_cc_Vec4__SWIG_0(se::State& s) // NOLINT(readability-identifier-naming) { - // js_overloaded_function - - CC_UNUSED bool ok = true; + // js_overloaded_ctor const auto& args = s.args(); - cc::CCObject *arg1 = (cc::CCObject *) NULL ; - bool arg2 ; - bool result; - - // %typemap(in) SWIGTYPE* - ok &= sevalue_to_native(args[0], &arg1, s.thisObject()); - SE_PRECONDITION2(ok, false, "isObjectValid,1,SWIGTYPE_p_cc__CCObject"); - // %typemap(in) bool - ok &= sevalue_to_native(args[1], &arg2); - SE_PRECONDITION2(ok, false, "isObjectValid,2,SWIGTYPE_bool"); - result = (bool)cc::isObjectValid(arg1,arg2); - // out 5 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + CC_UNUSED bool ok = true; + cc::Vec4 *result; + result = (cc::Vec4 *)new cc::Vec4(); + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); return true; } -static bool js_cc_isObjectValid__SWIG_1(se::State& s) + +static bool js_new_cc_Vec4__SWIG_1(se::State& s) // NOLINT(readability-identifier-naming) { - // js_overloaded_function - - CC_UNUSED bool ok = true; + // js_overloaded_ctor const auto& args = s.args(); - cc::CCObject *arg1 = (cc::CCObject *) NULL ; - bool result; - - // %typemap(in) SWIGTYPE* - ok &= sevalue_to_native(args[0], &arg1, s.thisObject()); - SE_PRECONDITION2(ok, false, "isObjectValid,1,SWIGTYPE_p_cc__CCObject"); - result = (bool)cc::isObjectValid(arg1); - // out 5 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - - + CC_UNUSED bool ok = true; + float arg1 ; + float arg2 ; + float arg3 ; + float arg4 ; + cc::Vec4 *result; + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg1, nullptr); + SE_PRECONDITION2(ok, false, "new_Vec4,1,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "new_Vec4,2,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[2], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "new_Vec4,3,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[3], &arg4, nullptr); + SE_PRECONDITION2(ok, false, "new_Vec4,4,SWIGTYPE_float"); + result = (cc::Vec4 *)new cc::Vec4(arg1,arg2,arg3,arg4); + + + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); return true; } -static bool js_cc_isObjectValid(se::State& s) + +static bool js_new_cc_Vec4__SWIG_2(se::State& s) // NOLINT(readability-identifier-naming) { - // js_function_dispatcher - CC_UNUSED bool ok = true; + // js_overloaded_ctor const auto& args = s.args(); - size_t argc = args.size(); + CC_UNUSED bool ok = true; + float *arg1 = (float *) NULL ; + cc::Vec4 *result; + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg1, s.thisObject()); + SE_PRECONDITION2(ok, false, "new_Vec4,1,SWIGTYPE_p_float"); + result = (cc::Vec4 *)new cc::Vec4((float const *)arg1); - // js_function_dispatch_case - if (argc == 2) { - ok = js_cc_isObjectValid__SWIG_0(s); - if (ok) { - return true; - } - } // js_function_dispatch_case - if (argc == 1) { - ok = js_cc_isObjectValid__SWIG_1(s); - if (ok) { - return true; - } - } - SE_REPORT_ERROR("wrong number of arguments: %d", (int)argc); - return false; + + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); + return true; } -SE_BIND_FUNC(js_cc_isObjectValid) -se::Class* __jsb_cc_JSBNativeDataHolder_class = nullptr; -se::Object* __jsb_cc_JSBNativeDataHolder_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_JSBNativeDataHolder) -static bool js_new_cc_JSBNativeDataHolder__SWIG_0(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_new_cc_Vec4__SWIG_3(se::State& s) // NOLINT(readability-identifier-naming) { // js_overloaded_ctor const auto& args = s.args(); CC_UNUSED bool ok = true; - cc::JSBNativeDataHolder *result; - result = (cc::JSBNativeDataHolder *)new cc::JSBNativeDataHolder(); + cc::Vec4 *arg1 = 0 ; + cc::Vec4 *arg2 = 0 ; + cc::Vec4 temp1 ; + cc::Vec4 temp2 ; + cc::Vec4 *result; + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp1, s.thisObject()); + SE_PRECONDITION2(ok, false, "new_Vec4,1,SWIGTYPE_p_cc__Vec4"); + arg1 = &temp1; + + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[1], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "new_Vec4,2,SWIGTYPE_p_cc__Vec4"); + arg2 = &temp2; + + result = (cc::Vec4 *)new cc::Vec4((cc::Vec4 const &)*arg1,(cc::Vec4 const &)*arg2); auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); @@ -615,17 +663,20 @@ static bool js_new_cc_JSBNativeDataHolder__SWIG_0(se::State& s) // NOLINT(readab } -static bool js_new_cc_JSBNativeDataHolder__SWIG_1(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_new_cc_Vec4__SWIG_4(se::State& s) // NOLINT(readability-identifier-naming) { // js_overloaded_ctor const auto& args = s.args(); CC_UNUSED bool ok = true; - uint8_t *arg1 = (uint8_t *) NULL ; - cc::JSBNativeDataHolder *result; - // %typemap(in) SWIGTYPE* - ok &= sevalue_to_native(args[0], &arg1, s.thisObject()); - SE_PRECONDITION2(ok, false, "new_JSBNativeDataHolder,1,SWIGTYPE_p_uint8_t"); - result = (cc::JSBNativeDataHolder *)new cc::JSBNativeDataHolder(arg1); + cc::Vec4 *arg1 = 0 ; + cc::Vec4 temp1 ; + cc::Vec4 *result; + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp1, s.thisObject()); + SE_PRECONDITION2(ok, false, "new_Vec4,1,SWIGTYPE_p_cc__Vec4"); + arg1 = &temp1; + + result = (cc::Vec4 *)new cc::Vec4((cc::Vec4 const &)*arg1); auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); @@ -634,7 +685,7 @@ static bool js_new_cc_JSBNativeDataHolder__SWIG_1(se::State& s) // NOLINT(readab } -static bool js_new_JSBNativeDataHolder(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_new_Vec4(se::State& s) // NOLINT(readability-identifier-naming) { // js_ctor_dispatcher size_t argc = s.args().size(); @@ -644,7 +695,15 @@ static bool js_new_JSBNativeDataHolder(se::State& s) // NOLINT(readability-ident // js_ctor_dispatch_case if(argc == 0) { - ret = js_new_cc_JSBNativeDataHolder__SWIG_0(s); + ret = js_new_cc_Vec4__SWIG_0(s); + if (ret) { + return ret; + } /* reset exception and return */ + } + + // js_ctor_dispatch_case + if(argc == 4) { + ret = js_new_cc_Vec4__SWIG_1(s); if (ret) { return ret; } /* reset exception and return */ @@ -652,7 +711,23 @@ static bool js_new_JSBNativeDataHolder(se::State& s) // NOLINT(readability-ident // js_ctor_dispatch_case if(argc == 1) { - ret = js_new_cc_JSBNativeDataHolder__SWIG_1(s); + ret = js_new_cc_Vec4__SWIG_2(s); + if (ret) { + return ret; + } /* reset exception and return */ + } + + // js_ctor_dispatch_case + if(argc == 2) { + ret = js_new_cc_Vec4__SWIG_3(s); + if (ret) { + return ret; + } /* reset exception and return */ + } + + // js_ctor_dispatch_case + if(argc == 1) { + ret = js_new_cc_Vec4__SWIG_4(s); if (ret) { return ret; } /* reset exception and return */ @@ -660,5072 +735,2908 @@ static bool js_new_JSBNativeDataHolder(se::State& s) // NOLINT(readability-ident // default: - SE_REPORT_ERROR("Illegal arguments for construction of JSBNativeDataHolder"); + SE_REPORT_ERROR("Illegal arguments for construction of Vec4"); return false; } -SE_BIND_CTOR(js_new_JSBNativeDataHolder, __jsb_cc_JSBNativeDataHolder_class, js_delete_cc_JSBNativeDataHolder) +SE_BIND_CTOR(js_new_Vec4, __jsb_cc_Vec4_class, js_delete_cc_Vec4) -static bool js_delete_cc_JSBNativeDataHolder(se::State& s) +static bool js_delete_cc_Vec4(se::State& s) { // js_dtoroverride return true; } -SE_BIND_FINALIZE_FUNC(js_delete_cc_JSBNativeDataHolder) - -static bool js_cc_JSBNativeDataHolder_destroy(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::JSBNativeDataHolder *arg1 = (cc::JSBNativeDataHolder *) NULL ; - - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - (arg1)->destroy(); - - - return true; -} -SE_BIND_FUNC(js_cc_JSBNativeDataHolder_destroy) +SE_BIND_FINALIZE_FUNC(js_delete_cc_Vec4) -bool js_register_cc_JSBNativeDataHolder(se::Object* obj) { - auto* cls = se::Class::create("JSBNativeDataHolder", obj, nullptr, _SE(js_new_JSBNativeDataHolder)); +bool js_register_cc_Vec4(se::Object* obj) { + auto* cls = se::Class::create("Vec4", obj, nullptr, _SE(js_new_Vec4)); - cls->defineFunction("destroy", _SE(js_cc_JSBNativeDataHolder_destroy)); - cls->defineFinalizeFunction(_SE(js_delete_cc_JSBNativeDataHolder)); + cls->defineFinalizeFunction(_SE(js_delete_cc_Vec4)); cls->install(); - JSBClassType::registerClass(cls); + JSBClassType::registerClass(cls); - __jsb_cc_JSBNativeDataHolder_proto = cls->getProto(); - __jsb_cc_JSBNativeDataHolder_class = cls; + __jsb_cc_Vec4_proto = cls->getProto(); + __jsb_cc_Vec4_class = cls; se::ScriptEngine::getInstance()->clearException(); return true; } -se::Class* __jsb_cc_ICanvasGradient_class = nullptr; -se::Object* __jsb_cc_ICanvasGradient_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_ICanvasGradient) +se::Class* __jsb_cc_Mat3_class = nullptr; +se::Object* __jsb_cc_Mat3_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_Mat3) -static bool js_delete_cc_ICanvasGradient(se::State& s) +static bool js_new_cc_Mat3__SWIG_0(se::State& s) // NOLINT(readability-identifier-naming) { - // js_dtoroverride + // js_overloaded_ctor + const auto& args = s.args(); + CC_UNUSED bool ok = true; + cc::Mat3 *result; + result = (cc::Mat3 *)new cc::Mat3(); + + + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); return true; } -SE_BIND_FINALIZE_FUNC(js_delete_cc_ICanvasGradient) -static bool js_cc_ICanvasGradient_addColorStop(se::State& s) + +static bool js_new_cc_Mat3__SWIG_1(se::State& s) // NOLINT(readability-identifier-naming) { - // js_function - - CC_UNUSED bool ok = true; + // js_overloaded_ctor const auto& args = s.args(); - size_t argc = args.size(); - cc::ICanvasGradient *arg1 = (cc::ICanvasGradient *) NULL ; + CC_UNUSED bool ok = true; + float arg1 ; float arg2 ; - ccstd::string *arg3 = 0 ; - ccstd::string temp3 ; - - if(argc != 2) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + float arg3 ; + float arg4 ; + float arg5 ; + float arg6 ; + float arg7 ; + float arg8 ; + float arg9 ; + cc::Mat3 *result; // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "ICanvasGradient_addColorStop,2,SWIGTYPE_float"); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[1], &temp3, s.thisObject()); - SE_PRECONDITION2(ok, false, "ICanvasGradient_addColorStop,3,SWIGTYPE_p_ccstd__string"); - arg3 = &temp3; + ok &= sevalue_to_native(args[0], &arg1, nullptr); + SE_PRECONDITION2(ok, false, "new_Mat3,1,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "new_Mat3,2,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[2], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "new_Mat3,3,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[3], &arg4, nullptr); + SE_PRECONDITION2(ok, false, "new_Mat3,4,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[4], &arg5, nullptr); + SE_PRECONDITION2(ok, false, "new_Mat3,5,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[5], &arg6, nullptr); + SE_PRECONDITION2(ok, false, "new_Mat3,6,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[6], &arg7, nullptr); + SE_PRECONDITION2(ok, false, "new_Mat3,7,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[7], &arg8, nullptr); + SE_PRECONDITION2(ok, false, "new_Mat3,8,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[8], &arg9, nullptr); + SE_PRECONDITION2(ok, false, "new_Mat3,9,SWIGTYPE_float"); + result = (cc::Mat3 *)new cc::Mat3(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9); - (arg1)->addColorStop(arg2,(ccstd::string const &)*arg3); + + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); + return true; +} + + +static bool js_new_cc_Mat3__SWIG_2(se::State& s) // NOLINT(readability-identifier-naming) +{ + // js_overloaded_ctor + const auto& args = s.args(); + CC_UNUSED bool ok = true; + float *arg1 = (float *) NULL ; + cc::Mat3 *result; + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg1, s.thisObject()); + SE_PRECONDITION2(ok, false, "new_Mat3,1,SWIGTYPE_p_float"); + result = (cc::Mat3 *)new cc::Mat3((float const *)arg1); + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); return true; } -SE_BIND_FUNC(js_cc_ICanvasGradient_addColorStop) -bool js_register_cc_ICanvasGradient(se::Object* obj) { - auto* cls = se::Class::create("ICanvasGradient", obj, nullptr, nullptr); + +static bool js_new_cc_Mat3__SWIG_3(se::State& s) // NOLINT(readability-identifier-naming) +{ + // js_overloaded_ctor + const auto& args = s.args(); + CC_UNUSED bool ok = true; + cc::Mat3 *arg1 = 0 ; + cc::Mat3 temp1 ; + cc::Mat3 *result; + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp1, s.thisObject()); + SE_PRECONDITION2(ok, false, "new_Mat3,1,SWIGTYPE_p_cc__Mat3"); + arg1 = &temp1; + result = (cc::Mat3 *)new cc::Mat3((cc::Mat3 const &)*arg1); - cls->defineFunction("addColorStop", _SE(js_cc_ICanvasGradient_addColorStop)); + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); + return true; +} + + +static bool js_new_cc_Mat3__SWIG_4(se::State& s) // NOLINT(readability-identifier-naming) +{ + // js_overloaded_ctor + const auto& args = s.args(); + CC_UNUSED bool ok = true; + cc::Mat4 *arg1 = 0 ; + cc::Mat4 temp1 ; + cc::Mat3 *result; + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp1, s.thisObject()); + SE_PRECONDITION2(ok, false, "new_Mat3,1,SWIGTYPE_p_cc__Mat4"); + arg1 = &temp1; + result = (cc::Mat3 *)new cc::Mat3((cc::Mat4 const &)*arg1); - cls->defineFinalizeFunction(_SE(js_delete_cc_ICanvasGradient)); + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); + return true; +} + + +static bool js_new_cc_Mat3__SWIG_5(se::State& s) // NOLINT(readability-identifier-naming) +{ + // js_overloaded_ctor + const auto& args = s.args(); + CC_UNUSED bool ok = true; + cc::Quaternion *arg1 = 0 ; + cc::Quaternion temp1 ; + cc::Mat3 *result; + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp1, s.thisObject()); + SE_PRECONDITION2(ok, false, "new_Mat3,1,SWIGTYPE_p_cc__Quaternion"); + arg1 = &temp1; + result = (cc::Mat3 *)new cc::Mat3((cc::Quaternion const &)*arg1); - cls->install(); - JSBClassType::registerClass(cls); - __jsb_cc_ICanvasGradient_proto = cls->getProto(); - __jsb_cc_ICanvasGradient_class = cls; - se::ScriptEngine::getInstance()->clearException(); + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); return true; } -se::Class* __jsb_cc_ICanvasRenderingContext2D_class = nullptr; -se::Object* __jsb_cc_ICanvasRenderingContext2D_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_ICanvasRenderingContext2D) - -static bool js_cc_ICanvasRenderingContext2D_rect(se::State& s) +static bool js_new_Mat3(se::State& s) // NOLINT(readability-identifier-naming) { - // js_function + // js_ctor_dispatcher + size_t argc = s.args().size(); + bool ret = false; - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; - float arg2 ; - float arg3 ; - float arg4 ; - float arg5 ; + // switch all cases by means of series of if-returns. - if(argc != 4) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 4); - return false; + // js_ctor_dispatch_case + if(argc == 0) { + ret = js_new_cc_Mat3__SWIG_0(s); + if (ret) { + return ret; + } /* reset exception and return */ } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_rect,2,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[1], &arg3, nullptr); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_rect,3,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[2], &arg4, nullptr); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_rect,4,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[3], &arg5, nullptr); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_rect,5,SWIGTYPE_float"); - (arg1)->rect(arg2,arg3,arg4,arg5); + // js_ctor_dispatch_case + if(argc == 9) { + ret = js_new_cc_Mat3__SWIG_1(s); + if (ret) { + return ret; + } /* reset exception and return */ + } - return true; -} -SE_BIND_FUNC(js_cc_ICanvasRenderingContext2D_rect) - -static bool js_cc_ICanvasRenderingContext2D_clearRect(se::State& s) -{ - // js_function + // js_ctor_dispatch_case + if(argc == 1) { + ret = js_new_cc_Mat3__SWIG_2(s); + if (ret) { + return ret; + } /* reset exception and return */ + } - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; - float arg2 ; - float arg3 ; - float arg4 ; - float arg5 ; + // js_ctor_dispatch_case + if(argc == 1) { + ret = js_new_cc_Mat3__SWIG_3(s); + if (ret) { + return ret; + } /* reset exception and return */ + } - if(argc != 4) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 4); - return false; + // js_ctor_dispatch_case + if(argc == 1) { + ret = js_new_cc_Mat3__SWIG_4(s); + if (ret) { + return ret; + } /* reset exception and return */ + } + + // js_ctor_dispatch_case + if(argc == 1) { + ret = js_new_cc_Mat3__SWIG_5(s); + if (ret) { + return ret; + } /* reset exception and return */ } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_clearRect,2,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[1], &arg3, nullptr); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_clearRect,3,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[2], &arg4, nullptr); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_clearRect,4,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[3], &arg5, nullptr); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_clearRect,5,SWIGTYPE_float"); - (arg1)->clearRect(arg2,arg3,arg4,arg5); - return true; + // default: + SE_REPORT_ERROR("Illegal arguments for construction of Mat3"); + return false; } -SE_BIND_FUNC(js_cc_ICanvasRenderingContext2D_clearRect) +SE_BIND_CTOR(js_new_Mat3, __jsb_cc_Mat3_class, js_delete_cc_Mat3) -static bool js_cc_ICanvasRenderingContext2D_createLinearGradient(se::State& s) +static bool js_delete_cc_Mat3(se::State& s) { - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; - float arg2 ; - float arg3 ; - float arg4 ; - float arg5 ; - cc::ICanvasGradient *result = 0 ; - - if(argc != 4) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 4); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_createLinearGradient,2,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[1], &arg3, nullptr); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_createLinearGradient,3,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[2], &arg4, nullptr); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_createLinearGradient,4,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[3], &arg5, nullptr); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_createLinearGradient,5,SWIGTYPE_float"); - result = (cc::ICanvasGradient *)(arg1)->createLinearGradient(arg2,arg3,arg4,arg5); - // %typemap(out) SWIGTYPE* - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_createLinearGradient, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - - + // js_dtoroverride return true; } -SE_BIND_FUNC(js_cc_ICanvasRenderingContext2D_createLinearGradient) +SE_BIND_FINALIZE_FUNC(js_delete_cc_Mat3) -static bool js_cc_ICanvasRenderingContext2D_save(se::State& s) -{ - // js_function +bool js_register_cc_Mat3(se::Object* obj) { + auto* cls = se::Class::create("Mat3", obj, nullptr, _SE(js_new_Mat3)); - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - (arg1)->save(); - return true; -} -SE_BIND_FUNC(js_cc_ICanvasRenderingContext2D_save) - -static bool js_cc_ICanvasRenderingContext2D_beginPath(se::State& s) -{ - // js_function - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - (arg1)->beginPath(); + cls->defineFinalizeFunction(_SE(js_delete_cc_Mat3)); + cls->install(); + JSBClassType::registerClass(cls); + + __jsb_cc_Mat3_proto = cls->getProto(); + __jsb_cc_Mat3_class = cls; + se::ScriptEngine::getInstance()->clearException(); return true; } -SE_BIND_FUNC(js_cc_ICanvasRenderingContext2D_beginPath) -static bool js_cc_ICanvasRenderingContext2D_closePath(se::State& s) + +se::Class* __jsb_cc_Mat4_class = nullptr; +se::Object* __jsb_cc_Mat4_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_Mat4) + +static bool js_new_cc_Mat4__SWIG_0(se::State& s) // NOLINT(readability-identifier-naming) { - // js_function - - CC_UNUSED bool ok = true; + // js_overloaded_ctor const auto& args = s.args(); - size_t argc = args.size(); - cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; - - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - (arg1)->closePath(); + CC_UNUSED bool ok = true; + cc::Mat4 *result; + result = (cc::Mat4 *)new cc::Mat4(); + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); return true; } -SE_BIND_FUNC(js_cc_ICanvasRenderingContext2D_closePath) -static bool js_cc_ICanvasRenderingContext2D_moveTo(se::State& s) + +static bool js_new_cc_Mat4__SWIG_1(se::State& s) // NOLINT(readability-identifier-naming) { - // js_function - - CC_UNUSED bool ok = true; + // js_overloaded_ctor const auto& args = s.args(); - size_t argc = args.size(); - cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; + CC_UNUSED bool ok = true; + float arg1 ; float arg2 ; float arg3 ; - - if(argc != 2) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + float arg4 ; + float arg5 ; + float arg6 ; + float arg7 ; + float arg8 ; + float arg9 ; + float arg10 ; + float arg11 ; + float arg12 ; + float arg13 ; + float arg14 ; + float arg15 ; + float arg16 ; + cc::Mat4 *result; // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_moveTo,2,SWIGTYPE_float"); + ok &= sevalue_to_native(args[0], &arg1, nullptr); + SE_PRECONDITION2(ok, false, "new_Mat4,1,SWIGTYPE_float"); // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[1], &arg3, nullptr); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_moveTo,3,SWIGTYPE_float"); - (arg1)->moveTo(arg2,arg3); + ok &= sevalue_to_native(args[1], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "new_Mat4,2,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[2], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "new_Mat4,3,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[3], &arg4, nullptr); + SE_PRECONDITION2(ok, false, "new_Mat4,4,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[4], &arg5, nullptr); + SE_PRECONDITION2(ok, false, "new_Mat4,5,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[5], &arg6, nullptr); + SE_PRECONDITION2(ok, false, "new_Mat4,6,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[6], &arg7, nullptr); + SE_PRECONDITION2(ok, false, "new_Mat4,7,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[7], &arg8, nullptr); + SE_PRECONDITION2(ok, false, "new_Mat4,8,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[8], &arg9, nullptr); + SE_PRECONDITION2(ok, false, "new_Mat4,9,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[9], &arg10, nullptr); + SE_PRECONDITION2(ok, false, "new_Mat4,10,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[10], &arg11, nullptr); + SE_PRECONDITION2(ok, false, "new_Mat4,11,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[11], &arg12, nullptr); + SE_PRECONDITION2(ok, false, "new_Mat4,12,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[12], &arg13, nullptr); + SE_PRECONDITION2(ok, false, "new_Mat4,13,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[13], &arg14, nullptr); + SE_PRECONDITION2(ok, false, "new_Mat4,14,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[14], &arg15, nullptr); + SE_PRECONDITION2(ok, false, "new_Mat4,15,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[15], &arg16, nullptr); + SE_PRECONDITION2(ok, false, "new_Mat4,16,SWIGTYPE_float"); + result = (cc::Mat4 *)new cc::Mat4(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11,arg12,arg13,arg14,arg15,arg16); + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); return true; } -SE_BIND_FUNC(js_cc_ICanvasRenderingContext2D_moveTo) - -static bool js_cc_ICanvasRenderingContext2D_lineTo(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; - float arg2 ; - float arg3 ; - - if(argc != 2) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_lineTo,2,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[1], &arg3, nullptr); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_lineTo,3,SWIGTYPE_float"); - (arg1)->lineTo(arg2,arg3); - - - return true; -} -SE_BIND_FUNC(js_cc_ICanvasRenderingContext2D_lineTo) - -static bool js_cc_ICanvasRenderingContext2D_fill(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; - - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - (arg1)->fill(); - - - return true; -} -SE_BIND_FUNC(js_cc_ICanvasRenderingContext2D_fill) - -static bool js_cc_ICanvasRenderingContext2D_stroke(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; - - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - (arg1)->stroke(); - - - return true; -} -SE_BIND_FUNC(js_cc_ICanvasRenderingContext2D_stroke) - -static bool js_cc_ICanvasRenderingContext2D_restore(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; - - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - (arg1)->restore(); - - - return true; -} -SE_BIND_FUNC(js_cc_ICanvasRenderingContext2D_restore) - -static bool js_cc_ICanvasRenderingContext2D_setShadowBlur(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; - float arg2 ; - - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_setShadowBlur,2,SWIGTYPE_float"); - (arg1)->setShadowBlur(arg2); - - - return true; -} -SE_BIND_FUNC(js_cc_ICanvasRenderingContext2D_setShadowBlur) - -static bool js_cc_ICanvasRenderingContext2D_setShadowColor(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; - ccstd::string *arg2 = 0 ; - ccstd::string temp2 ; - - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_setShadowColor,2,SWIGTYPE_p_ccstd__string"); - arg2 = &temp2; - - (arg1)->setShadowColor((ccstd::string const &)*arg2); - - - return true; -} -SE_BIND_FUNC(js_cc_ICanvasRenderingContext2D_setShadowColor) - -static bool js_cc_ICanvasRenderingContext2D_setShadowOffsetX(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; - float arg2 ; - - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_setShadowOffsetX,2,SWIGTYPE_float"); - (arg1)->setShadowOffsetX(arg2); - - - return true; -} -SE_BIND_FUNC(js_cc_ICanvasRenderingContext2D_setShadowOffsetX) - -static bool js_cc_ICanvasRenderingContext2D_setShadowOffsetY(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; - float arg2 ; - - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_setShadowOffsetY,2,SWIGTYPE_float"); - (arg1)->setShadowOffsetY(arg2); - - - return true; -} -SE_BIND_FUNC(js_cc_ICanvasRenderingContext2D_setShadowOffsetY) - -static bool js_cc_ICanvasRenderingContext2D_fillImageData(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; - cc::Data *arg2 = 0 ; - float arg3 ; - float arg4 ; - float arg5 ; - float arg6 ; - cc::Data temp2 ; - - if(argc != 5) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 5); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_fillImageData,2,SWIGTYPE_p_cc__Data"); - arg2 = &temp2; - - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[1], &arg3, nullptr); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_fillImageData,3,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[2], &arg4, nullptr); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_fillImageData,4,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[3], &arg5, nullptr); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_fillImageData,5,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[4], &arg6, nullptr); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_fillImageData,6,SWIGTYPE_float"); - (arg1)->fillImageData((cc::Data const &)*arg2,arg3,arg4,arg5,arg6); - - - return true; -} -SE_BIND_FUNC(js_cc_ICanvasRenderingContext2D_fillImageData) - -static bool js_cc_ICanvasRenderingContext2D_translate(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; - float arg2 ; - float arg3 ; - - if(argc != 2) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_translate,2,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[1], &arg3, nullptr); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_translate,3,SWIGTYPE_float"); - (arg1)->translate(arg2,arg3); - - - return true; -} -SE_BIND_FUNC(js_cc_ICanvasRenderingContext2D_translate) - -static bool js_cc_ICanvasRenderingContext2D_scale(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; - float arg2 ; - float arg3 ; - - if(argc != 2) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_scale,2,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[1], &arg3, nullptr); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_scale,3,SWIGTYPE_float"); - (arg1)->scale(arg2,arg3); - - - return true; -} -SE_BIND_FUNC(js_cc_ICanvasRenderingContext2D_scale) - -static bool js_cc_ICanvasRenderingContext2D_rotate(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; - float arg2 ; - - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_rotate,2,SWIGTYPE_float"); - (arg1)->rotate(arg2); - - - return true; -} -SE_BIND_FUNC(js_cc_ICanvasRenderingContext2D_rotate) - -static bool js_cc_ICanvasRenderingContext2D_transform(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; - float arg2 ; - float arg3 ; - float arg4 ; - float arg5 ; - float arg6 ; - float arg7 ; - - if(argc != 6) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 6); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_transform,2,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[1], &arg3, nullptr); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_transform,3,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[2], &arg4, nullptr); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_transform,4,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[3], &arg5, nullptr); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_transform,5,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[4], &arg6, nullptr); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_transform,6,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[5], &arg7, nullptr); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_transform,7,SWIGTYPE_float"); - (arg1)->transform(arg2,arg3,arg4,arg5,arg6,arg7); - - - return true; -} -SE_BIND_FUNC(js_cc_ICanvasRenderingContext2D_transform) - -static bool js_cc_ICanvasRenderingContext2D_setTransform(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; - float arg2 ; - float arg3 ; - float arg4 ; - float arg5 ; - float arg6 ; - float arg7 ; - - if(argc != 6) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 6); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_setTransform,2,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[1], &arg3, nullptr); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_setTransform,3,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[2], &arg4, nullptr); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_setTransform,4,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[3], &arg5, nullptr); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_setTransform,5,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[4], &arg6, nullptr); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_setTransform,6,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[5], &arg7, nullptr); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_setTransform,7,SWIGTYPE_float"); - (arg1)->setTransform(arg2,arg3,arg4,arg5,arg6,arg7); - - - return true; -} -SE_BIND_FUNC(js_cc_ICanvasRenderingContext2D_setTransform) - -static bool js_cc_ICanvasRenderingContext2D_fetchData(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; - - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - (arg1)->fetchData(); - - - return true; -} -SE_BIND_FUNC(js_cc_ICanvasRenderingContext2D_fetchData) - -static bool js_cc_ICanvasRenderingContext2D_width_set(se::State& s) -{ - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; - float arg2 ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_width_set,2,SWIGTYPE_float"); - cc_ICanvasRenderingContext2D_width_set(arg1,arg2); - - - return true; -} -SE_BIND_PROP_SET(js_cc_ICanvasRenderingContext2D_width_set) - -static bool js_cc_ICanvasRenderingContext2D_height_set(se::State& s) -{ - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; - float arg2 ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_height_set,2,SWIGTYPE_float"); - cc_ICanvasRenderingContext2D_height_set(arg1,arg2); - - - return true; -} -SE_BIND_PROP_SET(js_cc_ICanvasRenderingContext2D_height_set) - -static bool js_cc_ICanvasRenderingContext2D_lineWidth_set(se::State& s) -{ - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; - float arg2 ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_lineWidth_set,2,SWIGTYPE_float"); - cc_ICanvasRenderingContext2D_lineWidth_set(arg1,arg2); - - - return true; -} -SE_BIND_PROP_SET(js_cc_ICanvasRenderingContext2D_lineWidth_set) - -static bool js_cc_ICanvasRenderingContext2D_fillStyle_set(se::State& s) -{ - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; - ccstd::string *arg2 = 0 ; - ccstd::string temp2 ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_fillStyle_set,2,SWIGTYPE_p_ccstd__string"); - arg2 = &temp2; - - cc_ICanvasRenderingContext2D_fillStyle_set(arg1,*arg2); - - - return true; -} -SE_BIND_PROP_SET(js_cc_ICanvasRenderingContext2D_fillStyle_set) - -static bool js_cc_ICanvasRenderingContext2D_font_set(se::State& s) -{ - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; - ccstd::string *arg2 = 0 ; - ccstd::string temp2 ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_font_set,2,SWIGTYPE_p_ccstd__string"); - arg2 = &temp2; - - cc_ICanvasRenderingContext2D_font_set(arg1,*arg2); - - - return true; -} -SE_BIND_PROP_SET(js_cc_ICanvasRenderingContext2D_font_set) - -static bool js_cc_ICanvasRenderingContext2D_globalCompositeOperation_set(se::State& s) -{ - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; - ccstd::string *arg2 = 0 ; - ccstd::string temp2 ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_globalCompositeOperation_set,2,SWIGTYPE_p_ccstd__string"); - arg2 = &temp2; - - cc_ICanvasRenderingContext2D_globalCompositeOperation_set(arg1,*arg2); - - - return true; -} -SE_BIND_PROP_SET(js_cc_ICanvasRenderingContext2D_globalCompositeOperation_set) - -static bool js_cc_ICanvasRenderingContext2D_lineCap_set(se::State& s) -{ - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; - ccstd::string *arg2 = 0 ; - ccstd::string temp2 ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_lineCap_set,2,SWIGTYPE_p_ccstd__string"); - arg2 = &temp2; - - cc_ICanvasRenderingContext2D_lineCap_set(arg1,*arg2); - - - return true; -} -SE_BIND_PROP_SET(js_cc_ICanvasRenderingContext2D_lineCap_set) - -static bool js_cc_ICanvasRenderingContext2D_strokeStyle_set(se::State& s) -{ - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; - ccstd::string *arg2 = 0 ; - ccstd::string temp2 ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_strokeStyle_set,2,SWIGTYPE_p_ccstd__string"); - arg2 = &temp2; - - cc_ICanvasRenderingContext2D_strokeStyle_set(arg1,*arg2); - - - return true; -} -SE_BIND_PROP_SET(js_cc_ICanvasRenderingContext2D_strokeStyle_set) - -static bool js_cc_ICanvasRenderingContext2D_lineJoin_set(se::State& s) -{ - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; - ccstd::string *arg2 = 0 ; - ccstd::string temp2 ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_lineJoin_set,2,SWIGTYPE_p_ccstd__string"); - arg2 = &temp2; - - cc_ICanvasRenderingContext2D_lineJoin_set(arg1,*arg2); - - - return true; -} -SE_BIND_PROP_SET(js_cc_ICanvasRenderingContext2D_lineJoin_set) - -static bool js_cc_ICanvasRenderingContext2D_textAlign_set(se::State& s) -{ - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; - ccstd::string *arg2 = 0 ; - ccstd::string temp2 ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_textAlign_set,2,SWIGTYPE_p_ccstd__string"); - arg2 = &temp2; - - cc_ICanvasRenderingContext2D_textAlign_set(arg1,*arg2); - - - return true; -} -SE_BIND_PROP_SET(js_cc_ICanvasRenderingContext2D_textAlign_set) - -static bool js_cc_ICanvasRenderingContext2D_textBaseline_set(se::State& s) -{ - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; - ccstd::string *arg2 = 0 ; - ccstd::string temp2 ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_textBaseline_set,2,SWIGTYPE_p_ccstd__string"); - arg2 = &temp2; - - cc_ICanvasRenderingContext2D_textBaseline_set(arg1,*arg2); - - - return true; -} -SE_BIND_PROP_SET(js_cc_ICanvasRenderingContext2D_textBaseline_set) - -static bool js_delete_cc_ICanvasRenderingContext2D(se::State& s) -{ - // js_dtoroverride - return true; -} -SE_BIND_FINALIZE_FUNC(js_delete_cc_ICanvasRenderingContext2D) - -bool js_register_cc_ICanvasRenderingContext2D(se::Object* obj) { - auto* cls = se::Class::create("ICanvasRenderingContext2D", obj, nullptr, nullptr); - - cls->defineProperty("width", nullptr, _SE(js_cc_ICanvasRenderingContext2D_width_set)); - cls->defineProperty("height", nullptr, _SE(js_cc_ICanvasRenderingContext2D_height_set)); - cls->defineProperty("lineWidth", nullptr, _SE(js_cc_ICanvasRenderingContext2D_lineWidth_set)); - cls->defineProperty("fillStyle", nullptr, _SE(js_cc_ICanvasRenderingContext2D_fillStyle_set)); - cls->defineProperty("font", nullptr, _SE(js_cc_ICanvasRenderingContext2D_font_set)); - cls->defineProperty("globalCompositeOperation", nullptr, _SE(js_cc_ICanvasRenderingContext2D_globalCompositeOperation_set)); - cls->defineProperty("lineCap", nullptr, _SE(js_cc_ICanvasRenderingContext2D_lineCap_set)); - cls->defineProperty("strokeStyle", nullptr, _SE(js_cc_ICanvasRenderingContext2D_strokeStyle_set)); - cls->defineProperty("lineJoin", nullptr, _SE(js_cc_ICanvasRenderingContext2D_lineJoin_set)); - cls->defineProperty("textAlign", nullptr, _SE(js_cc_ICanvasRenderingContext2D_textAlign_set)); - cls->defineProperty("textBaseline", nullptr, _SE(js_cc_ICanvasRenderingContext2D_textBaseline_set)); - - cls->defineFunction("rect", _SE(js_cc_ICanvasRenderingContext2D_rect)); - cls->defineFunction("clearRect", _SE(js_cc_ICanvasRenderingContext2D_clearRect)); - cls->defineFunction("createLinearGradient", _SE(js_cc_ICanvasRenderingContext2D_createLinearGradient)); - cls->defineFunction("save", _SE(js_cc_ICanvasRenderingContext2D_save)); - cls->defineFunction("beginPath", _SE(js_cc_ICanvasRenderingContext2D_beginPath)); - cls->defineFunction("closePath", _SE(js_cc_ICanvasRenderingContext2D_closePath)); - cls->defineFunction("moveTo", _SE(js_cc_ICanvasRenderingContext2D_moveTo)); - cls->defineFunction("lineTo", _SE(js_cc_ICanvasRenderingContext2D_lineTo)); - cls->defineFunction("fill", _SE(js_cc_ICanvasRenderingContext2D_fill)); - cls->defineFunction("stroke", _SE(js_cc_ICanvasRenderingContext2D_stroke)); - cls->defineFunction("restore", _SE(js_cc_ICanvasRenderingContext2D_restore)); - cls->defineFunction("setShadowBlur", _SE(js_cc_ICanvasRenderingContext2D_setShadowBlur)); - cls->defineFunction("setShadowColor", _SE(js_cc_ICanvasRenderingContext2D_setShadowColor)); - cls->defineFunction("setShadowOffsetX", _SE(js_cc_ICanvasRenderingContext2D_setShadowOffsetX)); - cls->defineFunction("setShadowOffsetY", _SE(js_cc_ICanvasRenderingContext2D_setShadowOffsetY)); - cls->defineFunction("fillImageData", _SE(js_cc_ICanvasRenderingContext2D_fillImageData)); - cls->defineFunction("translate", _SE(js_cc_ICanvasRenderingContext2D_translate)); - cls->defineFunction("scale", _SE(js_cc_ICanvasRenderingContext2D_scale)); - cls->defineFunction("rotate", _SE(js_cc_ICanvasRenderingContext2D_rotate)); - cls->defineFunction("transform", _SE(js_cc_ICanvasRenderingContext2D_transform)); - cls->defineFunction("setTransform", _SE(js_cc_ICanvasRenderingContext2D_setTransform)); - cls->defineFunction("fetchData", _SE(js_cc_ICanvasRenderingContext2D_fetchData)); - - - - - cls->defineFinalizeFunction(_SE(js_delete_cc_ICanvasRenderingContext2D)); - - - cls->install(); - JSBClassType::registerClass(cls); - - __jsb_cc_ICanvasRenderingContext2D_proto = cls->getProto(); - __jsb_cc_ICanvasRenderingContext2D_class = cls; - se::ScriptEngine::getInstance()->clearException(); - return true; -} - - -se::Class* __jsb_cc_CanvasGradient_class = nullptr; -se::Object* __jsb_cc_CanvasGradient_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_CanvasGradient) - -// js_ctor -static bool js_new_cc_CanvasGradient(se::State& s) // NOLINT(readability-identifier-naming) -{ - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - - cc::CanvasGradient *result; - result = (cc::CanvasGradient *)new cc::CanvasGradient(); - - - auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); - s.thisObject()->setPrivateObject(ptr); - return true; -} -SE_BIND_CTOR(js_new_cc_CanvasGradient, __jsb_cc_CanvasGradient_class, js_delete_cc_CanvasGradient) - -static bool js_delete_cc_CanvasGradient(se::State& s) -{ - // js_dtoroverride - return true; -} -SE_BIND_FINALIZE_FUNC(js_delete_cc_CanvasGradient) - -bool js_register_cc_CanvasGradient(se::Object* obj) { - auto* cls = se::Class::create("CanvasGradient", obj, __jsb_cc_ICanvasGradient_proto, _SE(js_new_cc_CanvasGradient)); - - - - - - - cls->defineFinalizeFunction(_SE(js_delete_cc_CanvasGradient)); - - - cls->install(); - JSBClassType::registerClass(cls); - - __jsb_cc_CanvasGradient_proto = cls->getProto(); - __jsb_cc_CanvasGradient_class = cls; - se::ScriptEngine::getInstance()->clearException(); - return true; -} - - -se::Class* __jsb_cc_CanvasRenderingContext2D_class = nullptr; -se::Object* __jsb_cc_CanvasRenderingContext2D_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_CanvasRenderingContext2D) - -// js_ctor -static bool js_new_cc_CanvasRenderingContext2D(se::State& s) // NOLINT(readability-identifier-naming) -{ - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - - if (argc != 2) { - SE_REPORT_ERROR("js_new_cc_CanvasRenderingContext2D: wrong number of arguments: %d, was expecting %d", (int)argc, 2); - return false; - } - - float arg1 ; - float arg2 ; - cc::CanvasRenderingContext2D *result; - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg1, nullptr); - SE_PRECONDITION2(ok, false, "new_CanvasRenderingContext2D,1,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[1], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "new_CanvasRenderingContext2D,2,SWIGTYPE_float"); - result = (cc::CanvasRenderingContext2D *)new cc::CanvasRenderingContext2D(arg1,arg2); - - - auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); - s.thisObject()->setPrivateObject(ptr); - return true; -} -SE_BIND_CTOR(js_new_cc_CanvasRenderingContext2D, __jsb_cc_CanvasRenderingContext2D_class, js_delete_cc_CanvasRenderingContext2D) - -static bool js_delete_cc_CanvasRenderingContext2D(se::State& s) -{ - // js_dtoroverride - return true; -} -SE_BIND_FINALIZE_FUNC(js_delete_cc_CanvasRenderingContext2D) - -static bool js_cc_CanvasRenderingContext2D__width_set(se::State& s) -{ - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::CanvasRenderingContext2D *arg1 = (cc::CanvasRenderingContext2D *) NULL ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg1->_width, nullptr); - SE_PRECONDITION2(ok, false, "CanvasRenderingContext2D__width_set,2,SWIGTYPE_float"); - - - return true; -} -SE_BIND_PROP_SET(js_cc_CanvasRenderingContext2D__width_set) - -static bool js_cc_CanvasRenderingContext2D__width_get(se::State& s) -{ - CC_UNUSED bool ok = true; - cc::CanvasRenderingContext2D *arg1 = (cc::CanvasRenderingContext2D *) NULL ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - // out 1 - ok &= nativevalue_to_se(arg1->_width, s.rval(), s.thisObject() /*ctx*/); - - - return true; -} -SE_BIND_PROP_GET(js_cc_CanvasRenderingContext2D__width_get) - -static bool js_cc_CanvasRenderingContext2D__height_set(se::State& s) -{ - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::CanvasRenderingContext2D *arg1 = (cc::CanvasRenderingContext2D *) NULL ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg1->_height, nullptr); - SE_PRECONDITION2(ok, false, "CanvasRenderingContext2D__height_set,2,SWIGTYPE_float"); - - - return true; -} -SE_BIND_PROP_SET(js_cc_CanvasRenderingContext2D__height_set) - -static bool js_cc_CanvasRenderingContext2D__height_get(se::State& s) -{ - CC_UNUSED bool ok = true; - cc::CanvasRenderingContext2D *arg1 = (cc::CanvasRenderingContext2D *) NULL ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - // out 1 - ok &= nativevalue_to_se(arg1->_height, s.rval(), s.thisObject() /*ctx*/); - - - return true; -} -SE_BIND_PROP_GET(js_cc_CanvasRenderingContext2D__height_get) - -static bool js_cc_CanvasRenderingContext2D__lineWidth_set(se::State& s) -{ - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::CanvasRenderingContext2D *arg1 = (cc::CanvasRenderingContext2D *) NULL ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg1->_lineWidth, nullptr); - SE_PRECONDITION2(ok, false, "CanvasRenderingContext2D__lineWidth_set,2,SWIGTYPE_float"); - - - return true; -} -SE_BIND_PROP_SET(js_cc_CanvasRenderingContext2D__lineWidth_set) - -static bool js_cc_CanvasRenderingContext2D__lineWidth_get(se::State& s) -{ - CC_UNUSED bool ok = true; - cc::CanvasRenderingContext2D *arg1 = (cc::CanvasRenderingContext2D *) NULL ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - // out 1 - ok &= nativevalue_to_se(arg1->_lineWidth, s.rval(), s.thisObject() /*ctx*/); - - - return true; -} -SE_BIND_PROP_GET(js_cc_CanvasRenderingContext2D__lineWidth_get) - -static bool js_cc_CanvasRenderingContext2D__lineJoin_set(se::State& s) -{ - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::CanvasRenderingContext2D *arg1 = (cc::CanvasRenderingContext2D *) NULL ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1->_lineJoin, s.thisObject()); - SE_PRECONDITION2(ok, false, "CanvasRenderingContext2D__lineJoin_set,2,SWIGTYPE_ccstd__string"); - - - - return true; -} -SE_BIND_PROP_SET(js_cc_CanvasRenderingContext2D__lineJoin_set) - -static bool js_cc_CanvasRenderingContext2D__lineJoin_get(se::State& s) -{ - CC_UNUSED bool ok = true; - cc::CanvasRenderingContext2D *arg1 = (cc::CanvasRenderingContext2D *) NULL ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(arg1->_lineJoin, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "CanvasRenderingContext2D__lineJoin_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->_lineJoin, s.thisObject(), s.rval()); - - - - return true; -} -SE_BIND_PROP_GET(js_cc_CanvasRenderingContext2D__lineJoin_get) - -static bool js_cc_CanvasRenderingContext2D__lineCap_set(se::State& s) -{ - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::CanvasRenderingContext2D *arg1 = (cc::CanvasRenderingContext2D *) NULL ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1->_lineCap, s.thisObject()); - SE_PRECONDITION2(ok, false, "CanvasRenderingContext2D__lineCap_set,2,SWIGTYPE_ccstd__string"); - - - - return true; -} -SE_BIND_PROP_SET(js_cc_CanvasRenderingContext2D__lineCap_set) - -static bool js_cc_CanvasRenderingContext2D__lineCap_get(se::State& s) -{ - CC_UNUSED bool ok = true; - cc::CanvasRenderingContext2D *arg1 = (cc::CanvasRenderingContext2D *) NULL ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(arg1->_lineCap, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "CanvasRenderingContext2D__lineCap_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->_lineCap, s.thisObject(), s.rval()); - - - - return true; -} -SE_BIND_PROP_GET(js_cc_CanvasRenderingContext2D__lineCap_get) - -static bool js_cc_CanvasRenderingContext2D__font_set(se::State& s) -{ - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::CanvasRenderingContext2D *arg1 = (cc::CanvasRenderingContext2D *) NULL ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1->_font, s.thisObject()); - SE_PRECONDITION2(ok, false, "CanvasRenderingContext2D__font_set,2,SWIGTYPE_ccstd__string"); - - - - return true; -} -SE_BIND_PROP_SET(js_cc_CanvasRenderingContext2D__font_set) - -static bool js_cc_CanvasRenderingContext2D__font_get(se::State& s) -{ - CC_UNUSED bool ok = true; - cc::CanvasRenderingContext2D *arg1 = (cc::CanvasRenderingContext2D *) NULL ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(arg1->_font, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "CanvasRenderingContext2D__font_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->_font, s.thisObject(), s.rval()); - - - - return true; -} -SE_BIND_PROP_GET(js_cc_CanvasRenderingContext2D__font_get) - -static bool js_cc_CanvasRenderingContext2D__textAlign_set(se::State& s) -{ - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::CanvasRenderingContext2D *arg1 = (cc::CanvasRenderingContext2D *) NULL ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1->_textAlign, s.thisObject()); - SE_PRECONDITION2(ok, false, "CanvasRenderingContext2D__textAlign_set,2,SWIGTYPE_ccstd__string"); - - - - return true; -} -SE_BIND_PROP_SET(js_cc_CanvasRenderingContext2D__textAlign_set) - -static bool js_cc_CanvasRenderingContext2D__textAlign_get(se::State& s) -{ - CC_UNUSED bool ok = true; - cc::CanvasRenderingContext2D *arg1 = (cc::CanvasRenderingContext2D *) NULL ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(arg1->_textAlign, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "CanvasRenderingContext2D__textAlign_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->_textAlign, s.thisObject(), s.rval()); - - - - return true; -} -SE_BIND_PROP_GET(js_cc_CanvasRenderingContext2D__textAlign_get) - -static bool js_cc_CanvasRenderingContext2D__textBaseline_set(se::State& s) -{ - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::CanvasRenderingContext2D *arg1 = (cc::CanvasRenderingContext2D *) NULL ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1->_textBaseline, s.thisObject()); - SE_PRECONDITION2(ok, false, "CanvasRenderingContext2D__textBaseline_set,2,SWIGTYPE_ccstd__string"); - - - - return true; -} -SE_BIND_PROP_SET(js_cc_CanvasRenderingContext2D__textBaseline_set) - -static bool js_cc_CanvasRenderingContext2D__textBaseline_get(se::State& s) -{ - CC_UNUSED bool ok = true; - cc::CanvasRenderingContext2D *arg1 = (cc::CanvasRenderingContext2D *) NULL ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(arg1->_textBaseline, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "CanvasRenderingContext2D__textBaseline_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->_textBaseline, s.thisObject(), s.rval()); - - - - return true; -} -SE_BIND_PROP_GET(js_cc_CanvasRenderingContext2D__textBaseline_get) - -static bool js_cc_CanvasRenderingContext2D__fillStyle_set(se::State& s) -{ - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::CanvasRenderingContext2D *arg1 = (cc::CanvasRenderingContext2D *) NULL ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1->_fillStyle, s.thisObject()); - SE_PRECONDITION2(ok, false, "CanvasRenderingContext2D__fillStyle_set,2,SWIGTYPE_ccstd__string"); - - - - return true; -} -SE_BIND_PROP_SET(js_cc_CanvasRenderingContext2D__fillStyle_set) - -static bool js_cc_CanvasRenderingContext2D__fillStyle_get(se::State& s) -{ - CC_UNUSED bool ok = true; - cc::CanvasRenderingContext2D *arg1 = (cc::CanvasRenderingContext2D *) NULL ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(arg1->_fillStyle, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "CanvasRenderingContext2D__fillStyle_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->_fillStyle, s.thisObject(), s.rval()); - - - - return true; -} -SE_BIND_PROP_GET(js_cc_CanvasRenderingContext2D__fillStyle_get) - -static bool js_cc_CanvasRenderingContext2D__strokeStyle_set(se::State& s) -{ - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::CanvasRenderingContext2D *arg1 = (cc::CanvasRenderingContext2D *) NULL ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1->_strokeStyle, s.thisObject()); - SE_PRECONDITION2(ok, false, "CanvasRenderingContext2D__strokeStyle_set,2,SWIGTYPE_ccstd__string"); - - - - return true; -} -SE_BIND_PROP_SET(js_cc_CanvasRenderingContext2D__strokeStyle_set) - -static bool js_cc_CanvasRenderingContext2D__strokeStyle_get(se::State& s) -{ - CC_UNUSED bool ok = true; - cc::CanvasRenderingContext2D *arg1 = (cc::CanvasRenderingContext2D *) NULL ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(arg1->_strokeStyle, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "CanvasRenderingContext2D__strokeStyle_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->_strokeStyle, s.thisObject(), s.rval()); - - - - return true; -} -SE_BIND_PROP_GET(js_cc_CanvasRenderingContext2D__strokeStyle_get) - -static bool js_cc_CanvasRenderingContext2D__globalCompositeOperation_set(se::State& s) -{ - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::CanvasRenderingContext2D *arg1 = (cc::CanvasRenderingContext2D *) NULL ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1->_globalCompositeOperation, s.thisObject()); - SE_PRECONDITION2(ok, false, "CanvasRenderingContext2D__globalCompositeOperation_set,2,SWIGTYPE_ccstd__string"); - - - - return true; -} -SE_BIND_PROP_SET(js_cc_CanvasRenderingContext2D__globalCompositeOperation_set) - -static bool js_cc_CanvasRenderingContext2D__globalCompositeOperation_get(se::State& s) -{ - CC_UNUSED bool ok = true; - cc::CanvasRenderingContext2D *arg1 = (cc::CanvasRenderingContext2D *) NULL ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(arg1->_globalCompositeOperation, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "CanvasRenderingContext2D__globalCompositeOperation_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->_globalCompositeOperation, s.thisObject(), s.rval()); - - - - return true; -} -SE_BIND_PROP_GET(js_cc_CanvasRenderingContext2D__globalCompositeOperation_get) - -bool js_register_cc_CanvasRenderingContext2D(se::Object* obj) { - auto* cls = se::Class::create("CanvasRenderingContext2D", obj, __jsb_cc_ICanvasRenderingContext2D_proto, _SE(js_new_cc_CanvasRenderingContext2D)); - - cls->defineProperty("_width", _SE(js_cc_CanvasRenderingContext2D__width_get), _SE(js_cc_CanvasRenderingContext2D__width_set)); - cls->defineProperty("_height", _SE(js_cc_CanvasRenderingContext2D__height_get), _SE(js_cc_CanvasRenderingContext2D__height_set)); - cls->defineProperty("_lineWidth", _SE(js_cc_CanvasRenderingContext2D__lineWidth_get), _SE(js_cc_CanvasRenderingContext2D__lineWidth_set)); - cls->defineProperty("_lineJoin", _SE(js_cc_CanvasRenderingContext2D__lineJoin_get), _SE(js_cc_CanvasRenderingContext2D__lineJoin_set)); - cls->defineProperty("_lineCap", _SE(js_cc_CanvasRenderingContext2D__lineCap_get), _SE(js_cc_CanvasRenderingContext2D__lineCap_set)); - cls->defineProperty("_font", _SE(js_cc_CanvasRenderingContext2D__font_get), _SE(js_cc_CanvasRenderingContext2D__font_set)); - cls->defineProperty("_textAlign", _SE(js_cc_CanvasRenderingContext2D__textAlign_get), _SE(js_cc_CanvasRenderingContext2D__textAlign_set)); - cls->defineProperty("_textBaseline", _SE(js_cc_CanvasRenderingContext2D__textBaseline_get), _SE(js_cc_CanvasRenderingContext2D__textBaseline_set)); - cls->defineProperty("_fillStyle", _SE(js_cc_CanvasRenderingContext2D__fillStyle_get), _SE(js_cc_CanvasRenderingContext2D__fillStyle_set)); - cls->defineProperty("_strokeStyle", _SE(js_cc_CanvasRenderingContext2D__strokeStyle_get), _SE(js_cc_CanvasRenderingContext2D__strokeStyle_set)); - cls->defineProperty("_globalCompositeOperation", _SE(js_cc_CanvasRenderingContext2D__globalCompositeOperation_get), _SE(js_cc_CanvasRenderingContext2D__globalCompositeOperation_set)); - - - - - - cls->defineFinalizeFunction(_SE(js_delete_cc_CanvasRenderingContext2D)); - - - cls->install(); - JSBClassType::registerClass(cls); - - __jsb_cc_CanvasRenderingContext2D_proto = cls->getProto(); - __jsb_cc_CanvasRenderingContext2D_class = cls; - se::ScriptEngine::getInstance()->clearException(); - return true; -} - - -se::Class* __jsb_cc_Device_class = nullptr; -se::Object* __jsb_cc_Device_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_Device) - -static bool js_cc_Device_getDPI_static(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - int result; - - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } - result = (int)cc::Device::getDPI(); - - // out 1 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - - - return true; -} -SE_BIND_FUNC(js_cc_Device_getDPI_static) - -static bool js_cc_Device_getDevicePixelRatio_static(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - float result; - - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } - result = (float)cc::Device::getDevicePixelRatio(); - - // out 1 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - - - return true; -} -SE_BIND_FUNC(js_cc_Device_getDevicePixelRatio_static) - -static bool js_cc_Device_setAccelerometerEnabled_static(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - bool arg1 ; - - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } - // %typemap(in) bool - ok &= sevalue_to_native(args[0], &arg1); - SE_PRECONDITION2(ok, false, "Device_setAccelerometerEnabled,1,SWIGTYPE_bool"); - cc::Device::setAccelerometerEnabled(arg1); - - - return true; -} -SE_BIND_FUNC(js_cc_Device_setAccelerometerEnabled_static) - -static bool js_cc_Device_setAccelerometerInterval_static(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - float arg1 ; - - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg1, nullptr); - SE_PRECONDITION2(ok, false, "Device_setAccelerometerInterval,1,SWIGTYPE_float"); - cc::Device::setAccelerometerInterval(arg1); - - - return true; -} -SE_BIND_FUNC(js_cc_Device_setAccelerometerInterval_static) - -static bool js_cc_Device_getDeviceOrientation_static(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::IScreen::Orientation result; - int32_t temp ; - - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } - result = (cc::IScreen::Orientation)cc::Device::getDeviceOrientation(); - // out 4 - s.rval().setInt32(static_cast(result)); - - - return true; -} -SE_BIND_FUNC(js_cc_Device_getDeviceOrientation_static) - -static bool js_cc_Device_getDeviceModel_static(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - ccstd::string result; - - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } - result = cc::Device::getDeviceModel(); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Device_getDeviceModel, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - - - - return true; -} -SE_BIND_FUNC(js_cc_Device_getDeviceModel_static) - -static bool js_cc_Device_setKeepScreenOn_static(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - bool arg1 ; - - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } - // %typemap(in) bool - ok &= sevalue_to_native(args[0], &arg1); - SE_PRECONDITION2(ok, false, "Device_setKeepScreenOn,1,SWIGTYPE_bool"); - cc::Device::setKeepScreenOn(arg1); - - - return true; -} -SE_BIND_FUNC(js_cc_Device_setKeepScreenOn_static) - -static bool js_cc_Device_vibrate_static(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - float arg1 ; - - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg1, nullptr); - SE_PRECONDITION2(ok, false, "Device_vibrate,1,SWIGTYPE_float"); - cc::Device::vibrate(arg1); - - - return true; -} -SE_BIND_FUNC(js_cc_Device_vibrate_static) - -static bool js_cc_Device_getBatteryLevel_static(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - float result; - - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } - result = (float)cc::Device::getBatteryLevel(); - - // out 1 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - - - return true; -} -SE_BIND_FUNC(js_cc_Device_getBatteryLevel_static) - -static bool js_cc_Device_getNetworkType_static(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::INetwork::NetworkType result; - int32_t temp ; - - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } - result = (cc::INetwork::NetworkType)cc::Device::getNetworkType(); - // out 4 - s.rval().setInt32(static_cast(result)); - - - return true; -} -SE_BIND_FUNC(js_cc_Device_getNetworkType_static) - -static bool js_cc_Device_getSafeAreaEdge_static(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::Vec4 result; - - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } - result = cc::Device::getSafeAreaEdge(); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Device_getSafeAreaEdge, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - - - - return true; -} -SE_BIND_FUNC(js_cc_Device_getSafeAreaEdge_static) - -static bool js_delete_cc_Device(se::State& s) -{ - // js_dtoroverride - return true; -} -SE_BIND_FINALIZE_FUNC(js_delete_cc_Device) - -bool js_register_cc_Device(se::Object* obj) { - auto* cls = se::Class::create("Device", obj, nullptr, nullptr); - - - - - cls->defineStaticFunction("getDPI", _SE(js_cc_Device_getDPI_static)); - cls->defineStaticFunction("getDevicePixelRatio", _SE(js_cc_Device_getDevicePixelRatio_static)); - cls->defineStaticFunction("setAccelerometerEnabled", _SE(js_cc_Device_setAccelerometerEnabled_static)); - cls->defineStaticFunction("setAccelerometerInterval", _SE(js_cc_Device_setAccelerometerInterval_static)); - cls->defineStaticFunction("getDeviceOrientation", _SE(js_cc_Device_getDeviceOrientation_static)); - cls->defineStaticFunction("getDeviceModel", _SE(js_cc_Device_getDeviceModel_static)); - cls->defineStaticFunction("setKeepScreenOn", _SE(js_cc_Device_setKeepScreenOn_static)); - cls->defineStaticFunction("vibrate", _SE(js_cc_Device_vibrate_static)); - cls->defineStaticFunction("getBatteryLevel", _SE(js_cc_Device_getBatteryLevel_static)); - cls->defineStaticFunction("getNetworkType", _SE(js_cc_Device_getNetworkType_static)); - cls->defineStaticFunction("getSafeAreaEdge", _SE(js_cc_Device_getSafeAreaEdge_static)); - - - cls->defineFinalizeFunction(_SE(js_delete_cc_Device)); - - - cls->install(); - JSBClassType::registerClass(cls); - - __jsb_cc_Device_proto = cls->getProto(); - __jsb_cc_Device_class = cls; - se::ScriptEngine::getInstance()->clearException(); - return true; -} - - -se::Class* __jsb_cc_ISystemWindow_class = nullptr; -se::Object* __jsb_cc_ISystemWindow_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_ISystemWindow) - -static bool js_cc_ISystemWindow_createWindow__SWIG_0(se::State& s) -{ - // js_overloaded_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - cc::ISystemWindow *arg1 = (cc::ISystemWindow *) NULL ; - char *arg2 = (char *) NULL ; - int arg3 ; - int arg4 ; - int arg5 ; - int arg6 ; - int arg7 ; - ccstd::string temp2 ; - bool result; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - ok &= sevalue_to_native(args[0], &temp2); - SE_PRECONDITION2(ok, false, "ISystemWindow_createWindow,2,SWIGTYPE_p_char"); - arg2 = (char *) temp2.c_str(); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[1], &arg3, nullptr); - SE_PRECONDITION2(ok, false, "ISystemWindow_createWindow,3,SWIGTYPE_int"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[2], &arg4, nullptr); - SE_PRECONDITION2(ok, false, "ISystemWindow_createWindow,4,SWIGTYPE_int"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[3], &arg5, nullptr); - SE_PRECONDITION2(ok, false, "ISystemWindow_createWindow,5,SWIGTYPE_int"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[4], &arg6, nullptr); - SE_PRECONDITION2(ok, false, "ISystemWindow_createWindow,6,SWIGTYPE_int"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[5], &arg7, nullptr); - SE_PRECONDITION2(ok, false, "ISystemWindow_createWindow,7,SWIGTYPE_int"); - result = (bool)(arg1)->createWindow((char const *)arg2,arg3,arg4,arg5,arg6,arg7); - // out 5 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - - - return true; -} - -static bool js_cc_ISystemWindow_createWindow__SWIG_1(se::State& s) -{ - // js_overloaded_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - cc::ISystemWindow *arg1 = (cc::ISystemWindow *) NULL ; - char *arg2 = (char *) NULL ; - int arg3 ; - int arg4 ; - int arg5 ; - ccstd::string temp2 ; - bool result; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - ok &= sevalue_to_native(args[0], &temp2); - SE_PRECONDITION2(ok, false, "ISystemWindow_createWindow,2,SWIGTYPE_p_char"); - arg2 = (char *) temp2.c_str(); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[1], &arg3, nullptr); - SE_PRECONDITION2(ok, false, "ISystemWindow_createWindow,3,SWIGTYPE_int"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[2], &arg4, nullptr); - SE_PRECONDITION2(ok, false, "ISystemWindow_createWindow,4,SWIGTYPE_int"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[3], &arg5, nullptr); - SE_PRECONDITION2(ok, false, "ISystemWindow_createWindow,5,SWIGTYPE_int"); - result = (bool)(arg1)->createWindow((char const *)arg2,arg3,arg4,arg5); - // out 5 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - - - return true; -} - -static bool js_cc_ISystemWindow_createWindow(se::State& s) -{ - // js_function_dispatcher - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - - // js_function_dispatch_case - if (argc == 6) { - ok = js_cc_ISystemWindow_createWindow__SWIG_0(s); - if (ok) { - return true; - } - } // js_function_dispatch_case - if (argc == 4) { - ok = js_cc_ISystemWindow_createWindow__SWIG_1(s); - if (ok) { - return true; - } - } - SE_REPORT_ERROR("wrong number of arguments: %d", (int)argc); - return false; -} -SE_BIND_FUNC(js_cc_ISystemWindow_createWindow) - -static bool js_cc_ISystemWindow_getWindowId(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::ISystemWindow *arg1 = (cc::ISystemWindow *) NULL ; - uint32_t result; - - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = ((cc::ISystemWindow const *)arg1)->getWindowId(); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "ISystemWindow_getWindowId, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - - - - return true; -} -SE_BIND_FUNC(js_cc_ISystemWindow_getWindowId) - -static bool js_cc_ISystemWindow_closeWindow(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::ISystemWindow *arg1 = (cc::ISystemWindow *) NULL ; - - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - (arg1)->closeWindow(); - - - return true; -} -SE_BIND_FUNC(js_cc_ISystemWindow_closeWindow) - -static bool js_cc_ISystemWindow_getWindowHandle(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::ISystemWindow *arg1 = (cc::ISystemWindow *) NULL ; - uintptr_t result; - - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = ((cc::ISystemWindow const *)arg1)->getWindowHandle(); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "ISystemWindow_getWindowHandle, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - - - - return true; -} -SE_BIND_FUNC(js_cc_ISystemWindow_getWindowHandle) - -static bool js_cc_ISystemWindow_getViewSize(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::ISystemWindow *arg1 = (cc::ISystemWindow *) NULL ; - cc::ISystemWindow::Size result; - - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = ((cc::ISystemWindow const *)arg1)->getViewSize(); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "ISystemWindow_getViewSize, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - - - - return true; -} -SE_BIND_FUNC(js_cc_ISystemWindow_getViewSize) - -static bool js_cc_ISystemWindow_setViewSize(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::ISystemWindow *arg1 = (cc::ISystemWindow *) NULL ; - uint32_t arg2 ; - uint32_t arg3 ; - - if(argc != 2) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "ISystemWindow_setViewSize,2,SWIGTYPE_uint32_t"); - - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[1], &arg3, s.thisObject()); - SE_PRECONDITION2(ok, false, "ISystemWindow_setViewSize,3,SWIGTYPE_uint32_t"); - - (arg1)->setViewSize(arg2,arg3); + + +static bool js_new_cc_Mat4__SWIG_2(se::State& s) // NOLINT(readability-identifier-naming) +{ + // js_overloaded_ctor + const auto& args = s.args(); + CC_UNUSED bool ok = true; + float *arg1 = (float *) NULL ; + cc::Mat4 *result; + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg1, s.thisObject()); + SE_PRECONDITION2(ok, false, "new_Mat4,1,SWIGTYPE_p_float"); + result = (cc::Mat4 *)new cc::Mat4((float const *)arg1); + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); return true; } -SE_BIND_FUNC(js_cc_ISystemWindow_setViewSize) -static bool js_cc_ISystemWindow_setCursorEnabled(se::State& s) + +static bool js_new_cc_Mat4__SWIG_3(se::State& s) // NOLINT(readability-identifier-naming) { - // js_function - - CC_UNUSED bool ok = true; + // js_overloaded_ctor const auto& args = s.args(); - size_t argc = args.size(); - cc::ISystemWindow *arg1 = (cc::ISystemWindow *) NULL ; - bool arg2 ; + CC_UNUSED bool ok = true; + cc::Mat4 *arg1 = 0 ; + cc::Mat4 temp1 ; + cc::Mat4 *result; + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp1, s.thisObject()); + SE_PRECONDITION2(ok, false, "new_Mat4,1,SWIGTYPE_p_cc__Mat4"); + arg1 = &temp1; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) bool - ok &= sevalue_to_native(args[0], &arg2); - SE_PRECONDITION2(ok, false, "ISystemWindow_setCursorEnabled,2,SWIGTYPE_bool"); - (arg1)->setCursorEnabled(arg2); + result = (cc::Mat4 *)new cc::Mat4((cc::Mat4 const &)*arg1); + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); return true; } -SE_BIND_FUNC(js_cc_ISystemWindow_setCursorEnabled) -static bool js_cc_ISystemWindow_copyTextToClipboard(se::State& s) + +static bool js_new_Mat4(se::State& s) // NOLINT(readability-identifier-naming) { - // js_function + // js_ctor_dispatcher + size_t argc = s.args().size(); + bool ret = false; - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::ISystemWindow *arg1 = (cc::ISystemWindow *) NULL ; - ccstd::string *arg2 = 0 ; - ccstd::string temp2 ; + // switch all cases by means of series of if-returns. - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; + // js_ctor_dispatch_case + if(argc == 0) { + ret = js_new_cc_Mat4__SWIG_0(s); + if (ret) { + return ret; + } /* reset exception and return */ } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "ISystemWindow_copyTextToClipboard,2,SWIGTYPE_p_ccstd__string"); - arg2 = &temp2; - (arg1)->copyTextToClipboard((ccstd::string const &)*arg2); + // js_ctor_dispatch_case + if(argc == 16) { + ret = js_new_cc_Mat4__SWIG_1(s); + if (ret) { + return ret; + } /* reset exception and return */ + } + // js_ctor_dispatch_case + if(argc == 1) { + ret = js_new_cc_Mat4__SWIG_2(s); + if (ret) { + return ret; + } /* reset exception and return */ + } - return true; + // js_ctor_dispatch_case + if(argc == 1) { + ret = js_new_cc_Mat4__SWIG_3(s); + if (ret) { + return ret; + } /* reset exception and return */ + } + + + // default: + SE_REPORT_ERROR("Illegal arguments for construction of Mat4"); + return false; } -SE_BIND_FUNC(js_cc_ISystemWindow_copyTextToClipboard) +SE_BIND_CTOR(js_new_Mat4, __jsb_cc_Mat4_class, js_delete_cc_Mat4) -static bool js_delete_cc_ISystemWindow(se::State& s) +static bool js_delete_cc_Mat4(se::State& s) { // js_dtoroverride return true; } -SE_BIND_FINALIZE_FUNC(js_delete_cc_ISystemWindow) +SE_BIND_FINALIZE_FUNC(js_delete_cc_Mat4) -bool js_register_cc_ISystemWindow(se::Object* obj) { - auto* cls = se::Class::create("ISystemWindow", obj, nullptr, nullptr); +bool js_register_cc_Mat4(se::Object* obj) { + auto* cls = se::Class::create("Mat4", obj, nullptr, _SE(js_new_Mat4)); - cls->defineFunction("createWindow", _SE(js_cc_ISystemWindow_createWindow)); - cls->defineFunction("getWindowId", _SE(js_cc_ISystemWindow_getWindowId)); - cls->defineFunction("closeWindow", _SE(js_cc_ISystemWindow_closeWindow)); - cls->defineFunction("getWindowHandle", _SE(js_cc_ISystemWindow_getWindowHandle)); - cls->defineFunction("getViewSize", _SE(js_cc_ISystemWindow_getViewSize)); - cls->defineFunction("setViewSize", _SE(js_cc_ISystemWindow_setViewSize)); - cls->defineFunction("setCursorEnabled", _SE(js_cc_ISystemWindow_setCursorEnabled)); - cls->defineFunction("copyTextToClipboard", _SE(js_cc_ISystemWindow_copyTextToClipboard)); - cls->defineStaticProperty("mainWindowId", nullptr, nullptr); - cls->defineFinalizeFunction(_SE(js_delete_cc_ISystemWindow)); + cls->defineFinalizeFunction(_SE(js_delete_cc_Mat4)); cls->install(); - JSBClassType::registerClass(cls); + JSBClassType::registerClass(cls); - __jsb_cc_ISystemWindow_proto = cls->getProto(); - __jsb_cc_ISystemWindow_class = cls; + __jsb_cc_Mat4_proto = cls->getProto(); + __jsb_cc_Mat4_class = cls; se::ScriptEngine::getInstance()->clearException(); return true; } -se::Class* __jsb_cc_ISystemWindowInfo_class = nullptr; -se::Object* __jsb_cc_ISystemWindowInfo_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_ISystemWindowInfo) +se::Class* __jsb_cc_Quaternion_class = nullptr; +se::Object* __jsb_cc_Quaternion_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_Quaternion) -static bool js_cc_ISystemWindowInfo_title_set(se::State& s) +static bool js_new_cc_Quaternion__SWIG_0(se::State& s) // NOLINT(readability-identifier-naming) { - CC_UNUSED bool ok = true; + // js_overloaded_ctor const auto& args = s.args(); - size_t argc = args.size(); - cc::ISystemWindowInfo *arg1 = (cc::ISystemWindowInfo *) NULL ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1->title, s.thisObject()); - SE_PRECONDITION2(ok, false, "ISystemWindowInfo_title_set,2,SWIGTYPE_ccstd__string"); - + CC_UNUSED bool ok = true; + cc::Quaternion *result; + result = (cc::Quaternion *)new cc::Quaternion(); + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); return true; } -SE_BIND_PROP_SET(js_cc_ISystemWindowInfo_title_set) -static bool js_cc_ISystemWindowInfo_title_get(se::State& s) + +static bool js_new_cc_Quaternion__SWIG_1(se::State& s) // NOLINT(readability-identifier-naming) { + // js_overloaded_ctor + const auto& args = s.args(); CC_UNUSED bool ok = true; - cc::ISystemWindowInfo *arg1 = (cc::ISystemWindowInfo *) NULL ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(arg1->title, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "ISystemWindowInfo_title_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->title, s.thisObject(), s.rval()); - + float arg1 ; + float arg2 ; + float arg3 ; + float arg4 ; + cc::Quaternion *result; + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg1, nullptr); + SE_PRECONDITION2(ok, false, "new_Quat,1,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "new_Quat,2,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[2], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "new_Quat,3,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[3], &arg4, nullptr); + SE_PRECONDITION2(ok, false, "new_Quat,4,SWIGTYPE_float"); + result = (cc::Quaternion *)new cc::Quaternion(arg1,arg2,arg3,arg4); + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); return true; } -SE_BIND_PROP_GET(js_cc_ISystemWindowInfo_title_get) -static bool js_cc_ISystemWindowInfo_x_set(se::State& s) + +static bool js_new_cc_Quaternion__SWIG_2(se::State& s) // NOLINT(readability-identifier-naming) { - CC_UNUSED bool ok = true; + // js_overloaded_ctor const auto& args = s.args(); - size_t argc = args.size(); - cc::ISystemWindowInfo *arg1 = (cc::ISystemWindowInfo *) NULL ; + CC_UNUSED bool ok = true; + float *arg1 = (float *) NULL ; + cc::Quaternion *result; + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg1, s.thisObject()); + SE_PRECONDITION2(ok, false, "new_Quat,1,SWIGTYPE_p_float"); + result = (cc::Quaternion *)new cc::Quaternion(arg1); - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1->x, s.thisObject()); - SE_PRECONDITION2(ok, false, "ISystemWindowInfo_x_set,2,SWIGTYPE_int32_t"); + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); + return true; +} + + +static bool js_new_cc_Quaternion__SWIG_3(se::State& s) // NOLINT(readability-identifier-naming) +{ + // js_overloaded_ctor + const auto& args = s.args(); + CC_UNUSED bool ok = true; + cc::Mat4 *arg1 = 0 ; + cc::Mat4 temp1 ; + cc::Quaternion *result; + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp1, s.thisObject()); + SE_PRECONDITION2(ok, false, "new_Quat,1,SWIGTYPE_p_cc__Mat4"); + arg1 = &temp1; + result = (cc::Quaternion *)new cc::Quaternion((cc::Mat4 const &)*arg1); + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); return true; } -SE_BIND_PROP_SET(js_cc_ISystemWindowInfo_x_set) -static bool js_cc_ISystemWindowInfo_x_get(se::State& s) + +static bool js_new_cc_Quaternion__SWIG_4(se::State& s) // NOLINT(readability-identifier-naming) { + // js_overloaded_ctor + const auto& args = s.args(); CC_UNUSED bool ok = true; - cc::ISystemWindowInfo *arg1 = (cc::ISystemWindowInfo *) NULL ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(arg1->x, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "ISystemWindowInfo_x_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->x, s.thisObject(), s.rval()); + cc::Vec3 *arg1 = 0 ; + float arg2 ; + cc::Vec3 temp1 ; + cc::Quaternion *result; + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp1, s.thisObject()); + SE_PRECONDITION2(ok, false, "new_Quat,1,SWIGTYPE_p_cc__Vec3"); + arg1 = &temp1; + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "new_Quat,2,SWIGTYPE_float"); + result = (cc::Quaternion *)new cc::Quaternion((cc::Vec3 const &)*arg1,arg2); + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); return true; } -SE_BIND_PROP_GET(js_cc_ISystemWindowInfo_x_get) -static bool js_cc_ISystemWindowInfo_y_set(se::State& s) + +static bool js_new_Quat(se::State& s) // NOLINT(readability-identifier-naming) { - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::ISystemWindowInfo *arg1 = (cc::ISystemWindowInfo *) NULL ; + // js_ctor_dispatcher + size_t argc = s.args().size(); + bool ret = false; - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // switch all cases by means of series of if-returns. - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1->y, s.thisObject()); - SE_PRECONDITION2(ok, false, "ISystemWindowInfo_y_set,2,SWIGTYPE_int32_t"); + // js_ctor_dispatch_case + if(argc == 0) { + ret = js_new_cc_Quaternion__SWIG_0(s); + if (ret) { + return ret; + } /* reset exception and return */ + } + // js_ctor_dispatch_case + if(argc == 4) { + ret = js_new_cc_Quaternion__SWIG_1(s); + if (ret) { + return ret; + } /* reset exception and return */ + } + // js_ctor_dispatch_case + if(argc == 1) { + ret = js_new_cc_Quaternion__SWIG_2(s); + if (ret) { + return ret; + } /* reset exception and return */ + } - return true; + // js_ctor_dispatch_case + if(argc == 1) { + ret = js_new_cc_Quaternion__SWIG_3(s); + if (ret) { + return ret; + } /* reset exception and return */ + } + + // js_ctor_dispatch_case + if(argc == 2) { + ret = js_new_cc_Quaternion__SWIG_4(s); + if (ret) { + return ret; + } /* reset exception and return */ + } + + + // default: + SE_REPORT_ERROR("Illegal arguments for construction of Quat"); + return false; } -SE_BIND_PROP_SET(js_cc_ISystemWindowInfo_y_set) +SE_BIND_CTOR(js_new_Quat, __jsb_cc_Quaternion_class, js_delete_cc_Quaternion) -static bool js_cc_ISystemWindowInfo_y_get(se::State& s) +static bool js_delete_cc_Quaternion(se::State& s) { - CC_UNUSED bool ok = true; - cc::ISystemWindowInfo *arg1 = (cc::ISystemWindowInfo *) NULL ; + // js_dtoroverride + return true; +} +SE_BIND_FINALIZE_FUNC(js_delete_cc_Quaternion) + +bool js_register_cc_Quaternion(se::Object* obj) { + auto* cls = se::Class::create("Quat", obj, nullptr, _SE(js_new_Quat)); - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(arg1->y, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "ISystemWindowInfo_y_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->y, s.thisObject(), s.rval()); - return true; -} -SE_BIND_PROP_GET(js_cc_ISystemWindowInfo_y_get) - -static bool js_cc_ISystemWindowInfo_width_set(se::State& s) -{ - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::ISystemWindowInfo *arg1 = (cc::ISystemWindowInfo *) NULL ; - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1->width, s.thisObject()); - SE_PRECONDITION2(ok, false, "ISystemWindowInfo_width_set,2,SWIGTYPE_int32_t"); + cls->defineFinalizeFunction(_SE(js_delete_cc_Quaternion)); + cls->install(); + JSBClassType::registerClass(cls); + __jsb_cc_Quaternion_proto = cls->getProto(); + __jsb_cc_Quaternion_class = cls; + se::ScriptEngine::getInstance()->clearException(); return true; } -SE_BIND_PROP_SET(js_cc_ISystemWindowInfo_width_set) -static bool js_cc_ISystemWindowInfo_width_get(se::State& s) + +se::Class* __jsb_cc_CCObject_class = nullptr; +se::Object* __jsb_cc_CCObject_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_CCObject) + +static bool js_cc_CCObject_deferredDestroy_static(se::State& s) { - CC_UNUSED bool ok = true; - cc::ISystemWindowInfo *arg1 = (cc::ISystemWindowInfo *) NULL ; + // js_function - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(arg1->width, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "ISystemWindowInfo_width_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->width, s.thisObject(), s.rval()); + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + cc::CCObject::deferredDestroy(); return true; } -SE_BIND_PROP_GET(js_cc_ISystemWindowInfo_width_get) +SE_BIND_FUNC(js_cc_CCObject_deferredDestroy_static) -static bool js_cc_ISystemWindowInfo_height_set(se::State& s) +static bool js_cc_CCObject__objFlags_set(se::State& s) { CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::ISystemWindowInfo *arg1 = (cc::ISystemWindowInfo *) NULL ; + cc::CCObject *arg1 = (cc::CCObject *) NULL ; + int32_t temp2 ; - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1->height, s.thisObject()); - SE_PRECONDITION2(ok, false, "ISystemWindowInfo_height_set,2,SWIGTYPE_int32_t"); - + // %typemap(in) enum SWIGTYPE (int32_t temp2) + ok &= sevalue_to_native(args[0], &temp2); + SE_PRECONDITION2(ok, false, "CCObject__objFlags_set,2,SWIGTYPE_cc__CCObject__Flags"); + arg1->_objFlags = (cc::CCObject::Flags)temp2; return true; } -SE_BIND_PROP_SET(js_cc_ISystemWindowInfo_height_set) +SE_BIND_PROP_SET(js_cc_CCObject__objFlags_set) -static bool js_cc_ISystemWindowInfo_height_get(se::State& s) +static bool js_cc_CCObject__objFlags_get(se::State& s) { CC_UNUSED bool ok = true; - cc::ISystemWindowInfo *arg1 = (cc::ISystemWindowInfo *) NULL ; + cc::CCObject *arg1 = (cc::CCObject *) NULL ; + int32_t temp ; - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(arg1->height, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "ISystemWindowInfo_height_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->height, s.thisObject(), s.rval()); - + // out 4 + s.rval().setInt32(static_cast(arg1->_objFlags)); return true; } -SE_BIND_PROP_GET(js_cc_ISystemWindowInfo_height_get) +SE_BIND_PROP_GET(js_cc_CCObject__objFlags_get) -static bool js_cc_ISystemWindowInfo_flags_set(se::State& s) +static bool js_cc_CCObject__name_set(se::State& s) { CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::ISystemWindowInfo *arg1 = (cc::ISystemWindowInfo *) NULL ; + cc::CCObject *arg1 = (cc::CCObject *) NULL ; - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1->flags, s.thisObject()); - SE_PRECONDITION2(ok, false, "ISystemWindowInfo_flags_set,2,SWIGTYPE_int32_t"); + ok &= sevalue_to_native(args[0], &arg1->_name, s.thisObject()); + SE_PRECONDITION2(ok, false, "CCObject__name_set,2,SWIGTYPE_ccstd__string"); return true; } -SE_BIND_PROP_SET(js_cc_ISystemWindowInfo_flags_set) +SE_BIND_PROP_SET(js_cc_CCObject__name_set) -static bool js_cc_ISystemWindowInfo_flags_get(se::State& s) +static bool js_cc_CCObject__name_get(se::State& s) { CC_UNUSED bool ok = true; - cc::ISystemWindowInfo *arg1 = (cc::ISystemWindowInfo *) NULL ; + cc::CCObject *arg1 = (cc::CCObject *) NULL ; - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(arg1->flags, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "ISystemWindowInfo_flags_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->flags, s.thisObject(), s.rval()); + ok &= nativevalue_to_se(arg1->_name, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "CCObject__name_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(arg1->_name, s.thisObject(), s.rval()); return true; } -SE_BIND_PROP_GET(js_cc_ISystemWindowInfo_flags_get) +SE_BIND_PROP_GET(js_cc_CCObject__name_get) -static bool js_cc_ISystemWindowInfo_externalHandle_set(se::State& s) +static bool js_new_cc_CCObject__SWIG_0(se::State& s) // NOLINT(readability-identifier-naming) { - CC_UNUSED bool ok = true; + // js_overloaded_ctor const auto& args = s.args(); - size_t argc = args.size(); - cc::ISystemWindowInfo *arg1 = (cc::ISystemWindowInfo *) NULL ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - ok &= sevalue_to_native(args[0], &arg1->externalHandle); - SE_PRECONDITION2(ok, false, "ISystemWindowInfo_externalHandle_set,2,SWIGTYPE_p_void"); - - - return true; -} -SE_BIND_PROP_SET(js_cc_ISystemWindowInfo_externalHandle_set) - -static bool js_cc_ISystemWindowInfo_externalHandle_get(se::State& s) -{ CC_UNUSED bool ok = true; - cc::ISystemWindowInfo *arg1 = (cc::ISystemWindowInfo *) NULL ; + ccstd::string arg1 ; + cc::CCObject *result; - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(out) SWIGTYPE* - ok &= nativevalue_to_se(arg1->externalHandle, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "ISystemWindowInfo_externalHandle_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->externalHandle, s.thisObject(), s.rval()); + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg1, s.thisObject()); + SE_PRECONDITION2(ok, false, "new_CCObject,1,SWIGTYPE_ccstd__string"); + + result = (cc::CCObject *)new cc::CCObject(arg1); + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); return true; } -SE_BIND_PROP_GET(js_cc_ISystemWindowInfo_externalHandle_get) -// js_ctor -static bool js_new_cc_ISystemWindowInfo(se::State& s) // NOLINT(readability-identifier-naming) + +static bool js_new_cc_CCObject__SWIG_1(se::State& s) // NOLINT(readability-identifier-naming) { - CC_UNUSED bool ok = true; + // js_overloaded_ctor const auto& args = s.args(); - size_t argc = args.size(); - - cc::ISystemWindowInfo *result; - result = (cc::ISystemWindowInfo *)new cc::ISystemWindowInfo(); + CC_UNUSED bool ok = true; + cc::CCObject *result; + result = (cc::CCObject *)new cc::CCObject(); auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); s.thisObject()->setPrivateObject(ptr); return true; } -SE_BIND_CTOR(js_new_cc_ISystemWindowInfo, __jsb_cc_ISystemWindowInfo_class, js_delete_cc_ISystemWindowInfo) -static bool js_delete_cc_ISystemWindowInfo(se::State& s) -{ - // js_dtoroverride - return true; -} -SE_BIND_FINALIZE_FUNC(js_delete_cc_ISystemWindowInfo) -template<> -bool sevalue_to_native(const se::Value &from, cc::ISystemWindowInfo * to, se::Object *ctx) +static bool js_new_CCObject(se::State& s) // NOLINT(readability-identifier-naming) { - assert(from.isObject()); - se::Object *json = from.toObject(); - auto* data = reinterpret_cast(json->getPrivateData()); - if (data) { - *to = *data; - return true; - } - se::Value field; - bool ok = true; - - json->getProperty("title", &field, true); - if (!field.isNullOrUndefined()) { - ok &= sevalue_to_native(field, &(to->title), ctx); - } - - - json->getProperty("x", &field, true); - if (!field.isNullOrUndefined()) { - ok &= sevalue_to_native(field, &(to->x), ctx); - } - - - json->getProperty("y", &field, true); - if (!field.isNullOrUndefined()) { - ok &= sevalue_to_native(field, &(to->y), ctx); - } - - - json->getProperty("width", &field, true); - if (!field.isNullOrUndefined()) { - ok &= sevalue_to_native(field, &(to->width), ctx); - } - - - json->getProperty("height", &field, true); - if (!field.isNullOrUndefined()) { - ok &= sevalue_to_native(field, &(to->height), ctx); - } - - - json->getProperty("flags", &field, true); - if (!field.isNullOrUndefined()) { - ok &= sevalue_to_native(field, &(to->flags), ctx); - } - - - json->getProperty("externalHandle", &field, true); - if (!field.isNullOrUndefined()) { - ok &= sevalue_to_native(field, &(to->externalHandle), ctx); - } - - - return ok; -} - - -bool js_register_cc_ISystemWindowInfo(se::Object* obj) { - auto* cls = se::Class::create("ISystemWindowInfo", obj, nullptr, _SE(js_new_cc_ISystemWindowInfo)); - - cls->defineProperty("title", _SE(js_cc_ISystemWindowInfo_title_get), _SE(js_cc_ISystemWindowInfo_title_set)); - cls->defineProperty("x", _SE(js_cc_ISystemWindowInfo_x_get), _SE(js_cc_ISystemWindowInfo_x_set)); - cls->defineProperty("y", _SE(js_cc_ISystemWindowInfo_y_get), _SE(js_cc_ISystemWindowInfo_y_set)); - cls->defineProperty("width", _SE(js_cc_ISystemWindowInfo_width_get), _SE(js_cc_ISystemWindowInfo_width_set)); - cls->defineProperty("height", _SE(js_cc_ISystemWindowInfo_height_get), _SE(js_cc_ISystemWindowInfo_height_set)); - cls->defineProperty("flags", _SE(js_cc_ISystemWindowInfo_flags_get), _SE(js_cc_ISystemWindowInfo_flags_set)); - cls->defineProperty("externalHandle", _SE(js_cc_ISystemWindowInfo_externalHandle_get), _SE(js_cc_ISystemWindowInfo_externalHandle_set)); - - - + // js_ctor_dispatcher + size_t argc = s.args().size(); + bool ret = false; + // switch all cases by means of series of if-returns. - cls->defineFinalizeFunction(_SE(js_delete_cc_ISystemWindowInfo)); + // js_ctor_dispatch_case + if(argc == 1) { + ret = js_new_cc_CCObject__SWIG_0(s); + if (ret) { + return ret; + } /* reset exception and return */ + } + // js_ctor_dispatch_case + if(argc == 0) { + ret = js_new_cc_CCObject__SWIG_1(s); + if (ret) { + return ret; + } /* reset exception and return */ + } - cls->install(); - JSBClassType::registerClass(cls); - __jsb_cc_ISystemWindowInfo_proto = cls->getProto(); - __jsb_cc_ISystemWindowInfo_class = cls; - se::ScriptEngine::getInstance()->clearException(); - return true; + // default: + SE_REPORT_ERROR("Illegal arguments for construction of CCObject"); + return false; } +SE_BIND_CTOR(js_new_CCObject, __jsb_cc_CCObject_class, js_delete_cc_CCObject) +static bool js_delete_cc_CCObject(se::State& s) +{ + // js_dtoroverride + return true; +} +SE_BIND_FINALIZE_FUNC(js_delete_cc_CCObject) -se::Class* __jsb_cc_ISystemWindowManager_class = nullptr; -se::Object* __jsb_cc_ISystemWindowManager_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_ISystemWindowManager) - -static bool js_cc_ISystemWindowManager_init(se::State& s) +static bool js_cc_CCObject__destroy(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::ISystemWindowManager *arg1 = (cc::ISystemWindowManager *) NULL ; - int result; + cc::CCObject *arg1 = (cc::CCObject *) NULL ; + bool result; if(argc != 0) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (int)(arg1)->init(); - - // out 1 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + result = (bool)(arg1)->destroy(); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); return true; } -SE_BIND_FUNC(js_cc_ISystemWindowManager_init) +SE_BIND_FUNC(js_cc_CCObject__destroy) -static bool js_cc_ISystemWindowManager_processEvent(se::State& s) +static bool js_cc_CCObject__destroyImmediate(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::ISystemWindowManager *arg1 = (cc::ISystemWindowManager *) NULL ; - bool *arg2 = (bool *) NULL ; + cc::CCObject *arg1 = (cc::CCObject *) NULL ; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE* - ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "ISystemWindowManager_processEvent,2,SWIGTYPE_p_bool"); - (arg1)->processEvent(arg2); + (arg1)->destroyImmediate(); return true; } -SE_BIND_FUNC(js_cc_ISystemWindowManager_processEvent) +SE_BIND_FUNC(js_cc_CCObject__destroyImmediate) -static bool js_cc_ISystemWindowManager_swapWindows(se::State& s) +static bool js_cc_CCObject_toString(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::ISystemWindowManager *arg1 = (cc::ISystemWindowManager *) NULL ; + cc::CCObject *arg1 = (cc::CCObject *) NULL ; + ccstd::string result; if(argc != 0) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - (arg1)->swapWindows(); + result = ((cc::CCObject const *)arg1)->toString(); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "CCObject_toString, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + return true; } -SE_BIND_FUNC(js_cc_ISystemWindowManager_swapWindows) +SE_BIND_FUNC(js_cc_CCObject_toString) -static bool js_cc_ISystemWindowManager_createWindow(se::State& s) +static bool js_cc_CCObject_name_set(se::State& s) { - // js_function - CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::ISystemWindowManager *arg1 = (cc::ISystemWindowManager *) NULL ; - cc::ISystemWindowInfo *arg2 = 0 ; - cc::ISystemWindowInfo temp2 ; - cc::ISystemWindow *result = 0 ; + cc::CCObject *arg1 = (cc::CCObject *) NULL ; + ccstd::string *arg2 = 0 ; + ccstd::string temp2 ; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE& ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "ISystemWindowManager_createWindow,2,SWIGTYPE_p_cc__ISystemWindowInfo"); + SE_PRECONDITION2(ok, false, "CCObject_name_set,2,SWIGTYPE_p_ccstd__string"); arg2 = &temp2; - result = (cc::ISystemWindow *)(arg1)->createWindow((cc::ISystemWindowInfo const &)*arg2); - // %typemap(out) SWIGTYPE* - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "ISystemWindowManager_createWindow, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + cc_CCObject_name_set(arg1,*arg2); return true; } -SE_BIND_FUNC(js_cc_ISystemWindowManager_createWindow) +SE_BIND_PROP_SET(js_cc_CCObject_name_set) -static bool js_cc_ISystemWindowManager_getWindow(se::State& s) +static bool js_cc_CCObject_name_get(se::State& s) { - // js_function + CC_UNUSED bool ok = true; + cc::CCObject *arg1 = (cc::CCObject *) NULL ; + ccstd::string *result = 0 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (ccstd::string *) &cc_CCObject_name_get(arg1); + // %typemap(out) SWIGTYPE& + ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "CCObject_name_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); + + return true; +} +SE_BIND_PROP_GET(js_cc_CCObject_name_get) + +static bool js_cc_CCObject_hideFlags_set(se::State& s) +{ CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::ISystemWindowManager *arg1 = (cc::ISystemWindowManager *) NULL ; - uint32_t arg2 ; - cc::ISystemWindow *result = 0 ; + cc::CCObject *arg1 = (cc::CCObject *) NULL ; + cc::CCObject::Flags arg2 ; + int32_t temp2 ; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) enum SWIGTYPE (int32_t temp2) + ok &= sevalue_to_native(args[0], &temp2); + SE_PRECONDITION2(ok, false, "CCObject_hideFlags_set,2,SWIGTYPE_cc__CCObject__Flags"); + arg2 = (cc::CCObject::Flags)temp2; + cc_CCObject_hideFlags_set(arg1,arg2); - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "ISystemWindowManager_getWindow,2,SWIGTYPE_uint32_t"); - result = (cc::ISystemWindow *)((cc::ISystemWindowManager const *)arg1)->getWindow(arg2); - // %typemap(out) SWIGTYPE* - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "ISystemWindowManager_getWindow, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + return true; +} +SE_BIND_PROP_SET(js_cc_CCObject_hideFlags_set) + +static bool js_cc_CCObject_hideFlags_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::CCObject *arg1 = (cc::CCObject *) NULL ; + cc::CCObject::Flags result; + int32_t temp ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (cc::CCObject::Flags)cc_CCObject_hideFlags_get(arg1); + // out 4 + s.rval().setInt32(static_cast(result)); return true; } -SE_BIND_FUNC(js_cc_ISystemWindowManager_getWindow) +SE_BIND_PROP_GET(js_cc_CCObject_hideFlags_get) -static bool js_cc_ISystemWindowManager_getWindows(se::State& s) +static bool js_cc_CCObject_replicated_set(se::State& s) { - // js_function - CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::ISystemWindowManager *arg1 = (cc::ISystemWindowManager *) NULL ; - cc::SystemWindowMap *result = 0 ; + cc::CCObject *arg1 = (cc::CCObject *) NULL ; + bool arg2 ; - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (cc::SystemWindowMap *) &((cc::ISystemWindowManager const *)arg1)->getWindows(); - // %typemap(out) SWIGTYPE& - ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "ISystemWindowManager_getWindows, Error processing arguments"); - SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); + // %typemap(in) bool + ok &= sevalue_to_native(args[0], &arg2); + SE_PRECONDITION2(ok, false, "CCObject_replicated_set,2,SWIGTYPE_bool"); + cc_CCObject_replicated_set(arg1,arg2); return true; } -SE_BIND_FUNC(js_cc_ISystemWindowManager_getWindows) +SE_BIND_PROP_SET(js_cc_CCObject_replicated_set) -static bool js_delete_cc_ISystemWindowManager(se::State& s) +static bool js_cc_CCObject_replicated_get(se::State& s) { - // js_dtoroverride + CC_UNUSED bool ok = true; + cc::CCObject *arg1 = (cc::CCObject *) NULL ; + bool result; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (bool)cc_CCObject_replicated_get(arg1); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + + return true; } -SE_BIND_FINALIZE_FUNC(js_delete_cc_ISystemWindowManager) +SE_BIND_PROP_GET(js_cc_CCObject_replicated_get) -bool js_register_cc_ISystemWindowManager(se::Object* obj) { - auto* cls = se::Class::create("ISystemWindowManager", obj, nullptr, nullptr); +static bool js_cc_CCObject_isValid_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::CCObject *arg1 = (cc::CCObject *) NULL ; + bool result; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (bool)cc_CCObject_isValid_get(arg1); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - cls->defineFunction("init", _SE(js_cc_ISystemWindowManager_init)); - cls->defineFunction("processEvent", _SE(js_cc_ISystemWindowManager_processEvent)); - cls->defineFunction("swapWindows", _SE(js_cc_ISystemWindowManager_swapWindows)); - cls->defineFunction("createWindow", _SE(js_cc_ISystemWindowManager_createWindow)); - cls->defineFunction("getWindow", _SE(js_cc_ISystemWindowManager_getWindow)); - cls->defineFunction("getWindows", _SE(js_cc_ISystemWindowManager_getWindows)); + return true; +} +SE_BIND_PROP_GET(js_cc_CCObject_isValid_get) + +bool js_register_cc_CCObject(se::Object* obj) { + auto* cls = se::Class::create("CCObject", obj, nullptr, _SE(js_new_CCObject)); + + cls->defineProperty("_objFlags", _SE(js_cc_CCObject__objFlags_get), _SE(js_cc_CCObject__objFlags_set)); + cls->defineProperty("_name", _SE(js_cc_CCObject__name_get), _SE(js_cc_CCObject__name_set)); + cls->defineProperty("name", _SE(js_cc_CCObject_name_get), _SE(js_cc_CCObject_name_set)); + cls->defineProperty("hideFlags", _SE(js_cc_CCObject_hideFlags_get), _SE(js_cc_CCObject_hideFlags_set)); + cls->defineProperty("replicated", _SE(js_cc_CCObject_replicated_get), _SE(js_cc_CCObject_replicated_set)); + cls->defineProperty("isValid", _SE(js_cc_CCObject_isValid_get), nullptr); + + cls->defineFunction("_destroy", _SE(js_cc_CCObject__destroy)); + cls->defineFunction("_destroyImmediate", _SE(js_cc_CCObject__destroyImmediate)); + cls->defineFunction("toString", _SE(js_cc_CCObject_toString)); + cls->defineStaticFunction("deferredDestroy", _SE(js_cc_CCObject_deferredDestroy_static)); - cls->defineFinalizeFunction(_SE(js_delete_cc_ISystemWindowManager)); + cls->defineFinalizeFunction(_SE(js_delete_cc_CCObject)); cls->install(); - JSBClassType::registerClass(cls); + JSBClassType::registerClass(cls); - __jsb_cc_ISystemWindowManager_proto = cls->getProto(); - __jsb_cc_ISystemWindowManager_class = cls; + __jsb_cc_CCObject_proto = cls->getProto(); + __jsb_cc_CCObject_class = cls; se::ScriptEngine::getInstance()->clearException(); return true; } -se::Class* __jsb_cc_FileUtils_class = nullptr; -se::Object* __jsb_cc_FileUtils_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_FileUtils) - -static bool js_cc_FileUtils_getInstance_static(se::State& s) +static bool js_cc_isObjectValid__SWIG_0(se::State& s) { - // js_function + // js_overloaded_function CC_UNUSED bool ok = true; const auto& args = s.args(); - size_t argc = args.size(); - cc::FileUtils *result = 0 ; + cc::CCObject *arg1 = (cc::CCObject *) NULL ; + bool arg2 ; + bool result; - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } - result = (cc::FileUtils *)cc::FileUtils::getInstance(); - // %typemap(out) SWIGTYPE* + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg1, s.thisObject()); + SE_PRECONDITION2(ok, false, "isObjectValid,1,SWIGTYPE_p_cc__CCObject"); + // %typemap(in) bool + ok &= sevalue_to_native(args[1], &arg2); + SE_PRECONDITION2(ok, false, "isObjectValid,2,SWIGTYPE_bool"); + result = (bool)cc::isObjectValid(arg1,arg2); + // out 5 ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "FileUtils_getInstance, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); return true; } -SE_BIND_FUNC(js_cc_FileUtils_getInstance_static) - -static bool js_delete_cc_FileUtils(se::State& s) -{ - // js_dtoroverride - return true; -} -SE_BIND_FINALIZE_FUNC(js_delete_cc_FileUtils) -static bool js_cc_FileUtils_purgeCachedEntries(se::State& s) +static bool js_cc_isObjectValid__SWIG_1(se::State& s) { - // js_function + // js_overloaded_function CC_UNUSED bool ok = true; const auto& args = s.args(); - size_t argc = args.size(); - cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; + cc::CCObject *arg1 = (cc::CCObject *) NULL ; + bool result; - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - (arg1)->purgeCachedEntries(); + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg1, s.thisObject()); + SE_PRECONDITION2(ok, false, "isObjectValid,1,SWIGTYPE_p_cc__CCObject"); + result = (bool)cc::isObjectValid(arg1); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); return true; } -SE_BIND_FUNC(js_cc_FileUtils_purgeCachedEntries) -static bool js_cc_FileUtils_getStringFromFile(se::State& s) +static bool js_cc_isObjectValid(se::State& s) { - // js_function - + // js_function_dispatcher CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; - ccstd::string *arg2 = 0 ; - ccstd::string temp2 ; - ccstd::string result; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "FileUtils_getStringFromFile,2,SWIGTYPE_p_ccstd__string"); - arg2 = &temp2; + // js_function_dispatch_case + if (argc == 2) { + ok = js_cc_isObjectValid__SWIG_0(s); + if (ok) { + return true; + } + } // js_function_dispatch_case + if (argc == 1) { + ok = js_cc_isObjectValid__SWIG_1(s); + if (ok) { + return true; + } + } + SE_REPORT_ERROR("wrong number of arguments: %d", (int)argc); + return false; +} +SE_BIND_FUNC(js_cc_isObjectValid) + +se::Class* __jsb_cc_JSBNativeDataHolder_class = nullptr; +se::Object* __jsb_cc_JSBNativeDataHolder_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_JSBNativeDataHolder) + +static bool js_new_cc_JSBNativeDataHolder__SWIG_0(se::State& s) // NOLINT(readability-identifier-naming) +{ + // js_overloaded_ctor + const auto& args = s.args(); + CC_UNUSED bool ok = true; + cc::JSBNativeDataHolder *result; + result = (cc::JSBNativeDataHolder *)new cc::JSBNativeDataHolder(); - result = (arg1)->getStringFromFile((ccstd::string const &)*arg2); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "FileUtils_getStringFromFile, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); + return true; +} + + +static bool js_new_cc_JSBNativeDataHolder__SWIG_1(se::State& s) // NOLINT(readability-identifier-naming) +{ + // js_overloaded_ctor + const auto& args = s.args(); + CC_UNUSED bool ok = true; + uint8_t *arg1 = (uint8_t *) NULL ; + cc::JSBNativeDataHolder *result; + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg1, s.thisObject()); + SE_PRECONDITION2(ok, false, "new_JSBNativeDataHolder,1,SWIGTYPE_p_uint8_t"); + result = (cc::JSBNativeDataHolder *)new cc::JSBNativeDataHolder(arg1); + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); return true; } -SE_BIND_FUNC(js_cc_FileUtils_getStringFromFile) -static bool js_cc_FileUtils_getDataFromFile(se::State& s) + +static bool js_new_JSBNativeDataHolder(se::State& s) // NOLINT(readability-identifier-naming) { - // js_function + // js_ctor_dispatcher + size_t argc = s.args().size(); + bool ret = false; - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; - ccstd::string *arg2 = 0 ; - ccstd::string temp2 ; - cc::Data result; + // switch all cases by means of series of if-returns. - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; + // js_ctor_dispatch_case + if(argc == 0) { + ret = js_new_cc_JSBNativeDataHolder__SWIG_0(s); + if (ret) { + return ret; + } /* reset exception and return */ } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "FileUtils_getDataFromFile,2,SWIGTYPE_p_ccstd__string"); - arg2 = &temp2; - - result = (arg1)->getDataFromFile((ccstd::string const &)*arg2); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "FileUtils_getDataFromFile, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + // js_ctor_dispatch_case + if(argc == 1) { + ret = js_new_cc_JSBNativeDataHolder__SWIG_1(s); + if (ret) { + return ret; + } /* reset exception and return */ + } + // default: + SE_REPORT_ERROR("Illegal arguments for construction of JSBNativeDataHolder"); + return false; +} +SE_BIND_CTOR(js_new_JSBNativeDataHolder, __jsb_cc_JSBNativeDataHolder_class, js_delete_cc_JSBNativeDataHolder) + +static bool js_delete_cc_JSBNativeDataHolder(se::State& s) +{ + // js_dtoroverride return true; } -SE_BIND_FUNC(js_cc_FileUtils_getDataFromFile) +SE_BIND_FINALIZE_FUNC(js_delete_cc_JSBNativeDataHolder) -static bool js_cc_FileUtils_getFileDataFromZip(se::State& s) +static bool js_cc_JSBNativeDataHolder_destroy(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; - ccstd::string *arg2 = 0 ; - ccstd::string *arg3 = 0 ; - uint32_t *arg4 = (uint32_t *) NULL ; - ccstd::string temp2 ; - ccstd::string temp3 ; - unsigned char *result = 0 ; + cc::JSBNativeDataHolder *arg1 = (cc::JSBNativeDataHolder *) NULL ; - if(argc != 3) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "FileUtils_getFileDataFromZip,2,SWIGTYPE_p_ccstd__string"); - arg2 = &temp2; - - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[1], &temp3, s.thisObject()); - SE_PRECONDITION2(ok, false, "FileUtils_getFileDataFromZip,3,SWIGTYPE_p_ccstd__string"); - arg3 = &temp3; - - // %typemap(in) SWIGTYPE* - ok &= sevalue_to_native(args[2], &arg4, s.thisObject()); - SE_PRECONDITION2(ok, false, "FileUtils_getFileDataFromZip,4,SWIGTYPE_p_uint32_t"); - result = (unsigned char *)(arg1)->getFileDataFromZip((ccstd::string const &)*arg2,(ccstd::string const &)*arg3,arg4); - // %typemap(out) SWIGTYPE* - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "FileUtils_getFileDataFromZip, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + (arg1)->destroy(); return true; } -SE_BIND_FUNC(js_cc_FileUtils_getFileDataFromZip) +SE_BIND_FUNC(js_cc_JSBNativeDataHolder_destroy) -static bool js_cc_FileUtils_fullPathForFilename(se::State& s) -{ - // js_function +bool js_register_cc_JSBNativeDataHolder(se::Object* obj) { + auto* cls = se::Class::create("JSBNativeDataHolder", obj, nullptr, _SE(js_new_JSBNativeDataHolder)); - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; - ccstd::string *arg2 = 0 ; - ccstd::string temp2 ; - ccstd::string result; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "FileUtils_fullPathForFilename,2,SWIGTYPE_p_ccstd__string"); - arg2 = &temp2; + cls->defineFunction("destroy", _SE(js_cc_JSBNativeDataHolder_destroy)); - result = ((cc::FileUtils const *)arg1)->fullPathForFilename((ccstd::string const &)*arg2); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "FileUtils_fullPathForFilename, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + cls->defineFinalizeFunction(_SE(js_delete_cc_JSBNativeDataHolder)); + + + cls->install(); + JSBClassType::registerClass(cls); + + __jsb_cc_JSBNativeDataHolder_proto = cls->getProto(); + __jsb_cc_JSBNativeDataHolder_class = cls; + se::ScriptEngine::getInstance()->clearException(); return true; } -SE_BIND_FUNC(js_cc_FileUtils_fullPathForFilename) -static bool js_cc_FileUtils_fullPathFromRelativeFile(se::State& s) + +se::Class* __jsb_cc_ICanvasGradient_class = nullptr; +se::Object* __jsb_cc_ICanvasGradient_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_ICanvasGradient) + +static bool js_delete_cc_ICanvasGradient(se::State& s) +{ + // js_dtoroverride + return true; +} +SE_BIND_FINALIZE_FUNC(js_delete_cc_ICanvasGradient) + +static bool js_cc_ICanvasGradient_addColorStop(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; - ccstd::string *arg2 = 0 ; + cc::ICanvasGradient *arg1 = (cc::ICanvasGradient *) NULL ; + float arg2 ; ccstd::string *arg3 = 0 ; - ccstd::string temp2 ; ccstd::string temp3 ; - ccstd::string result; if(argc != 2) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "FileUtils_fullPathFromRelativeFile,2,SWIGTYPE_p_ccstd__string"); - arg2 = &temp2; - + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "ICanvasGradient_addColorStop,2,SWIGTYPE_float"); // %typemap(in) SWIGTYPE& ok &= sevalue_to_native(args[1], &temp3, s.thisObject()); - SE_PRECONDITION2(ok, false, "FileUtils_fullPathFromRelativeFile,3,SWIGTYPE_p_ccstd__string"); + SE_PRECONDITION2(ok, false, "ICanvasGradient_addColorStop,3,SWIGTYPE_p_ccstd__string"); arg3 = &temp3; - result = (arg1)->fullPathFromRelativeFile((ccstd::string const &)*arg2,(ccstd::string const &)*arg3); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "FileUtils_fullPathFromRelativeFile, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - + (arg1)->addColorStop(arg2,(ccstd::string const &)*arg3); return true; } -SE_BIND_FUNC(js_cc_FileUtils_fullPathFromRelativeFile) +SE_BIND_FUNC(js_cc_ICanvasGradient_addColorStop) -static bool js_cc_FileUtils_setSearchPaths(se::State& s) -{ - // js_function +bool js_register_cc_ICanvasGradient(se::Object* obj) { + auto* cls = se::Class::create("ICanvasGradient", obj, nullptr, nullptr); + + + cls->defineFunction("addColorStop", _SE(js_cc_ICanvasGradient_addColorStop)); - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; - ccstd::vector< ccstd::string > *arg2 = 0 ; - ccstd::vector< ccstd::string > temp2 ; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "FileUtils_setSearchPaths,2,SWIGTYPE_p_ccstd__vectorT_ccstd__string_t"); - arg2 = &temp2; - (arg1)->setSearchPaths((ccstd::vector< ccstd::string > const &)*arg2); + cls->defineFinalizeFunction(_SE(js_delete_cc_ICanvasGradient)); + + + cls->install(); + JSBClassType::registerClass(cls); + __jsb_cc_ICanvasGradient_proto = cls->getProto(); + __jsb_cc_ICanvasGradient_class = cls; + se::ScriptEngine::getInstance()->clearException(); return true; } -SE_BIND_FUNC(js_cc_FileUtils_setSearchPaths) -static bool js_cc_FileUtils_getDefaultResourceRootPath(se::State& s) + +se::Class* __jsb_cc_ICanvasRenderingContext2D_class = nullptr; +se::Object* __jsb_cc_ICanvasRenderingContext2D_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_ICanvasRenderingContext2D) + +static bool js_cc_ICanvasRenderingContext2D_rect(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; - ccstd::string *result = 0 ; + cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; + float arg2 ; + float arg3 ; + float arg4 ; + float arg5 ; - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + if(argc != 4) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 4); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (ccstd::string *) &((cc::FileUtils const *)arg1)->getDefaultResourceRootPath(); - // %typemap(out) SWIGTYPE& - ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "FileUtils_getDefaultResourceRootPath, Error processing arguments"); - SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_rect,2,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_rect,3,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[2], &arg4, nullptr); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_rect,4,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[3], &arg5, nullptr); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_rect,5,SWIGTYPE_float"); + (arg1)->rect(arg2,arg3,arg4,arg5); return true; } -SE_BIND_FUNC(js_cc_FileUtils_getDefaultResourceRootPath) +SE_BIND_FUNC(js_cc_ICanvasRenderingContext2D_rect) -static bool js_cc_FileUtils_setDefaultResourceRootPath(se::State& s) +static bool js_cc_ICanvasRenderingContext2D_clearRect(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; - ccstd::string *arg2 = 0 ; - ccstd::string temp2 ; + cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; + float arg2 ; + float arg3 ; + float arg4 ; + float arg5 ; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + if(argc != 4) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 4); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "FileUtils_setDefaultResourceRootPath,2,SWIGTYPE_p_ccstd__string"); - arg2 = &temp2; - - (arg1)->setDefaultResourceRootPath((ccstd::string const &)*arg2); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_clearRect,2,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_clearRect,3,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[2], &arg4, nullptr); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_clearRect,4,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[3], &arg5, nullptr); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_clearRect,5,SWIGTYPE_float"); + (arg1)->clearRect(arg2,arg3,arg4,arg5); return true; } -SE_BIND_FUNC(js_cc_FileUtils_setDefaultResourceRootPath) +SE_BIND_FUNC(js_cc_ICanvasRenderingContext2D_clearRect) -static bool js_cc_FileUtils_addSearchPath__SWIG_0(se::State& s) +static bool js_cc_ICanvasRenderingContext2D_createLinearGradient(se::State& s) { - // js_overloaded_function + // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); - cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; - ccstd::string *arg2 = 0 ; - bool arg3 ; - ccstd::string temp2 ; + size_t argc = args.size(); + cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; + float arg2 ; + float arg3 ; + float arg4 ; + float arg5 ; + cc::ICanvasGradient *result = 0 ; - arg1 = SE_THIS_OBJECT(s); + if(argc != 4) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 4); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "FileUtils_addSearchPath,2,SWIGTYPE_p_ccstd__string"); - arg2 = &temp2; - - // %typemap(in) bool - ok &= sevalue_to_native(args[1], &arg3); - SE_PRECONDITION2(ok, false, "FileUtils_addSearchPath,3,SWIGTYPE_bool"); - (arg1)->addSearchPath((ccstd::string const &)*arg2,arg3); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_createLinearGradient,2,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_createLinearGradient,3,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[2], &arg4, nullptr); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_createLinearGradient,4,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[3], &arg5, nullptr); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_createLinearGradient,5,SWIGTYPE_float"); + result = (cc::ICanvasGradient *)(arg1)->createLinearGradient(arg2,arg3,arg4,arg5); + // %typemap(out) SWIGTYPE* + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_createLinearGradient, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); return true; } +SE_BIND_FUNC(js_cc_ICanvasRenderingContext2D_createLinearGradient) -static bool js_cc_FileUtils_addSearchPath__SWIG_1(se::State& s) +static bool js_cc_ICanvasRenderingContext2D_save(se::State& s) { - // js_overloaded_function + // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); - cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; - ccstd::string *arg2 = 0 ; - ccstd::string temp2 ; + size_t argc = args.size(); + cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; - arg1 = SE_THIS_OBJECT(s); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "FileUtils_addSearchPath,2,SWIGTYPE_p_ccstd__string"); - arg2 = &temp2; - - (arg1)->addSearchPath((ccstd::string const &)*arg2); + (arg1)->save(); return true; } +SE_BIND_FUNC(js_cc_ICanvasRenderingContext2D_save) -static bool js_cc_FileUtils_addSearchPath(se::State& s) -{ - // js_function_dispatcher - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - - // js_function_dispatch_case - if (argc == 2) { - ok = js_cc_FileUtils_addSearchPath__SWIG_0(s); - if (ok) { - return true; - } - } // js_function_dispatch_case - if (argc == 1) { - ok = js_cc_FileUtils_addSearchPath__SWIG_1(s); - if (ok) { - return true; - } - } - SE_REPORT_ERROR("wrong number of arguments: %d", (int)argc); - return false; -} -SE_BIND_FUNC(js_cc_FileUtils_addSearchPath) - -static bool js_cc_FileUtils_getSearchPaths(se::State& s) +static bool js_cc_ICanvasRenderingContext2D_beginPath(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; - ccstd::vector< ccstd::string > *result = 0 ; + cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; if(argc != 0) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (ccstd::vector< ccstd::string > *) &((cc::FileUtils const *)arg1)->getSearchPaths(); - // %typemap(out) SWIGTYPE& - ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "FileUtils_getSearchPaths, Error processing arguments"); - SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); + (arg1)->beginPath(); return true; } -SE_BIND_FUNC(js_cc_FileUtils_getSearchPaths) +SE_BIND_FUNC(js_cc_ICanvasRenderingContext2D_beginPath) -static bool js_cc_FileUtils_getOriginalSearchPaths(se::State& s) +static bool js_cc_ICanvasRenderingContext2D_closePath(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; - ccstd::vector< ccstd::string > *result = 0 ; + cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; if(argc != 0) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (ccstd::vector< ccstd::string > *) &((cc::FileUtils const *)arg1)->getOriginalSearchPaths(); - // %typemap(out) SWIGTYPE& - ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "FileUtils_getOriginalSearchPaths, Error processing arguments"); - SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); + (arg1)->closePath(); return true; } -SE_BIND_FUNC(js_cc_FileUtils_getOriginalSearchPaths) +SE_BIND_FUNC(js_cc_ICanvasRenderingContext2D_closePath) -static bool js_cc_FileUtils_getWritablePath(se::State& s) +static bool js_cc_ICanvasRenderingContext2D_moveTo(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; - ccstd::string result; + cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; + float arg2 ; + float arg3 ; - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + if(argc != 2) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = ((cc::FileUtils const *)arg1)->getWritablePath(); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "FileUtils_getWritablePath, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_moveTo,2,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_moveTo,3,SWIGTYPE_float"); + (arg1)->moveTo(arg2,arg3); return true; } -SE_BIND_FUNC(js_cc_FileUtils_getWritablePath) +SE_BIND_FUNC(js_cc_ICanvasRenderingContext2D_moveTo) -static bool js_cc_FileUtils_setWritablePath(se::State& s) +static bool js_cc_ICanvasRenderingContext2D_lineTo(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; - ccstd::string *arg2 = 0 ; - ccstd::string temp2 ; + cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; + float arg2 ; + float arg3 ; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + if(argc != 2) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "FileUtils_setWritablePath,2,SWIGTYPE_p_ccstd__string"); - arg2 = &temp2; - - (arg1)->setWritablePath((ccstd::string const &)*arg2); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_lineTo,2,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_lineTo,3,SWIGTYPE_float"); + (arg1)->lineTo(arg2,arg3); return true; } -SE_BIND_FUNC(js_cc_FileUtils_setWritablePath) +SE_BIND_FUNC(js_cc_ICanvasRenderingContext2D_lineTo) -static bool js_cc_FileUtils_getValueMapFromFile(se::State& s) +static bool js_cc_ICanvasRenderingContext2D_fill(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; - ccstd::string *arg2 = 0 ; - ccstd::string temp2 ; - cc::ValueMap result; + cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "FileUtils_getValueMapFromFile,2,SWIGTYPE_p_ccstd__string"); - arg2 = &temp2; - - result = (arg1)->getValueMapFromFile((ccstd::string const &)*arg2); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "FileUtils_getValueMapFromFile, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - + (arg1)->fill(); return true; } -SE_BIND_FUNC(js_cc_FileUtils_getValueMapFromFile) +SE_BIND_FUNC(js_cc_ICanvasRenderingContext2D_fill) -static bool js_cc_FileUtils_getValueMapFromData(se::State& s) +static bool js_cc_ICanvasRenderingContext2D_stroke(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; - char *arg2 = (char *) NULL ; - int arg3 ; - ccstd::string temp2 ; - cc::ValueMap result; + cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; - if(argc != 2) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - ok &= sevalue_to_native(args[0], &temp2); - SE_PRECONDITION2(ok, false, "FileUtils_getValueMapFromData,2,SWIGTYPE_p_char"); - arg2 = (char *) temp2.c_str(); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[1], &arg3, nullptr); - SE_PRECONDITION2(ok, false, "FileUtils_getValueMapFromData,3,SWIGTYPE_int"); - result = (arg1)->getValueMapFromData((char const *)arg2,arg3); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "FileUtils_getValueMapFromData, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - + (arg1)->stroke(); return true; } -SE_BIND_FUNC(js_cc_FileUtils_getValueMapFromData) +SE_BIND_FUNC(js_cc_ICanvasRenderingContext2D_stroke) -static bool js_cc_FileUtils_writeToFile(se::State& s) +static bool js_cc_ICanvasRenderingContext2D_restore(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; - cc::ValueMap *arg2 = 0 ; - ccstd::string *arg3 = 0 ; - cc::ValueMap temp2 ; - ccstd::string temp3 ; - bool result; + cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; - if(argc != 2) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "FileUtils_writeToFile,2,SWIGTYPE_p_ccstd__unordered_mapT_ccstd__string_cc__Value_t"); - arg2 = &temp2; + (arg1)->restore(); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[1], &temp3, s.thisObject()); - SE_PRECONDITION2(ok, false, "FileUtils_writeToFile,3,SWIGTYPE_p_ccstd__string"); - arg3 = &temp3; - result = (bool)(arg1)->writeToFile((cc::ValueMap const &)*arg2,(ccstd::string const &)*arg3); - // out 5 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + return true; +} +SE_BIND_FUNC(js_cc_ICanvasRenderingContext2D_restore) + +static bool js_cc_ICanvasRenderingContext2D_setShadowBlur(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; + float arg2 ; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_setShadowBlur,2,SWIGTYPE_float"); + (arg1)->setShadowBlur(arg2); return true; } -SE_BIND_FUNC(js_cc_FileUtils_writeToFile) +SE_BIND_FUNC(js_cc_ICanvasRenderingContext2D_setShadowBlur) -static bool js_cc_FileUtils_writeStringToFile(se::State& s) +static bool js_cc_ICanvasRenderingContext2D_setShadowColor(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; + cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; ccstd::string *arg2 = 0 ; - ccstd::string *arg3 = 0 ; ccstd::string temp2 ; - ccstd::string temp3 ; - bool result; - if(argc != 2) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE& ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "FileUtils_writeStringToFile,2,SWIGTYPE_p_ccstd__string"); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_setShadowColor,2,SWIGTYPE_p_ccstd__string"); arg2 = &temp2; - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[1], &temp3, s.thisObject()); - SE_PRECONDITION2(ok, false, "FileUtils_writeStringToFile,3,SWIGTYPE_p_ccstd__string"); - arg3 = &temp3; - - result = (bool)(arg1)->writeStringToFile((ccstd::string const &)*arg2,(ccstd::string const &)*arg3); - // out 5 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + (arg1)->setShadowColor((ccstd::string const &)*arg2); return true; } -SE_BIND_FUNC(js_cc_FileUtils_writeStringToFile) +SE_BIND_FUNC(js_cc_ICanvasRenderingContext2D_setShadowColor) -static bool js_cc_FileUtils_writeDataToFile(se::State& s) +static bool js_cc_ICanvasRenderingContext2D_setShadowOffsetX(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; - cc::Data *arg2 = 0 ; - ccstd::string *arg3 = 0 ; - cc::Data temp2 ; - ccstd::string temp3 ; - bool result; + cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; + float arg2 ; - if(argc != 2) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "FileUtils_writeDataToFile,2,SWIGTYPE_p_cc__Data"); - arg2 = &temp2; - - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[1], &temp3, s.thisObject()); - SE_PRECONDITION2(ok, false, "FileUtils_writeDataToFile,3,SWIGTYPE_p_ccstd__string"); - arg3 = &temp3; - - result = (bool)(arg1)->writeDataToFile((cc::Data const &)*arg2,(ccstd::string const &)*arg3); - // out 5 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_setShadowOffsetX,2,SWIGTYPE_float"); + (arg1)->setShadowOffsetX(arg2); return true; } -SE_BIND_FUNC(js_cc_FileUtils_writeDataToFile) +SE_BIND_FUNC(js_cc_ICanvasRenderingContext2D_setShadowOffsetX) -static bool js_cc_FileUtils_writeValueMapToFile(se::State& s) +static bool js_cc_ICanvasRenderingContext2D_setShadowOffsetY(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; - cc::ValueMap *arg2 = 0 ; - ccstd::string *arg3 = 0 ; - cc::ValueMap temp2 ; - ccstd::string temp3 ; - bool result; + cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; + float arg2 ; - if(argc != 2) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "FileUtils_writeValueMapToFile,2,SWIGTYPE_p_ccstd__unordered_mapT_ccstd__string_cc__Value_t"); - arg2 = &temp2; - - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[1], &temp3, s.thisObject()); - SE_PRECONDITION2(ok, false, "FileUtils_writeValueMapToFile,3,SWIGTYPE_p_ccstd__string"); - arg3 = &temp3; - - result = (bool)(arg1)->writeValueMapToFile((cc::ValueMap const &)*arg2,(ccstd::string const &)*arg3); - // out 5 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_setShadowOffsetY,2,SWIGTYPE_float"); + (arg1)->setShadowOffsetY(arg2); return true; } -SE_BIND_FUNC(js_cc_FileUtils_writeValueMapToFile) +SE_BIND_FUNC(js_cc_ICanvasRenderingContext2D_setShadowOffsetY) -static bool js_cc_FileUtils_writeValueVectorToFile(se::State& s) +static bool js_cc_ICanvasRenderingContext2D_fillImageData(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; - cc::ValueVector *arg2 = 0 ; - ccstd::string *arg3 = 0 ; - cc::ValueVector temp2 ; - ccstd::string temp3 ; - bool result; + cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; + cc::Data *arg2 = 0 ; + float arg3 ; + float arg4 ; + float arg5 ; + float arg6 ; + cc::Data temp2 ; - if(argc != 2) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); + if(argc != 5) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 5); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE& ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "FileUtils_writeValueVectorToFile,2,SWIGTYPE_p_ccstd__vectorT_cc__Value_t"); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_fillImageData,2,SWIGTYPE_p_cc__Data"); arg2 = &temp2; - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[1], &temp3, s.thisObject()); - SE_PRECONDITION2(ok, false, "FileUtils_writeValueVectorToFile,3,SWIGTYPE_p_ccstd__string"); - arg3 = &temp3; - - result = (bool)(arg1)->writeValueVectorToFile((cc::ValueVector const &)*arg2,(ccstd::string const &)*arg3); - // out 5 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_fillImageData,3,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[2], &arg4, nullptr); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_fillImageData,4,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[3], &arg5, nullptr); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_fillImageData,5,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[4], &arg6, nullptr); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_fillImageData,6,SWIGTYPE_float"); + (arg1)->fillImageData((cc::Data const &)*arg2,arg3,arg4,arg5,arg6); return true; } -SE_BIND_FUNC(js_cc_FileUtils_writeValueVectorToFile) +SE_BIND_FUNC(js_cc_ICanvasRenderingContext2D_fillImageData) -static bool js_cc_FileUtils_getSuitableFOpen(se::State& s) +static bool js_cc_ICanvasRenderingContext2D_translate(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; - ccstd::string *arg2 = 0 ; - ccstd::string temp2 ; - ccstd::string result; + cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; + float arg2 ; + float arg3 ; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + if(argc != 2) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "FileUtils_getSuitableFOpen,2,SWIGTYPE_p_ccstd__string"); - arg2 = &temp2; - - result = ((cc::FileUtils const *)arg1)->getSuitableFOpen((ccstd::string const &)*arg2); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "FileUtils_getSuitableFOpen, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_translate,2,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_translate,3,SWIGTYPE_float"); + (arg1)->translate(arg2,arg3); return true; } -SE_BIND_FUNC(js_cc_FileUtils_getSuitableFOpen) +SE_BIND_FUNC(js_cc_ICanvasRenderingContext2D_translate) -static bool js_cc_FileUtils_getValueVectorFromFile(se::State& s) +static bool js_cc_ICanvasRenderingContext2D_scale(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; - ccstd::string *arg2 = 0 ; - ccstd::string temp2 ; - cc::ValueVector result; + cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; + float arg2 ; + float arg3 ; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + if(argc != 2) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "FileUtils_getValueVectorFromFile,2,SWIGTYPE_p_ccstd__string"); - arg2 = &temp2; - - result = (arg1)->getValueVectorFromFile((ccstd::string const &)*arg2); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "FileUtils_getValueVectorFromFile, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_scale,2,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_scale,3,SWIGTYPE_float"); + (arg1)->scale(arg2,arg3); return true; } -SE_BIND_FUNC(js_cc_FileUtils_getValueVectorFromFile) +SE_BIND_FUNC(js_cc_ICanvasRenderingContext2D_scale) -static bool js_cc_FileUtils_isFileExist(se::State& s) +static bool js_cc_ICanvasRenderingContext2D_rotate(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; - ccstd::string *arg2 = 0 ; - ccstd::string temp2 ; - bool result; + cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; + float arg2 ; if(argc != 1) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "FileUtils_isFileExist,2,SWIGTYPE_p_ccstd__string"); - arg2 = &temp2; - - result = (bool)((cc::FileUtils const *)arg1)->isFileExist((ccstd::string const &)*arg2); - // out 5 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_rotate,2,SWIGTYPE_float"); + (arg1)->rotate(arg2); return true; } -SE_BIND_FUNC(js_cc_FileUtils_isFileExist) +SE_BIND_FUNC(js_cc_ICanvasRenderingContext2D_rotate) -static bool js_cc_FileUtils_getFileExtension(se::State& s) +static bool js_cc_ICanvasRenderingContext2D_transform(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; - ccstd::string *arg2 = 0 ; - ccstd::string temp2 ; - ccstd::string result; + cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; + float arg2 ; + float arg3 ; + float arg4 ; + float arg5 ; + float arg6 ; + float arg7 ; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + if(argc != 6) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 6); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "FileUtils_getFileExtension,2,SWIGTYPE_p_ccstd__string"); - arg2 = &temp2; - - result = ((cc::FileUtils const *)arg1)->getFileExtension((ccstd::string const &)*arg2); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "FileUtils_getFileExtension, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_transform,2,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_transform,3,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[2], &arg4, nullptr); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_transform,4,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[3], &arg5, nullptr); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_transform,5,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[4], &arg6, nullptr); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_transform,6,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[5], &arg7, nullptr); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_transform,7,SWIGTYPE_float"); + (arg1)->transform(arg2,arg3,arg4,arg5,arg6,arg7); return true; } -SE_BIND_FUNC(js_cc_FileUtils_getFileExtension) +SE_BIND_FUNC(js_cc_ICanvasRenderingContext2D_transform) -static bool js_cc_FileUtils_isAbsolutePath(se::State& s) +static bool js_cc_ICanvasRenderingContext2D_setTransform(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; - ccstd::string *arg2 = 0 ; - ccstd::string temp2 ; - bool result; + cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; + float arg2 ; + float arg3 ; + float arg4 ; + float arg5 ; + float arg6 ; + float arg7 ; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + if(argc != 6) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 6); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "FileUtils_isAbsolutePath,2,SWIGTYPE_p_ccstd__string"); - arg2 = &temp2; - - result = (bool)((cc::FileUtils const *)arg1)->isAbsolutePath((ccstd::string const &)*arg2); - // out 5 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_setTransform,2,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_setTransform,3,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[2], &arg4, nullptr); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_setTransform,4,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[3], &arg5, nullptr); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_setTransform,5,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[4], &arg6, nullptr); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_setTransform,6,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[5], &arg7, nullptr); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_setTransform,7,SWIGTYPE_float"); + (arg1)->setTransform(arg2,arg3,arg4,arg5,arg6,arg7); return true; } -SE_BIND_FUNC(js_cc_FileUtils_isAbsolutePath) +SE_BIND_FUNC(js_cc_ICanvasRenderingContext2D_setTransform) -static bool js_cc_FileUtils_isDirectoryExist(se::State& s) +static bool js_cc_ICanvasRenderingContext2D_fetchData(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; - ccstd::string *arg2 = 0 ; - ccstd::string temp2 ; - bool result; + cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "FileUtils_isDirectoryExist,2,SWIGTYPE_p_ccstd__string"); - arg2 = &temp2; - - result = (bool)((cc::FileUtils const *)arg1)->isDirectoryExist((ccstd::string const &)*arg2); - // out 5 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + (arg1)->fetchData(); return true; } -SE_BIND_FUNC(js_cc_FileUtils_isDirectoryExist) +SE_BIND_FUNC(js_cc_ICanvasRenderingContext2D_fetchData) -static bool js_cc_FileUtils_listFiles(se::State& s) +static bool js_cc_ICanvasRenderingContext2D_width_set(se::State& s) { - // js_function - CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; - ccstd::string *arg2 = 0 ; - ccstd::string temp2 ; - ccstd::vector< ccstd::string > result; + cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; + float arg2 ; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "FileUtils_listFiles,2,SWIGTYPE_p_ccstd__string"); - arg2 = &temp2; - - result = ((cc::FileUtils const *)arg1)->listFiles((ccstd::string const &)*arg2); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "FileUtils_listFiles, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_width_set,2,SWIGTYPE_float"); + cc_ICanvasRenderingContext2D_width_set(arg1,arg2); return true; } -SE_BIND_FUNC(js_cc_FileUtils_listFiles) +SE_BIND_PROP_SET(js_cc_ICanvasRenderingContext2D_width_set) -static bool js_cc_FileUtils_createDirectory(se::State& s) +static bool js_cc_ICanvasRenderingContext2D_height_set(se::State& s) { - // js_function - CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; - ccstd::string *arg2 = 0 ; - ccstd::string temp2 ; - bool result; + cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; + float arg2 ; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "FileUtils_createDirectory,2,SWIGTYPE_p_ccstd__string"); - arg2 = &temp2; - - result = (bool)(arg1)->createDirectory((ccstd::string const &)*arg2); - // out 5 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_height_set,2,SWIGTYPE_float"); + cc_ICanvasRenderingContext2D_height_set(arg1,arg2); return true; } -SE_BIND_FUNC(js_cc_FileUtils_createDirectory) +SE_BIND_PROP_SET(js_cc_ICanvasRenderingContext2D_height_set) -static bool js_cc_FileUtils_removeDirectory(se::State& s) +static bool js_cc_ICanvasRenderingContext2D_lineWidth_set(se::State& s) { - // js_function - CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; - ccstd::string *arg2 = 0 ; - ccstd::string temp2 ; - bool result; + cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; + float arg2 ; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "FileUtils_removeDirectory,2,SWIGTYPE_p_ccstd__string"); - arg2 = &temp2; - - result = (bool)(arg1)->removeDirectory((ccstd::string const &)*arg2); - // out 5 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_lineWidth_set,2,SWIGTYPE_float"); + cc_ICanvasRenderingContext2D_lineWidth_set(arg1,arg2); return true; } -SE_BIND_FUNC(js_cc_FileUtils_removeDirectory) +SE_BIND_PROP_SET(js_cc_ICanvasRenderingContext2D_lineWidth_set) -static bool js_cc_FileUtils_removeFile(se::State& s) +static bool js_cc_ICanvasRenderingContext2D_fillStyle_set(se::State& s) { - // js_function - CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; + cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; ccstd::string *arg2 = 0 ; ccstd::string temp2 ; - bool result; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE& ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "FileUtils_removeFile,2,SWIGTYPE_p_ccstd__string"); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_fillStyle_set,2,SWIGTYPE_p_ccstd__string"); arg2 = &temp2; - result = (bool)(arg1)->removeFile((ccstd::string const &)*arg2); - // out 5 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + cc_ICanvasRenderingContext2D_fillStyle_set(arg1,*arg2); return true; } -SE_BIND_FUNC(js_cc_FileUtils_removeFile) +SE_BIND_PROP_SET(js_cc_ICanvasRenderingContext2D_fillStyle_set) -static bool js_cc_FileUtils_renameFile__SWIG_0(se::State& s) +static bool js_cc_ICanvasRenderingContext2D_font_set(se::State& s) { - // js_overloaded_function - CC_UNUSED bool ok = true; const auto& args = s.args(); - cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; + size_t argc = args.size(); + cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; ccstd::string *arg2 = 0 ; - ccstd::string *arg3 = 0 ; - ccstd::string *arg4 = 0 ; ccstd::string temp2 ; - ccstd::string temp3 ; - ccstd::string temp4 ; - bool result; - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE& ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "FileUtils_renameFile,2,SWIGTYPE_p_ccstd__string"); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_font_set,2,SWIGTYPE_p_ccstd__string"); arg2 = &temp2; - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[1], &temp3, s.thisObject()); - SE_PRECONDITION2(ok, false, "FileUtils_renameFile,3,SWIGTYPE_p_ccstd__string"); - arg3 = &temp3; - - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[2], &temp4, s.thisObject()); - SE_PRECONDITION2(ok, false, "FileUtils_renameFile,4,SWIGTYPE_p_ccstd__string"); - arg4 = &temp4; - - result = (bool)(arg1)->renameFile((ccstd::string const &)*arg2,(ccstd::string const &)*arg3,(ccstd::string const &)*arg4); - // out 5 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + cc_ICanvasRenderingContext2D_font_set(arg1,*arg2); return true; } +SE_BIND_PROP_SET(js_cc_ICanvasRenderingContext2D_font_set) -static bool js_cc_FileUtils_renameFile__SWIG_1(se::State& s) +static bool js_cc_ICanvasRenderingContext2D_globalCompositeOperation_set(se::State& s) { - // js_overloaded_function - CC_UNUSED bool ok = true; const auto& args = s.args(); - cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; + size_t argc = args.size(); + cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; ccstd::string *arg2 = 0 ; - ccstd::string *arg3 = 0 ; ccstd::string temp2 ; - ccstd::string temp3 ; - bool result; - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE& ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "FileUtils_renameFile,2,SWIGTYPE_p_ccstd__string"); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_globalCompositeOperation_set,2,SWIGTYPE_p_ccstd__string"); arg2 = &temp2; - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[1], &temp3, s.thisObject()); - SE_PRECONDITION2(ok, false, "FileUtils_renameFile,3,SWIGTYPE_p_ccstd__string"); - arg3 = &temp3; - - result = (bool)(arg1)->renameFile((ccstd::string const &)*arg2,(ccstd::string const &)*arg3); - // out 5 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + cc_ICanvasRenderingContext2D_globalCompositeOperation_set(arg1,*arg2); return true; } +SE_BIND_PROP_SET(js_cc_ICanvasRenderingContext2D_globalCompositeOperation_set) -static bool js_cc_FileUtils_renameFile(se::State& s) -{ - // js_function_dispatcher - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - - // js_function_dispatch_case - if (argc == 3) { - ok = js_cc_FileUtils_renameFile__SWIG_0(s); - if (ok) { - return true; - } - } // js_function_dispatch_case - if (argc == 2) { - ok = js_cc_FileUtils_renameFile__SWIG_1(s); - if (ok) { - return true; - } - } - SE_REPORT_ERROR("wrong number of arguments: %d", (int)argc); - return false; -} -SE_BIND_FUNC(js_cc_FileUtils_renameFile) - -static bool js_cc_FileUtils_getFileSize(se::State& s) +static bool js_cc_ICanvasRenderingContext2D_lineCap_set(se::State& s) { - // js_function - CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; + cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; ccstd::string *arg2 = 0 ; ccstd::string temp2 ; - long result; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE& ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "FileUtils_getFileSize,2,SWIGTYPE_p_ccstd__string"); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_lineCap_set,2,SWIGTYPE_p_ccstd__string"); arg2 = &temp2; - result = (long)(arg1)->getFileSize((ccstd::string const &)*arg2); - - // out 1 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + cc_ICanvasRenderingContext2D_lineCap_set(arg1,*arg2); return true; } -SE_BIND_FUNC(js_cc_FileUtils_getFileSize) +SE_BIND_PROP_SET(js_cc_ICanvasRenderingContext2D_lineCap_set) -static bool js_cc_FileUtils_normalizePath(se::State& s) +static bool js_cc_ICanvasRenderingContext2D_strokeStyle_set(se::State& s) { - // js_function - CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; + cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; ccstd::string *arg2 = 0 ; ccstd::string temp2 ; - ccstd::string result; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE& ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "FileUtils_normalizePath,2,SWIGTYPE_p_ccstd__string"); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_strokeStyle_set,2,SWIGTYPE_p_ccstd__string"); arg2 = &temp2; - result = ((cc::FileUtils const *)arg1)->normalizePath((ccstd::string const &)*arg2); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "FileUtils_normalizePath, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - + cc_ICanvasRenderingContext2D_strokeStyle_set(arg1,*arg2); return true; } -SE_BIND_FUNC(js_cc_FileUtils_normalizePath) +SE_BIND_PROP_SET(js_cc_ICanvasRenderingContext2D_strokeStyle_set) -static bool js_cc_FileUtils_getFileDir(se::State& s) +static bool js_cc_ICanvasRenderingContext2D_lineJoin_set(se::State& s) { - // js_function - CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; + cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; ccstd::string *arg2 = 0 ; ccstd::string temp2 ; - ccstd::string result; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE& ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "FileUtils_getFileDir,2,SWIGTYPE_p_ccstd__string"); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_lineJoin_set,2,SWIGTYPE_p_ccstd__string"); arg2 = &temp2; - result = ((cc::FileUtils const *)arg1)->getFileDir((ccstd::string const &)*arg2); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "FileUtils_getFileDir, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - - - - return true; -} -SE_BIND_FUNC(js_cc_FileUtils_getFileDir) - -bool js_register_cc_FileUtils(se::Object* obj) { - auto* cls = se::Class::create("FileUtils", obj, nullptr, nullptr); - - - cls->defineFunction("purgeCachedEntries", _SE(js_cc_FileUtils_purgeCachedEntries)); - cls->defineFunction("getStringFromFile", _SE(js_cc_FileUtils_getStringFromFile)); - cls->defineFunction("getDataFromFile", _SE(js_cc_FileUtils_getDataFromFile)); - cls->defineFunction("getFileDataFromZip", _SE(js_cc_FileUtils_getFileDataFromZip)); - cls->defineFunction("fullPathForFilename", _SE(js_cc_FileUtils_fullPathForFilename)); - cls->defineFunction("fullPathFromRelativeFile", _SE(js_cc_FileUtils_fullPathFromRelativeFile)); - cls->defineFunction("setSearchPaths", _SE(js_cc_FileUtils_setSearchPaths)); - cls->defineFunction("getDefaultResourceRootPath", _SE(js_cc_FileUtils_getDefaultResourceRootPath)); - cls->defineFunction("setDefaultResourceRootPath", _SE(js_cc_FileUtils_setDefaultResourceRootPath)); - cls->defineFunction("addSearchPath", _SE(js_cc_FileUtils_addSearchPath)); - cls->defineFunction("getSearchPaths", _SE(js_cc_FileUtils_getSearchPaths)); - cls->defineFunction("getOriginalSearchPaths", _SE(js_cc_FileUtils_getOriginalSearchPaths)); - cls->defineFunction("getWritablePath", _SE(js_cc_FileUtils_getWritablePath)); - cls->defineFunction("setWritablePath", _SE(js_cc_FileUtils_setWritablePath)); - cls->defineFunction("getValueMapFromFile", _SE(js_cc_FileUtils_getValueMapFromFile)); - cls->defineFunction("getValueMapFromData", _SE(js_cc_FileUtils_getValueMapFromData)); - cls->defineFunction("writeToFile", _SE(js_cc_FileUtils_writeToFile)); - cls->defineFunction("writeStringToFile", _SE(js_cc_FileUtils_writeStringToFile)); - cls->defineFunction("writeDataToFile", _SE(js_cc_FileUtils_writeDataToFile)); - cls->defineFunction("writeValueMapToFile", _SE(js_cc_FileUtils_writeValueMapToFile)); - cls->defineFunction("writeValueVectorToFile", _SE(js_cc_FileUtils_writeValueVectorToFile)); - cls->defineFunction("getSuitableFOpen", _SE(js_cc_FileUtils_getSuitableFOpen)); - cls->defineFunction("getValueVectorFromFile", _SE(js_cc_FileUtils_getValueVectorFromFile)); - cls->defineFunction("isFileExist", _SE(js_cc_FileUtils_isFileExist)); - cls->defineFunction("getFileExtension", _SE(js_cc_FileUtils_getFileExtension)); - cls->defineFunction("isAbsolutePath", _SE(js_cc_FileUtils_isAbsolutePath)); - cls->defineFunction("isDirectoryExist", _SE(js_cc_FileUtils_isDirectoryExist)); - cls->defineFunction("listFiles", _SE(js_cc_FileUtils_listFiles)); - cls->defineFunction("createDirectory", _SE(js_cc_FileUtils_createDirectory)); - cls->defineFunction("removeDirectory", _SE(js_cc_FileUtils_removeDirectory)); - cls->defineFunction("removeFile", _SE(js_cc_FileUtils_removeFile)); - cls->defineFunction("renameFile", _SE(js_cc_FileUtils_renameFile)); - cls->defineFunction("getFileSize", _SE(js_cc_FileUtils_getFileSize)); - cls->defineFunction("normalizePath", _SE(js_cc_FileUtils_normalizePath)); - cls->defineFunction("getFileDir", _SE(js_cc_FileUtils_getFileDir)); - - - cls->defineStaticFunction("getInstance", _SE(js_cc_FileUtils_getInstance_static)); - - - cls->defineFinalizeFunction(_SE(js_delete_cc_FileUtils)); - + cc_ICanvasRenderingContext2D_lineJoin_set(arg1,*arg2); - cls->install(); - JSBClassType::registerClass(cls); - __jsb_cc_FileUtils_proto = cls->getProto(); - __jsb_cc_FileUtils_class = cls; - se::ScriptEngine::getInstance()->clearException(); return true; } +SE_BIND_PROP_SET(js_cc_ICanvasRenderingContext2D_lineJoin_set) - -static bool js_cc_createFileUtils(se::State& s) +static bool js_cc_ICanvasRenderingContext2D_textAlign_set(se::State& s) { - // js_function - CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::FileUtils *result = 0 ; + cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; + ccstd::string *arg2 = 0 ; + ccstd::string temp2 ; - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } - result = (cc::FileUtils *)cc::createFileUtils(); - // %typemap(out) SWIGTYPE* - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "createFileUtils, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_textAlign_set,2,SWIGTYPE_p_ccstd__string"); + arg2 = &temp2; + + cc_ICanvasRenderingContext2D_textAlign_set(arg1,*arg2); return true; } -SE_BIND_FUNC(js_cc_createFileUtils) - -se::Class* __jsb_cc_SAXParser_class = nullptr; -se::Object* __jsb_cc_SAXParser_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_SAXParser) +SE_BIND_PROP_SET(js_cc_ICanvasRenderingContext2D_textAlign_set) -// js_ctor -static bool js_new_cc_SAXParser(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_ICanvasRenderingContext2D_textBaseline_set(se::State& s) { CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); + cc::ICanvasRenderingContext2D *arg1 = (cc::ICanvasRenderingContext2D *) NULL ; + ccstd::string *arg2 = 0 ; + ccstd::string temp2 ; - cc::SAXParser *result; - result = (cc::SAXParser *)new cc::SAXParser(); + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "ICanvasRenderingContext2D_textBaseline_set,2,SWIGTYPE_p_ccstd__string"); + arg2 = &temp2; + + cc_ICanvasRenderingContext2D_textBaseline_set(arg1,*arg2); - auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); - s.thisObject()->setPrivateObject(ptr); return true; } -SE_BIND_CTOR(js_new_cc_SAXParser, __jsb_cc_SAXParser_class, js_delete_cc_SAXParser) +SE_BIND_PROP_SET(js_cc_ICanvasRenderingContext2D_textBaseline_set) -static bool js_delete_cc_SAXParser(se::State& s) +static bool js_delete_cc_ICanvasRenderingContext2D(se::State& s) { // js_dtoroverride return true; } -SE_BIND_FINALIZE_FUNC(js_delete_cc_SAXParser) +SE_BIND_FINALIZE_FUNC(js_delete_cc_ICanvasRenderingContext2D) -static bool js_cc_PlistParser_init(se::State& s) -{ - // js_function +bool js_register_cc_ICanvasRenderingContext2D(se::Object* obj) { + auto* cls = se::Class::create("ICanvasRenderingContext2D", obj, nullptr, nullptr); - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::SAXParser *arg1 = (cc::SAXParser *) NULL ; - char *arg2 = (char *) NULL ; - ccstd::string temp2 ; - bool result; + cls->defineProperty("width", nullptr, _SE(js_cc_ICanvasRenderingContext2D_width_set)); + cls->defineProperty("height", nullptr, _SE(js_cc_ICanvasRenderingContext2D_height_set)); + cls->defineProperty("lineWidth", nullptr, _SE(js_cc_ICanvasRenderingContext2D_lineWidth_set)); + cls->defineProperty("fillStyle", nullptr, _SE(js_cc_ICanvasRenderingContext2D_fillStyle_set)); + cls->defineProperty("font", nullptr, _SE(js_cc_ICanvasRenderingContext2D_font_set)); + cls->defineProperty("globalCompositeOperation", nullptr, _SE(js_cc_ICanvasRenderingContext2D_globalCompositeOperation_set)); + cls->defineProperty("lineCap", nullptr, _SE(js_cc_ICanvasRenderingContext2D_lineCap_set)); + cls->defineProperty("strokeStyle", nullptr, _SE(js_cc_ICanvasRenderingContext2D_strokeStyle_set)); + cls->defineProperty("lineJoin", nullptr, _SE(js_cc_ICanvasRenderingContext2D_lineJoin_set)); + cls->defineProperty("textAlign", nullptr, _SE(js_cc_ICanvasRenderingContext2D_textAlign_set)); + cls->defineProperty("textBaseline", nullptr, _SE(js_cc_ICanvasRenderingContext2D_textBaseline_set)); - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + cls->defineFunction("rect", _SE(js_cc_ICanvasRenderingContext2D_rect)); + cls->defineFunction("clearRect", _SE(js_cc_ICanvasRenderingContext2D_clearRect)); + cls->defineFunction("createLinearGradient", _SE(js_cc_ICanvasRenderingContext2D_createLinearGradient)); + cls->defineFunction("save", _SE(js_cc_ICanvasRenderingContext2D_save)); + cls->defineFunction("beginPath", _SE(js_cc_ICanvasRenderingContext2D_beginPath)); + cls->defineFunction("closePath", _SE(js_cc_ICanvasRenderingContext2D_closePath)); + cls->defineFunction("moveTo", _SE(js_cc_ICanvasRenderingContext2D_moveTo)); + cls->defineFunction("lineTo", _SE(js_cc_ICanvasRenderingContext2D_lineTo)); + cls->defineFunction("fill", _SE(js_cc_ICanvasRenderingContext2D_fill)); + cls->defineFunction("stroke", _SE(js_cc_ICanvasRenderingContext2D_stroke)); + cls->defineFunction("restore", _SE(js_cc_ICanvasRenderingContext2D_restore)); + cls->defineFunction("setShadowBlur", _SE(js_cc_ICanvasRenderingContext2D_setShadowBlur)); + cls->defineFunction("setShadowColor", _SE(js_cc_ICanvasRenderingContext2D_setShadowColor)); + cls->defineFunction("setShadowOffsetX", _SE(js_cc_ICanvasRenderingContext2D_setShadowOffsetX)); + cls->defineFunction("setShadowOffsetY", _SE(js_cc_ICanvasRenderingContext2D_setShadowOffsetY)); + cls->defineFunction("fillImageData", _SE(js_cc_ICanvasRenderingContext2D_fillImageData)); + cls->defineFunction("translate", _SE(js_cc_ICanvasRenderingContext2D_translate)); + cls->defineFunction("scale", _SE(js_cc_ICanvasRenderingContext2D_scale)); + cls->defineFunction("rotate", _SE(js_cc_ICanvasRenderingContext2D_rotate)); + cls->defineFunction("transform", _SE(js_cc_ICanvasRenderingContext2D_transform)); + cls->defineFunction("setTransform", _SE(js_cc_ICanvasRenderingContext2D_setTransform)); + cls->defineFunction("fetchData", _SE(js_cc_ICanvasRenderingContext2D_fetchData)); + + + + + cls->defineFinalizeFunction(_SE(js_delete_cc_ICanvasRenderingContext2D)); - ok &= sevalue_to_native(args[0], &temp2); - SE_PRECONDITION2(ok, false, "PlistParser_init,2,SWIGTYPE_p_char"); - arg2 = (char *) temp2.c_str(); - result = (bool)(arg1)->init((char const *)arg2); - // out 5 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + cls->install(); + JSBClassType::registerClass(cls); + __jsb_cc_ICanvasRenderingContext2D_proto = cls->getProto(); + __jsb_cc_ICanvasRenderingContext2D_class = cls; + se::ScriptEngine::getInstance()->clearException(); return true; } -SE_BIND_FUNC(js_cc_PlistParser_init) -static bool js_cc_PlistParser_parse(se::State& s) + +se::Class* __jsb_cc_CanvasGradient_class = nullptr; +se::Object* __jsb_cc_CanvasGradient_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_CanvasGradient) + +// js_ctor +static bool js_new_cc_CanvasGradient(se::State& s) // NOLINT(readability-identifier-naming) { - // js_function - CC_UNUSED bool ok = true; const auto& args = s.args(); - size_t argc = args.size(); - cc::SAXParser *arg1 = (cc::SAXParser *) NULL ; - ccstd::string *arg2 = 0 ; - ccstd::string temp2 ; - bool result; - - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "PlistParser_parse,2,SWIGTYPE_p_ccstd__string"); - arg2 = &temp2; + size_t argc = args.size(); - result = (bool)(arg1)->parse((ccstd::string const &)*arg2); - // out 5 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + cc::CanvasGradient *result; + result = (cc::CanvasGradient *)new cc::CanvasGradient(); + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); return true; } -SE_BIND_FUNC(js_cc_PlistParser_parse) +SE_BIND_CTOR(js_new_cc_CanvasGradient, __jsb_cc_CanvasGradient_class, js_delete_cc_CanvasGradient) -bool js_register_cc_SAXParser(se::Object* obj) { - auto* cls = se::Class::create("PlistParser", obj, nullptr, _SE(js_new_cc_SAXParser)); +static bool js_delete_cc_CanvasGradient(se::State& s) +{ + // js_dtoroverride + return true; +} +SE_BIND_FINALIZE_FUNC(js_delete_cc_CanvasGradient) + +bool js_register_cc_CanvasGradient(se::Object* obj) { + auto* cls = se::Class::create("CanvasGradient", obj, __jsb_cc_ICanvasGradient_proto, _SE(js_new_cc_CanvasGradient)); - cls->defineFunction("init", _SE(js_cc_PlistParser_init)); - cls->defineFunction("parse", _SE(js_cc_PlistParser_parse)); - cls->defineFinalizeFunction(_SE(js_delete_cc_SAXParser)); + cls->defineFinalizeFunction(_SE(js_delete_cc_CanvasGradient)); cls->install(); - JSBClassType::registerClass(cls); + JSBClassType::registerClass(cls); - __jsb_cc_SAXParser_proto = cls->getProto(); - __jsb_cc_SAXParser_class = cls; + __jsb_cc_CanvasGradient_proto = cls->getProto(); + __jsb_cc_CanvasGradient_class = cls; se::ScriptEngine::getInstance()->clearException(); return true; } -static bool js_cc_clampf(se::State& s) +se::Class* __jsb_cc_CanvasRenderingContext2D_class = nullptr; +se::Object* __jsb_cc_CanvasRenderingContext2D_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_CanvasRenderingContext2D) + +// js_ctor +static bool js_new_cc_CanvasRenderingContext2D(se::State& s) // NOLINT(readability-identifier-naming) { - // js_function - CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - float arg1 ; - float arg2 ; - float arg3 ; - float result; - if(argc != 3) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); + if (argc != 2) { + SE_REPORT_ERROR("js_new_cc_CanvasRenderingContext2D: wrong number of arguments: %d, was expecting %d", (int)argc, 2); return false; } + + float arg1 ; + float arg2 ; + cc::CanvasRenderingContext2D *result; // %typemap(in) int, short, long, signed char, float, double ok &= sevalue_to_native(args[0], &arg1, nullptr); - SE_PRECONDITION2(ok, false, "clampf,1,SWIGTYPE_float"); + SE_PRECONDITION2(ok, false, "new_CanvasRenderingContext2D,1,SWIGTYPE_float"); // %typemap(in) int, short, long, signed char, float, double ok &= sevalue_to_native(args[1], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "clampf,2,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[2], &arg3, nullptr); - SE_PRECONDITION2(ok, false, "clampf,3,SWIGTYPE_float"); - result = (float)cc::clampf(arg1,arg2,arg3); - - // out 1 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "new_CanvasRenderingContext2D,2,SWIGTYPE_float"); + result = (cc::CanvasRenderingContext2D *)new cc::CanvasRenderingContext2D(arg1,arg2); + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); return true; } -SE_BIND_FUNC(js_cc_clampf) +SE_BIND_CTOR(js_new_cc_CanvasRenderingContext2D, __jsb_cc_CanvasRenderingContext2D_class, js_delete_cc_CanvasRenderingContext2D) -se::Class* __jsb_cc_Vec2_class = nullptr; -se::Object* __jsb_cc_Vec2_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_Vec2) +static bool js_delete_cc_CanvasRenderingContext2D(se::State& s) +{ + // js_dtoroverride + return true; +} +SE_BIND_FINALIZE_FUNC(js_delete_cc_CanvasRenderingContext2D) -static bool js_cc_Vec2_x_set(se::State& s) +static bool js_cc_CanvasRenderingContext2D__width_set(se::State& s) { CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::Vec2 *arg1 = (cc::Vec2 *) NULL ; + cc::CanvasRenderingContext2D *arg1 = (cc::CanvasRenderingContext2D *) NULL ; - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg1->x, nullptr); - SE_PRECONDITION2(ok, false, "Vec2_x_set,2,SWIGTYPE_float"); + ok &= sevalue_to_native(args[0], &arg1->_width, nullptr); + SE_PRECONDITION2(ok, false, "CanvasRenderingContext2D__width_set,2,SWIGTYPE_float"); return true; } -SE_BIND_PROP_SET(js_cc_Vec2_x_set) +SE_BIND_PROP_SET(js_cc_CanvasRenderingContext2D__width_set) -static bool js_cc_Vec2_x_get(se::State& s) +static bool js_cc_CanvasRenderingContext2D__width_get(se::State& s) { CC_UNUSED bool ok = true; - cc::Vec2 *arg1 = (cc::Vec2 *) NULL ; + cc::CanvasRenderingContext2D *arg1 = (cc::CanvasRenderingContext2D *) NULL ; - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // out 1 - ok &= nativevalue_to_se(arg1->x, s.rval(), s.thisObject() /*ctx*/); + ok &= nativevalue_to_se(arg1->_width, s.rval(), s.thisObject() /*ctx*/); return true; } -SE_BIND_PROP_GET(js_cc_Vec2_x_get) +SE_BIND_PROP_GET(js_cc_CanvasRenderingContext2D__width_get) -static bool js_cc_Vec2_y_set(se::State& s) +static bool js_cc_CanvasRenderingContext2D__height_set(se::State& s) { CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::Vec2 *arg1 = (cc::Vec2 *) NULL ; + cc::CanvasRenderingContext2D *arg1 = (cc::CanvasRenderingContext2D *) NULL ; - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg1->y, nullptr); - SE_PRECONDITION2(ok, false, "Vec2_y_set,2,SWIGTYPE_float"); + ok &= sevalue_to_native(args[0], &arg1->_height, nullptr); + SE_PRECONDITION2(ok, false, "CanvasRenderingContext2D__height_set,2,SWIGTYPE_float"); return true; } -SE_BIND_PROP_SET(js_cc_Vec2_y_set) +SE_BIND_PROP_SET(js_cc_CanvasRenderingContext2D__height_set) -static bool js_cc_Vec2_y_get(se::State& s) +static bool js_cc_CanvasRenderingContext2D__height_get(se::State& s) { CC_UNUSED bool ok = true; - cc::Vec2 *arg1 = (cc::Vec2 *) NULL ; + cc::CanvasRenderingContext2D *arg1 = (cc::CanvasRenderingContext2D *) NULL ; - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // out 1 - ok &= nativevalue_to_se(arg1->y, s.rval(), s.thisObject() /*ctx*/); + ok &= nativevalue_to_se(arg1->_height, s.rval(), s.thisObject() /*ctx*/); return true; } -SE_BIND_PROP_GET(js_cc_Vec2_y_get) +SE_BIND_PROP_GET(js_cc_CanvasRenderingContext2D__height_get) -static bool js_new_cc_Vec2__SWIG_0(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_CanvasRenderingContext2D__lineWidth_set(se::State& s) { - // js_overloaded_ctor - const auto& args = s.args(); CC_UNUSED bool ok = true; - cc::Vec2 *result; - result = (cc::Vec2 *)new cc::Vec2(); - - - auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); - s.thisObject()->setPrivateObject(ptr); - return true; -} - - -static bool js_new_cc_Vec2__SWIG_1(se::State& s) // NOLINT(readability-identifier-naming) -{ - // js_overloaded_ctor const auto& args = s.args(); - CC_UNUSED bool ok = true; - float arg1 ; - float arg2 ; - cc::Vec2 *result; - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg1, nullptr); - SE_PRECONDITION2(ok, false, "new_Vec2,1,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[1], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "new_Vec2,2,SWIGTYPE_float"); - result = (cc::Vec2 *)new cc::Vec2(arg1,arg2); - + size_t argc = args.size(); + cc::CanvasRenderingContext2D *arg1 = (cc::CanvasRenderingContext2D *) NULL ; - auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); - s.thisObject()->setPrivateObject(ptr); - return true; -} - - -static bool js_new_cc_Vec2__SWIG_2(se::State& s) // NOLINT(readability-identifier-naming) -{ - // js_overloaded_ctor - const auto& args = s.args(); - CC_UNUSED bool ok = true; - float *arg1 = (float *) NULL ; - cc::Vec2 *result; - // %typemap(in) SWIGTYPE* - ok &= sevalue_to_native(args[0], &arg1, s.thisObject()); - SE_PRECONDITION2(ok, false, "new_Vec2,1,SWIGTYPE_p_float"); - result = (cc::Vec2 *)new cc::Vec2((float const *)arg1); + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg1->_lineWidth, nullptr); + SE_PRECONDITION2(ok, false, "CanvasRenderingContext2D__lineWidth_set,2,SWIGTYPE_float"); - auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); - s.thisObject()->setPrivateObject(ptr); return true; } +SE_BIND_PROP_SET(js_cc_CanvasRenderingContext2D__lineWidth_set) - -static bool js_new_cc_Vec2__SWIG_3(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_CanvasRenderingContext2D__lineWidth_get(se::State& s) { - // js_overloaded_ctor - const auto& args = s.args(); CC_UNUSED bool ok = true; - cc::Vec2 *arg1 = 0 ; - cc::Vec2 *arg2 = 0 ; - cc::Vec2 temp1 ; - cc::Vec2 temp2 ; - cc::Vec2 *result; - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp1, s.thisObject()); - SE_PRECONDITION2(ok, false, "new_Vec2,1,SWIGTYPE_p_cc__Vec2"); - arg1 = &temp1; + cc::CanvasRenderingContext2D *arg1 = (cc::CanvasRenderingContext2D *) NULL ; - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[1], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "new_Vec2,2,SWIGTYPE_p_cc__Vec2"); - arg2 = &temp2; + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (cc::Vec2 *)new cc::Vec2((cc::Vec2 const &)*arg1,(cc::Vec2 const &)*arg2); + // out 1 + ok &= nativevalue_to_se(arg1->_lineWidth, s.rval(), s.thisObject() /*ctx*/); - auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); - s.thisObject()->setPrivateObject(ptr); return true; } +SE_BIND_PROP_GET(js_cc_CanvasRenderingContext2D__lineWidth_get) - -static bool js_new_cc_Vec2__SWIG_4(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_CanvasRenderingContext2D__lineJoin_set(se::State& s) { - // js_overloaded_ctor - const auto& args = s.args(); CC_UNUSED bool ok = true; - cc::Vec2 *arg1 = 0 ; - cc::Vec2 temp1 ; - cc::Vec2 *result; - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp1, s.thisObject()); - SE_PRECONDITION2(ok, false, "new_Vec2,1,SWIGTYPE_p_cc__Vec2"); - arg1 = &temp1; - - result = (cc::Vec2 *)new cc::Vec2((cc::Vec2 const &)*arg1); - - - auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); - s.thisObject()->setPrivateObject(ptr); - return true; -} - - -static bool js_new_Vec2(se::State& s) // NOLINT(readability-identifier-naming) -{ - // js_ctor_dispatcher - size_t argc = s.args().size(); - bool ret = false; - - // switch all cases by means of series of if-returns. - - // js_ctor_dispatch_case - if(argc == 0) { - ret = js_new_cc_Vec2__SWIG_0(s); - if (ret) { - return ret; - } /* reset exception and return */ - } - - // js_ctor_dispatch_case - if(argc == 2) { - ret = js_new_cc_Vec2__SWIG_1(s); - if (ret) { - return ret; - } /* reset exception and return */ - } + const auto& args = s.args(); + size_t argc = args.size(); + cc::CanvasRenderingContext2D *arg1 = (cc::CanvasRenderingContext2D *) NULL ; - // js_ctor_dispatch_case - if(argc == 1) { - ret = js_new_cc_Vec2__SWIG_2(s); - if (ret) { - return ret; - } /* reset exception and return */ - } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // js_ctor_dispatch_case - if(argc == 2) { - ret = js_new_cc_Vec2__SWIG_3(s); - if (ret) { - return ret; - } /* reset exception and return */ - } + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg1->_lineJoin, s.thisObject()); + SE_PRECONDITION2(ok, false, "CanvasRenderingContext2D__lineJoin_set,2,SWIGTYPE_ccstd__string"); - // js_ctor_dispatch_case - if(argc == 1) { - ret = js_new_cc_Vec2__SWIG_4(s); - if (ret) { - return ret; - } /* reset exception and return */ - } - // default: - SE_REPORT_ERROR("Illegal arguments for construction of Vec2"); - return false; + return true; } -SE_BIND_CTOR(js_new_Vec2, __jsb_cc_Vec2_class, js_delete_cc_Vec2) +SE_BIND_PROP_SET(js_cc_CanvasRenderingContext2D__lineJoin_set) -static bool js_delete_cc_Vec2(se::State& s) +static bool js_cc_CanvasRenderingContext2D__lineJoin_get(se::State& s) { - // js_dtoroverride + CC_UNUSED bool ok = true; + cc::CanvasRenderingContext2D *arg1 = (cc::CanvasRenderingContext2D *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(arg1->_lineJoin, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "CanvasRenderingContext2D__lineJoin_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(arg1->_lineJoin, s.thisObject(), s.rval()); + + + return true; } -SE_BIND_FINALIZE_FUNC(js_delete_cc_Vec2) +SE_BIND_PROP_GET(js_cc_CanvasRenderingContext2D__lineJoin_get) -static bool js_cc_Vec2_isZero(se::State& s) +static bool js_cc_CanvasRenderingContext2D__lineCap_set(se::State& s) { - // js_function - CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::Vec2 *arg1 = (cc::Vec2 *) NULL ; - bool result; + cc::CanvasRenderingContext2D *arg1 = (cc::CanvasRenderingContext2D *) NULL ; - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (bool)((cc::Vec2 const *)arg1)->isZero(); - // out 5 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg1->_lineCap, s.thisObject()); + SE_PRECONDITION2(ok, false, "CanvasRenderingContext2D__lineCap_set,2,SWIGTYPE_ccstd__string"); + return true; } -SE_BIND_FUNC(js_cc_Vec2_isZero) +SE_BIND_PROP_SET(js_cc_CanvasRenderingContext2D__lineCap_set) -static bool js_cc_Vec2_isOne(se::State& s) +static bool js_cc_CanvasRenderingContext2D__lineCap_get(se::State& s) { - // js_function - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::Vec2 *arg1 = (cc::Vec2 *) NULL ; - bool result; + cc::CanvasRenderingContext2D *arg1 = (cc::CanvasRenderingContext2D *) NULL ; - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (bool)((cc::Vec2 const *)arg1)->isOne(); - // out 5 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(arg1->_lineCap, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "CanvasRenderingContext2D__lineCap_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(arg1->_lineCap, s.thisObject(), s.rval()); + return true; } -SE_BIND_FUNC(js_cc_Vec2_isOne) +SE_BIND_PROP_GET(js_cc_CanvasRenderingContext2D__lineCap_get) -static bool js_cc_Vec2_angle_static(se::State& s) +static bool js_cc_CanvasRenderingContext2D__font_set(se::State& s) { - // js_function - CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::Vec2 *arg1 = 0 ; - cc::Vec2 *arg2 = 0 ; - cc::Vec2 temp1 ; - cc::Vec2 temp2 ; - float result; - - if(argc != 2) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); - return false; - } - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp1, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_angle,1,SWIGTYPE_p_cc__Vec2"); - arg1 = &temp1; + cc::CanvasRenderingContext2D *arg1 = (cc::CanvasRenderingContext2D *) NULL ; - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[1], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_angle,2,SWIGTYPE_p_cc__Vec2"); - arg2 = &temp2; + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (float)cc::Vec2::angle((cc::Vec2 const &)*arg1,(cc::Vec2 const &)*arg2); + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg1->_font, s.thisObject()); + SE_PRECONDITION2(ok, false, "CanvasRenderingContext2D__font_set,2,SWIGTYPE_ccstd__string"); - // out 1 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); return true; } -SE_BIND_FUNC(js_cc_Vec2_angle_static) +SE_BIND_PROP_SET(js_cc_CanvasRenderingContext2D__font_set) -static bool js_cc_Vec2_add__SWIG_0(se::State& s) +static bool js_cc_CanvasRenderingContext2D__font_get(se::State& s) { - // js_overloaded_function - CC_UNUSED bool ok = true; - const auto& args = s.args(); - cc::Vec2 *arg1 = (cc::Vec2 *) NULL ; - cc::Vec2 *arg2 = 0 ; - cc::Vec2 temp2 ; + cc::CanvasRenderingContext2D *arg1 = (cc::CanvasRenderingContext2D *) NULL ; - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_add,2,SWIGTYPE_p_cc__Vec2"); - arg2 = &temp2; + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(arg1->_font, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "CanvasRenderingContext2D__font_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(arg1->_font, s.thisObject(), s.rval()); - (arg1)->add((cc::Vec2 const &)*arg2); return true; } +SE_BIND_PROP_GET(js_cc_CanvasRenderingContext2D__font_get) -static bool js_cc_Vec2_add_static__SWIG_1(se::State& s) +static bool js_cc_CanvasRenderingContext2D__textAlign_set(se::State& s) { - // js_overloaded_function - CC_UNUSED bool ok = true; const auto& args = s.args(); - cc::Vec2 *arg1 = 0 ; - cc::Vec2 *arg2 = 0 ; - cc::Vec2 *arg3 = (cc::Vec2 *) NULL ; - cc::Vec2 temp1 ; - cc::Vec2 temp2 ; + size_t argc = args.size(); + cc::CanvasRenderingContext2D *arg1 = (cc::CanvasRenderingContext2D *) NULL ; - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp1, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_add,1,SWIGTYPE_p_cc__Vec2"); - arg1 = &temp1; + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[1], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_add,2,SWIGTYPE_p_cc__Vec2"); - arg2 = &temp2; + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg1->_textAlign, s.thisObject()); + SE_PRECONDITION2(ok, false, "CanvasRenderingContext2D__textAlign_set,2,SWIGTYPE_ccstd__string"); - // %typemap(in) SWIGTYPE* - ok &= sevalue_to_native(args[2], &arg3, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_add,3,SWIGTYPE_p_cc__Vec2"); - cc::Vec2::add((cc::Vec2 const &)*arg1,(cc::Vec2 const &)*arg2,arg3); return true; } +SE_BIND_PROP_SET(js_cc_CanvasRenderingContext2D__textAlign_set) -static bool js_cc_Vec2_add_static(se::State& s) +static bool js_cc_CanvasRenderingContext2D__textAlign_get(se::State& s) { - // js_function_dispatcher CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); + cc::CanvasRenderingContext2D *arg1 = (cc::CanvasRenderingContext2D *) NULL ; - // js_function_dispatch_case - if (argc == 1) { - ok = js_cc_Vec2_add__SWIG_0(s); - if (ok) { - return true; - } - } // js_function_dispatch_case - if (argc == 3) { - ok = js_cc_Vec2_add_static__SWIG_1(s); - if (ok) { - return true; - } - } - SE_REPORT_ERROR("wrong number of arguments: %d", (int)argc); - return false; + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(arg1->_textAlign, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "CanvasRenderingContext2D__textAlign_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(arg1->_textAlign, s.thisObject(), s.rval()); + + + + return true; } -SE_BIND_FUNC(js_cc_Vec2_add_static) +SE_BIND_PROP_GET(js_cc_CanvasRenderingContext2D__textAlign_get) -static bool js_cc_Vec2_clamp__SWIG_0(se::State& s) +static bool js_cc_CanvasRenderingContext2D__textBaseline_set(se::State& s) { - // js_overloaded_function - CC_UNUSED bool ok = true; const auto& args = s.args(); - cc::Vec2 *arg1 = (cc::Vec2 *) NULL ; - cc::Vec2 *arg2 = 0 ; - cc::Vec2 *arg3 = 0 ; - cc::Vec2 temp2 ; - cc::Vec2 temp3 ; + size_t argc = args.size(); + cc::CanvasRenderingContext2D *arg1 = (cc::CanvasRenderingContext2D *) NULL ; - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_clamp,2,SWIGTYPE_p_cc__Vec2"); - arg2 = &temp2; - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[1], &temp3, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_clamp,3,SWIGTYPE_p_cc__Vec2"); - arg3 = &temp3; + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg1->_textBaseline, s.thisObject()); + SE_PRECONDITION2(ok, false, "CanvasRenderingContext2D__textBaseline_set,2,SWIGTYPE_ccstd__string"); - (arg1)->clamp((cc::Vec2 const &)*arg2,(cc::Vec2 const &)*arg3); return true; } +SE_BIND_PROP_SET(js_cc_CanvasRenderingContext2D__textBaseline_set) -static bool js_cc_Vec2_clamp_static__SWIG_1(se::State& s) +static bool js_cc_CanvasRenderingContext2D__textBaseline_get(se::State& s) { - // js_overloaded_function + CC_UNUSED bool ok = true; + cc::CanvasRenderingContext2D *arg1 = (cc::CanvasRenderingContext2D *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(arg1->_textBaseline, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "CanvasRenderingContext2D__textBaseline_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(arg1->_textBaseline, s.thisObject(), s.rval()); + + + return true; +} +SE_BIND_PROP_GET(js_cc_CanvasRenderingContext2D__textBaseline_get) + +static bool js_cc_CanvasRenderingContext2D__fillStyle_set(se::State& s) +{ CC_UNUSED bool ok = true; const auto& args = s.args(); - cc::Vec2 *arg1 = 0 ; - cc::Vec2 *arg2 = 0 ; - cc::Vec2 *arg3 = 0 ; - cc::Vec2 *arg4 = (cc::Vec2 *) NULL ; - cc::Vec2 temp1 ; - cc::Vec2 temp2 ; - cc::Vec2 temp3 ; + size_t argc = args.size(); + cc::CanvasRenderingContext2D *arg1 = (cc::CanvasRenderingContext2D *) NULL ; - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp1, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_clamp,1,SWIGTYPE_p_cc__Vec2"); - arg1 = &temp1; + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[1], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_clamp,2,SWIGTYPE_p_cc__Vec2"); - arg2 = &temp2; + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg1->_fillStyle, s.thisObject()); + SE_PRECONDITION2(ok, false, "CanvasRenderingContext2D__fillStyle_set,2,SWIGTYPE_ccstd__string"); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[2], &temp3, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_clamp,3,SWIGTYPE_p_cc__Vec2"); - arg3 = &temp3; - // %typemap(in) SWIGTYPE* - ok &= sevalue_to_native(args[3], &arg4, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_clamp,4,SWIGTYPE_p_cc__Vec2"); - cc::Vec2::clamp((cc::Vec2 const &)*arg1,(cc::Vec2 const &)*arg2,(cc::Vec2 const &)*arg3,arg4); + + return true; +} +SE_BIND_PROP_SET(js_cc_CanvasRenderingContext2D__fillStyle_set) + +static bool js_cc_CanvasRenderingContext2D__fillStyle_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::CanvasRenderingContext2D *arg1 = (cc::CanvasRenderingContext2D *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(arg1->_fillStyle, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "CanvasRenderingContext2D__fillStyle_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(arg1->_fillStyle, s.thisObject(), s.rval()); + return true; } +SE_BIND_PROP_GET(js_cc_CanvasRenderingContext2D__fillStyle_get) -static bool js_cc_Vec2_clamp_static(se::State& s) +static bool js_cc_CanvasRenderingContext2D__strokeStyle_set(se::State& s) { - // js_function_dispatcher CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); + cc::CanvasRenderingContext2D *arg1 = (cc::CanvasRenderingContext2D *) NULL ; - // js_function_dispatch_case - if (argc == 2) { - ok = js_cc_Vec2_clamp__SWIG_0(s); - if (ok) { - return true; - } - } // js_function_dispatch_case - if (argc == 4) { - ok = js_cc_Vec2_clamp_static__SWIG_1(s); - if (ok) { - return true; - } - } - SE_REPORT_ERROR("wrong number of arguments: %d", (int)argc); - return false; + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg1->_strokeStyle, s.thisObject()); + SE_PRECONDITION2(ok, false, "CanvasRenderingContext2D__strokeStyle_set,2,SWIGTYPE_ccstd__string"); + + + + return true; } -SE_BIND_FUNC(js_cc_Vec2_clamp_static) +SE_BIND_PROP_SET(js_cc_CanvasRenderingContext2D__strokeStyle_set) -static bool js_cc_Vec2_distance(se::State& s) +static bool js_cc_CanvasRenderingContext2D__strokeStyle_get(se::State& s) { - // js_function - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::Vec2 *arg1 = (cc::Vec2 *) NULL ; - cc::Vec2 *arg2 = 0 ; - cc::Vec2 temp2 ; - float result; + cc::CanvasRenderingContext2D *arg1 = (cc::CanvasRenderingContext2D *) NULL ; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_distance,2,SWIGTYPE_p_cc__Vec2"); - arg2 = &temp2; - - result = (float)((cc::Vec2 const *)arg1)->distance((cc::Vec2 const &)*arg2); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(arg1->_strokeStyle, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "CanvasRenderingContext2D__strokeStyle_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(arg1->_strokeStyle, s.thisObject(), s.rval()); - // out 1 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); return true; } -SE_BIND_FUNC(js_cc_Vec2_distance) +SE_BIND_PROP_GET(js_cc_CanvasRenderingContext2D__strokeStyle_get) -static bool js_cc_Vec2_distanceSquared(se::State& s) +static bool js_cc_CanvasRenderingContext2D__globalCompositeOperation_set(se::State& s) { - // js_function - CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::Vec2 *arg1 = (cc::Vec2 *) NULL ; - cc::Vec2 *arg2 = 0 ; - cc::Vec2 temp2 ; - float result; + cc::CanvasRenderingContext2D *arg1 = (cc::CanvasRenderingContext2D *) NULL ; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_distanceSquared,2,SWIGTYPE_p_cc__Vec2"); - arg2 = &temp2; - result = (float)((cc::Vec2 const *)arg1)->distanceSquared((cc::Vec2 const &)*arg2); + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg1->_globalCompositeOperation, s.thisObject()); + SE_PRECONDITION2(ok, false, "CanvasRenderingContext2D__globalCompositeOperation_set,2,SWIGTYPE_ccstd__string"); - // out 1 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); return true; } -SE_BIND_FUNC(js_cc_Vec2_distanceSquared) +SE_BIND_PROP_SET(js_cc_CanvasRenderingContext2D__globalCompositeOperation_set) -static bool js_cc_Vec2_dot__SWIG_0(se::State& s) +static bool js_cc_CanvasRenderingContext2D__globalCompositeOperation_get(se::State& s) { - // js_overloaded_function - CC_UNUSED bool ok = true; - const auto& args = s.args(); - cc::Vec2 *arg1 = (cc::Vec2 *) NULL ; - cc::Vec2 *arg2 = 0 ; - cc::Vec2 temp2 ; - float result; + cc::CanvasRenderingContext2D *arg1 = (cc::CanvasRenderingContext2D *) NULL ; - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_dot,2,SWIGTYPE_p_cc__Vec2"); - arg2 = &temp2; - - result = (float)((cc::Vec2 const *)arg1)->dot((cc::Vec2 const &)*arg2); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(arg1->_globalCompositeOperation, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "CanvasRenderingContext2D__globalCompositeOperation_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(arg1->_globalCompositeOperation, s.thisObject(), s.rval()); - // out 1 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); return true; } +SE_BIND_PROP_GET(js_cc_CanvasRenderingContext2D__globalCompositeOperation_get) -static bool js_cc_Vec2_dot_static__SWIG_1(se::State& s) -{ - // js_overloaded_function +bool js_register_cc_CanvasRenderingContext2D(se::Object* obj) { + auto* cls = se::Class::create("CanvasRenderingContext2D", obj, __jsb_cc_ICanvasRenderingContext2D_proto, _SE(js_new_cc_CanvasRenderingContext2D)); - CC_UNUSED bool ok = true; - const auto& args = s.args(); - cc::Vec2 *arg1 = 0 ; - cc::Vec2 *arg2 = 0 ; - cc::Vec2 temp1 ; - cc::Vec2 temp2 ; - float result; + cls->defineProperty("_width", _SE(js_cc_CanvasRenderingContext2D__width_get), _SE(js_cc_CanvasRenderingContext2D__width_set)); + cls->defineProperty("_height", _SE(js_cc_CanvasRenderingContext2D__height_get), _SE(js_cc_CanvasRenderingContext2D__height_set)); + cls->defineProperty("_lineWidth", _SE(js_cc_CanvasRenderingContext2D__lineWidth_get), _SE(js_cc_CanvasRenderingContext2D__lineWidth_set)); + cls->defineProperty("_lineJoin", _SE(js_cc_CanvasRenderingContext2D__lineJoin_get), _SE(js_cc_CanvasRenderingContext2D__lineJoin_set)); + cls->defineProperty("_lineCap", _SE(js_cc_CanvasRenderingContext2D__lineCap_get), _SE(js_cc_CanvasRenderingContext2D__lineCap_set)); + cls->defineProperty("_font", _SE(js_cc_CanvasRenderingContext2D__font_get), _SE(js_cc_CanvasRenderingContext2D__font_set)); + cls->defineProperty("_textAlign", _SE(js_cc_CanvasRenderingContext2D__textAlign_get), _SE(js_cc_CanvasRenderingContext2D__textAlign_set)); + cls->defineProperty("_textBaseline", _SE(js_cc_CanvasRenderingContext2D__textBaseline_get), _SE(js_cc_CanvasRenderingContext2D__textBaseline_set)); + cls->defineProperty("_fillStyle", _SE(js_cc_CanvasRenderingContext2D__fillStyle_get), _SE(js_cc_CanvasRenderingContext2D__fillStyle_set)); + cls->defineProperty("_strokeStyle", _SE(js_cc_CanvasRenderingContext2D__strokeStyle_get), _SE(js_cc_CanvasRenderingContext2D__strokeStyle_set)); + cls->defineProperty("_globalCompositeOperation", _SE(js_cc_CanvasRenderingContext2D__globalCompositeOperation_get), _SE(js_cc_CanvasRenderingContext2D__globalCompositeOperation_set)); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp1, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_dot,1,SWIGTYPE_p_cc__Vec2"); - arg1 = &temp1; - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[1], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_dot,2,SWIGTYPE_p_cc__Vec2"); - arg2 = &temp2; - result = (float)cc::Vec2::dot((cc::Vec2 const &)*arg1,(cc::Vec2 const &)*arg2); - // out 1 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + + cls->defineFinalizeFunction(_SE(js_delete_cc_CanvasRenderingContext2D)); + cls->install(); + JSBClassType::registerClass(cls); + + __jsb_cc_CanvasRenderingContext2D_proto = cls->getProto(); + __jsb_cc_CanvasRenderingContext2D_class = cls; + se::ScriptEngine::getInstance()->clearException(); return true; } -static bool js_cc_Vec2_dot_static(se::State& s) + +se::Class* __jsb_cc_Device_class = nullptr; +se::Object* __jsb_cc_Device_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_Device) + +static bool js_cc_Device_getDPI_static(se::State& s) { - // js_function_dispatcher + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); + int result; - // js_function_dispatch_case - if (argc == 1) { - ok = js_cc_Vec2_dot__SWIG_0(s); - if (ok) { - return true; - } - } // js_function_dispatch_case - if (argc == 2) { - ok = js_cc_Vec2_dot_static__SWIG_1(s); - if (ok) { - return true; - } - } - SE_REPORT_ERROR("wrong number of arguments: %d", (int)argc); - return false; + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + result = (int)cc::Device::getDPI(); + + // out 1 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + + + return true; } -SE_BIND_FUNC(js_cc_Vec2_dot_static) +SE_BIND_FUNC(js_cc_Device_getDPI_static) -static bool js_cc_Vec2_length(se::State& s) +static bool js_cc_Device_getDevicePixelRatio_static(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::Vec2 *arg1 = (cc::Vec2 *) NULL ; float result; if(argc != 0) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (float)((cc::Vec2 const *)arg1)->length(); + result = (float)cc::Device::getDevicePixelRatio(); // out 1 ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); @@ -5733,299 +3644,345 @@ static bool js_cc_Vec2_length(se::State& s) return true; } -SE_BIND_FUNC(js_cc_Vec2_length) +SE_BIND_FUNC(js_cc_Device_getDevicePixelRatio_static) -static bool js_cc_Vec2_lengthSquared(se::State& s) +static bool js_cc_Device_setAccelerometerEnabled_static(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::Vec2 *arg1 = (cc::Vec2 *) NULL ; - float result; + bool arg1 ; - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (float)((cc::Vec2 const *)arg1)->lengthSquared(); - - // out 1 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + // %typemap(in) bool + ok &= sevalue_to_native(args[0], &arg1); + SE_PRECONDITION2(ok, false, "Device_setAccelerometerEnabled,1,SWIGTYPE_bool"); + cc::Device::setAccelerometerEnabled(arg1); return true; } -SE_BIND_FUNC(js_cc_Vec2_lengthSquared) +SE_BIND_FUNC(js_cc_Device_setAccelerometerEnabled_static) -static bool js_cc_Vec2_negate(se::State& s) +static bool js_cc_Device_setAccelerometerInterval_static(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::Vec2 *arg1 = (cc::Vec2 *) NULL ; + float arg1 ; - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - (arg1)->negate(); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg1, nullptr); + SE_PRECONDITION2(ok, false, "Device_setAccelerometerInterval,1,SWIGTYPE_float"); + cc::Device::setAccelerometerInterval(arg1); return true; } -SE_BIND_FUNC(js_cc_Vec2_negate) +SE_BIND_FUNC(js_cc_Device_setAccelerometerInterval_static) -static bool js_cc_Vec2_normalize(se::State& s) +static bool js_cc_Device_getDeviceOrientation_static(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::Vec2 *arg1 = (cc::Vec2 *) NULL ; + cc::IScreen::Orientation result; + int32_t temp ; if(argc != 0) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - (arg1)->normalize(); + result = (cc::IScreen::Orientation)cc::Device::getDeviceOrientation(); + // out 4 + s.rval().setInt32(static_cast(result)); return true; } -SE_BIND_FUNC(js_cc_Vec2_normalize) +SE_BIND_FUNC(js_cc_Device_getDeviceOrientation_static) -static bool js_cc_Vec2_getNormalized(se::State& s) +static bool js_cc_Device_getDeviceModel_static(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::Vec2 *arg1 = (cc::Vec2 *) NULL ; - cc::Vec2 result; + ccstd::string result; if(argc != 0) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = ((cc::Vec2 const *)arg1)->getNormalized(); + result = cc::Device::getDeviceModel(); // %typemap(out) SWIGTYPE ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Vec2_getNormalized, Error processing arguments"); + SE_PRECONDITION2(ok, false, "Device_getDeviceModel, Error processing arguments"); SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); return true; } -SE_BIND_FUNC(js_cc_Vec2_getNormalized) +SE_BIND_FUNC(js_cc_Device_getDeviceModel_static) -static bool js_cc_Vec2_scale__SWIG_0(se::State& s) +static bool js_cc_Device_setKeepScreenOn_static(se::State& s) { - // js_overloaded_function + // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); - cc::Vec2 *arg1 = (cc::Vec2 *) NULL ; - float arg2 ; + size_t argc = args.size(); + bool arg1 ; - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "Vec2_scale,2,SWIGTYPE_float"); - (arg1)->scale(arg2); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + // %typemap(in) bool + ok &= sevalue_to_native(args[0], &arg1); + SE_PRECONDITION2(ok, false, "Device_setKeepScreenOn,1,SWIGTYPE_bool"); + cc::Device::setKeepScreenOn(arg1); return true; } +SE_BIND_FUNC(js_cc_Device_setKeepScreenOn_static) -static bool js_cc_Vec2_scale__SWIG_1(se::State& s) +static bool js_cc_Device_vibrate_static(se::State& s) { - // js_overloaded_function + // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); - cc::Vec2 *arg1 = (cc::Vec2 *) NULL ; - cc::Vec2 *arg2 = 0 ; - cc::Vec2 temp2 ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_scale,2,SWIGTYPE_p_cc__Vec2"); - arg2 = &temp2; + size_t argc = args.size(); + float arg1 ; - (arg1)->scale((cc::Vec2 const &)*arg2); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg1, nullptr); + SE_PRECONDITION2(ok, false, "Device_vibrate,1,SWIGTYPE_float"); + cc::Device::vibrate(arg1); return true; } +SE_BIND_FUNC(js_cc_Device_vibrate_static) -static bool js_cc_Vec2_scale(se::State& s) +static bool js_cc_Device_getBatteryLevel_static(se::State& s) { - // js_function_dispatcher + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); + float result; - // js_function_dispatch_case - if (argc == 1) { - ok = js_cc_Vec2_scale__SWIG_0(s); - if (ok) { - return true; - } - } // js_function_dispatch_case - if (argc == 1) { - ok = js_cc_Vec2_scale__SWIG_1(s); - if (ok) { - return true; - } - } - SE_REPORT_ERROR("wrong number of arguments: %d", (int)argc); - return false; + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + result = (float)cc::Device::getBatteryLevel(); + + // out 1 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + + + return true; } -SE_BIND_FUNC(js_cc_Vec2_scale) +SE_BIND_FUNC(js_cc_Device_getBatteryLevel_static) -static bool js_cc_Vec2_rotate__SWIG_0(se::State& s) +static bool js_cc_Device_getNetworkType_static(se::State& s) { - // js_overloaded_function + // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); - cc::Vec2 *arg1 = (cc::Vec2 *) NULL ; - cc::Vec2 *arg2 = 0 ; - float arg3 ; - cc::Vec2 temp2 ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_rotate,2,SWIGTYPE_p_cc__Vec2"); - arg2 = &temp2; + size_t argc = args.size(); + cc::INetwork::NetworkType result; + int32_t temp ; - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[1], &arg3, nullptr); - SE_PRECONDITION2(ok, false, "Vec2_rotate,3,SWIGTYPE_float"); - (arg1)->rotate((cc::Vec2 const &)*arg2,arg3); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + result = (cc::INetwork::NetworkType)cc::Device::getNetworkType(); + // out 4 + s.rval().setInt32(static_cast(result)); return true; } +SE_BIND_FUNC(js_cc_Device_getNetworkType_static) -static bool js_cc_Vec2_set__SWIG_0(se::State& s) +static bool js_cc_Device_getSafeAreaEdge_static(se::State& s) { - // js_overloaded_function + // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); - cc::Vec2 *arg1 = (cc::Vec2 *) NULL ; - float arg2 ; - float arg3 ; + size_t argc = args.size(); + cc::Vec4 result; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + result = cc::Device::getSafeAreaEdge(); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "Device_getSafeAreaEdge, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "Vec2_set,2,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[1], &arg3, nullptr); - SE_PRECONDITION2(ok, false, "Vec2_set,3,SWIGTYPE_float"); - (arg1)->set(arg2,arg3); return true; } +SE_BIND_FUNC(js_cc_Device_getSafeAreaEdge_static) -static bool js_cc_Vec2_set__SWIG_1(se::State& s) +static bool js_delete_cc_Device(se::State& s) { - // js_overloaded_function + // js_dtoroverride + return true; +} +SE_BIND_FINALIZE_FUNC(js_delete_cc_Device) + +bool js_register_cc_Device(se::Object* obj) { + auto* cls = se::Class::create("Device", obj, nullptr, nullptr); - CC_UNUSED bool ok = true; - const auto& args = s.args(); - cc::Vec2 *arg1 = (cc::Vec2 *) NULL ; - float *arg2 = (float *) NULL ; - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE* - ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_set,2,SWIGTYPE_p_float"); - (arg1)->set((float const *)arg2); + cls->defineStaticFunction("getDPI", _SE(js_cc_Device_getDPI_static)); + cls->defineStaticFunction("getDevicePixelRatio", _SE(js_cc_Device_getDevicePixelRatio_static)); + cls->defineStaticFunction("setAccelerometerEnabled", _SE(js_cc_Device_setAccelerometerEnabled_static)); + cls->defineStaticFunction("setAccelerometerInterval", _SE(js_cc_Device_setAccelerometerInterval_static)); + cls->defineStaticFunction("getDeviceOrientation", _SE(js_cc_Device_getDeviceOrientation_static)); + cls->defineStaticFunction("getDeviceModel", _SE(js_cc_Device_getDeviceModel_static)); + cls->defineStaticFunction("setKeepScreenOn", _SE(js_cc_Device_setKeepScreenOn_static)); + cls->defineStaticFunction("vibrate", _SE(js_cc_Device_vibrate_static)); + cls->defineStaticFunction("getBatteryLevel", _SE(js_cc_Device_getBatteryLevel_static)); + cls->defineStaticFunction("getNetworkType", _SE(js_cc_Device_getNetworkType_static)); + cls->defineStaticFunction("getSafeAreaEdge", _SE(js_cc_Device_getSafeAreaEdge_static)); + + + cls->defineFinalizeFunction(_SE(js_delete_cc_Device)); + + + cls->install(); + JSBClassType::registerClass(cls); + + __jsb_cc_Device_proto = cls->getProto(); + __jsb_cc_Device_class = cls; + se::ScriptEngine::getInstance()->clearException(); return true; } -static bool js_cc_Vec2_set__SWIG_2(se::State& s) + +se::Class* __jsb_cc_ISystemWindow_class = nullptr; +se::Object* __jsb_cc_ISystemWindow_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_ISystemWindow) + +static bool js_cc_ISystemWindow_createWindow__SWIG_0(se::State& s) { // js_overloaded_function CC_UNUSED bool ok = true; const auto& args = s.args(); - cc::Vec2 *arg1 = (cc::Vec2 *) NULL ; - cc::Vec2 *arg2 = 0 ; - cc::Vec2 temp2 ; + cc::ISystemWindow *arg1 = (cc::ISystemWindow *) NULL ; + char *arg2 = (char *) NULL ; + int arg3 ; + int arg4 ; + int arg5 ; + int arg6 ; + int arg7 ; + ccstd::string temp2 ; + bool result; - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_set,2,SWIGTYPE_p_cc__Vec2"); - arg2 = &temp2; - (arg1)->set((cc::Vec2 const &)*arg2); + ok &= sevalue_to_native(args[0], &temp2); + SE_PRECONDITION2(ok, false, "ISystemWindow_createWindow,2,SWIGTYPE_p_char"); + arg2 = (char *) temp2.c_str(); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "ISystemWindow_createWindow,3,SWIGTYPE_int"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[2], &arg4, nullptr); + SE_PRECONDITION2(ok, false, "ISystemWindow_createWindow,4,SWIGTYPE_int"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[3], &arg5, nullptr); + SE_PRECONDITION2(ok, false, "ISystemWindow_createWindow,5,SWIGTYPE_int"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[4], &arg6, nullptr); + SE_PRECONDITION2(ok, false, "ISystemWindow_createWindow,6,SWIGTYPE_int"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[5], &arg7, nullptr); + SE_PRECONDITION2(ok, false, "ISystemWindow_createWindow,7,SWIGTYPE_int"); + result = (bool)(arg1)->createWindow((char const *)arg2,arg3,arg4,arg5,arg6,arg7); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); return true; } -static bool js_cc_Vec2_set__SWIG_3(se::State& s) +static bool js_cc_ISystemWindow_createWindow__SWIG_1(se::State& s) { // js_overloaded_function CC_UNUSED bool ok = true; const auto& args = s.args(); - cc::Vec2 *arg1 = (cc::Vec2 *) NULL ; - cc::Vec2 *arg2 = 0 ; - cc::Vec2 *arg3 = 0 ; - cc::Vec2 temp2 ; - cc::Vec2 temp3 ; + cc::ISystemWindow *arg1 = (cc::ISystemWindow *) NULL ; + char *arg2 = (char *) NULL ; + int arg3 ; + int arg4 ; + int arg5 ; + ccstd::string temp2 ; + bool result; - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_set,2,SWIGTYPE_p_cc__Vec2"); - arg2 = &temp2; - - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[1], &temp3, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_set,3,SWIGTYPE_p_cc__Vec2"); - arg3 = &temp3; - (arg1)->set((cc::Vec2 const &)*arg2,(cc::Vec2 const &)*arg3); + ok &= sevalue_to_native(args[0], &temp2); + SE_PRECONDITION2(ok, false, "ISystemWindow_createWindow,2,SWIGTYPE_p_char"); + arg2 = (char *) temp2.c_str(); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "ISystemWindow_createWindow,3,SWIGTYPE_int"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[2], &arg4, nullptr); + SE_PRECONDITION2(ok, false, "ISystemWindow_createWindow,4,SWIGTYPE_int"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[3], &arg5, nullptr); + SE_PRECONDITION2(ok, false, "ISystemWindow_createWindow,5,SWIGTYPE_int"); + result = (bool)(arg1)->createWindow((char const *)arg2,arg3,arg4,arg5); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); return true; } -static bool js_cc_Vec2_set(se::State& s) +static bool js_cc_ISystemWindow_createWindow(se::State& s) { // js_function_dispatcher CC_UNUSED bool ok = true; @@ -6033,26 +3990,14 @@ static bool js_cc_Vec2_set(se::State& s) size_t argc = args.size(); // js_function_dispatch_case - if (argc == 2) { - ok = js_cc_Vec2_set__SWIG_0(s); - if (ok) { - return true; - } - } // js_function_dispatch_case - if (argc == 1) { - ok = js_cc_Vec2_set__SWIG_1(s); - if (ok) { - return true; - } - } // js_function_dispatch_case - if (argc == 1) { - ok = js_cc_Vec2_set__SWIG_2(s); + if (argc == 6) { + ok = js_cc_ISystemWindow_createWindow__SWIG_0(s); if (ok) { return true; } } // js_function_dispatch_case - if (argc == 2) { - ok = js_cc_Vec2_set__SWIG_3(s); + if (argc == 4) { + ok = js_cc_ISystemWindow_createWindow__SWIG_1(s); if (ok) { return true; } @@ -6060,2365 +4005,2334 @@ static bool js_cc_Vec2_set(se::State& s) SE_REPORT_ERROR("wrong number of arguments: %d", (int)argc); return false; } -SE_BIND_FUNC(js_cc_Vec2_set) +SE_BIND_FUNC(js_cc_ISystemWindow_createWindow) -static bool js_cc_Vec2_setZero(se::State& s) +static bool js_cc_ISystemWindow_getWindowId(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::Vec2 *arg1 = (cc::Vec2 *) NULL ; + cc::ISystemWindow *arg1 = (cc::ISystemWindow *) NULL ; + uint32_t result; if(argc != 0) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - (arg1)->setZero(); - - - return true; -} -SE_BIND_FUNC(js_cc_Vec2_setZero) - -static bool js_cc_Vec2_subtract__SWIG_0(se::State& s) -{ - // js_overloaded_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - cc::Vec2 *arg1 = (cc::Vec2 *) NULL ; - cc::Vec2 *arg2 = 0 ; - cc::Vec2 temp2 ; - - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_subtract,2,SWIGTYPE_p_cc__Vec2"); - arg2 = &temp2; + result = ((cc::ISystemWindow const *)arg1)->getWindowId(); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "ISystemWindow_getWindowId, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - (arg1)->subtract((cc::Vec2 const &)*arg2); return true; } +SE_BIND_FUNC(js_cc_ISystemWindow_getWindowId) -static bool js_cc_Vec2_subtract_static__SWIG_1(se::State& s) +static bool js_cc_ISystemWindow_closeWindow(se::State& s) { - // js_overloaded_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - cc::Vec2 *arg1 = 0 ; - cc::Vec2 *arg2 = 0 ; - cc::Vec2 *arg3 = (cc::Vec2 *) NULL ; - cc::Vec2 temp1 ; - cc::Vec2 temp2 ; - - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp1, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_subtract,1,SWIGTYPE_p_cc__Vec2"); - arg1 = &temp1; - - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[1], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_subtract,2,SWIGTYPE_p_cc__Vec2"); - arg2 = &temp2; - - // %typemap(in) SWIGTYPE* - ok &= sevalue_to_native(args[2], &arg3, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_subtract,3,SWIGTYPE_p_cc__Vec2"); - cc::Vec2::subtract((cc::Vec2 const &)*arg1,(cc::Vec2 const &)*arg2,arg3); - + // js_function - return true; -} - -static bool js_cc_Vec2_subtract_static(se::State& s) -{ - // js_function_dispatcher CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); + cc::ISystemWindow *arg1 = (cc::ISystemWindow *) NULL ; - // js_function_dispatch_case - if (argc == 1) { - ok = js_cc_Vec2_subtract__SWIG_0(s); - if (ok) { - return true; - } - } // js_function_dispatch_case - if (argc == 3) { - ok = js_cc_Vec2_subtract_static__SWIG_1(s); - if (ok) { - return true; - } - } - SE_REPORT_ERROR("wrong number of arguments: %d", (int)argc); - return false; + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + (arg1)->closeWindow(); + + + return true; } -SE_BIND_FUNC(js_cc_Vec2_subtract_static) +SE_BIND_FUNC(js_cc_ISystemWindow_closeWindow) -static bool js_cc_Vec2_smooth(se::State& s) +static bool js_cc_ISystemWindow_getWindowHandle(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::Vec2 *arg1 = (cc::Vec2 *) NULL ; - cc::Vec2 *arg2 = 0 ; - float arg3 ; - float arg4 ; - cc::Vec2 temp2 ; + cc::ISystemWindow *arg1 = (cc::ISystemWindow *) NULL ; + uintptr_t result; - if(argc != 3) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_smooth,2,SWIGTYPE_p_cc__Vec2"); - arg2 = &temp2; + result = ((cc::ISystemWindow const *)arg1)->getWindowHandle(); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "ISystemWindow_getWindowHandle, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[1], &arg3, nullptr); - SE_PRECONDITION2(ok, false, "Vec2_smooth,3,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[2], &arg4, nullptr); - SE_PRECONDITION2(ok, false, "Vec2_smooth,4,SWIGTYPE_float"); - (arg1)->smooth((cc::Vec2 const &)*arg2,arg3,arg4); return true; } -SE_BIND_FUNC(js_cc_Vec2_smooth) +SE_BIND_FUNC(js_cc_ISystemWindow_getWindowHandle) -static bool js_cc_Vec2_approxEquals__SWIG_0(se::State& s) +static bool js_cc_ISystemWindow_getViewSize(se::State& s) { - // js_overloaded_function + // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); - cc::Vec2 *arg1 = (cc::Vec2 *) NULL ; - cc::Vec2 *arg2 = 0 ; - float arg3 ; - cc::Vec2 temp2 ; - bool result; + size_t argc = args.size(); + cc::ISystemWindow *arg1 = (cc::ISystemWindow *) NULL ; + cc::ISystemWindow::Size result; - arg1 = SE_THIS_OBJECT(s); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_approxEquals,2,SWIGTYPE_p_cc__Vec2"); - arg2 = &temp2; - - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[1], &arg3, nullptr); - SE_PRECONDITION2(ok, false, "Vec2_approxEquals,3,SWIGTYPE_float"); - result = (bool)((cc::Vec2 const *)arg1)->approxEquals((cc::Vec2 const &)*arg2,arg3); - // out 5 + result = ((cc::ISystemWindow const *)arg1)->getViewSize(); + // %typemap(out) SWIGTYPE ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "ISystemWindow_getViewSize, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + return true; } +SE_BIND_FUNC(js_cc_ISystemWindow_getViewSize) -static bool js_cc_Vec2_approxEquals__SWIG_1(se::State& s) +static bool js_cc_ISystemWindow_setViewSize(se::State& s) { - // js_overloaded_function + // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); - cc::Vec2 *arg1 = (cc::Vec2 *) NULL ; - cc::Vec2 *arg2 = 0 ; - cc::Vec2 temp2 ; - bool result; + size_t argc = args.size(); + cc::ISystemWindow *arg1 = (cc::ISystemWindow *) NULL ; + uint32_t arg2 ; + uint32_t arg3 ; - arg1 = SE_THIS_OBJECT(s); + if(argc != 2) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_approxEquals,2,SWIGTYPE_p_cc__Vec2"); - arg2 = &temp2; - result = (bool)((cc::Vec2 const *)arg1)->approxEquals((cc::Vec2 const &)*arg2); - // out 5 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "ISystemWindow_setViewSize,2,SWIGTYPE_uint32_t"); - return true; -} - -static bool js_cc_Vec2_approxEquals(se::State& s) -{ - // js_function_dispatcher - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[1], &arg3, s.thisObject()); + SE_PRECONDITION2(ok, false, "ISystemWindow_setViewSize,3,SWIGTYPE_uint32_t"); - // js_function_dispatch_case - if (argc == 2) { - ok = js_cc_Vec2_approxEquals__SWIG_0(s); - if (ok) { - return true; - } - } // js_function_dispatch_case - if (argc == 1) { - ok = js_cc_Vec2_approxEquals__SWIG_1(s); - if (ok) { - return true; - } - } - SE_REPORT_ERROR("wrong number of arguments: %d", (int)argc); - return false; + (arg1)->setViewSize(arg2,arg3); + + + return true; } -SE_BIND_FUNC(js_cc_Vec2_approxEquals) +SE_BIND_FUNC(js_cc_ISystemWindow_setViewSize) -static bool js_cc_Vec2_setPoint(se::State& s) +static bool js_cc_ISystemWindow_setCursorEnabled(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::Vec2 *arg1 = (cc::Vec2 *) NULL ; - float arg2 ; - float arg3 ; + cc::ISystemWindow *arg1 = (cc::ISystemWindow *) NULL ; + bool arg2 ; - if(argc != 2) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "Vec2_setPoint,2,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[1], &arg3, nullptr); - SE_PRECONDITION2(ok, false, "Vec2_setPoint,3,SWIGTYPE_float"); - (arg1)->setPoint(arg2,arg3); + // %typemap(in) bool + ok &= sevalue_to_native(args[0], &arg2); + SE_PRECONDITION2(ok, false, "ISystemWindow_setCursorEnabled,2,SWIGTYPE_bool"); + (arg1)->setCursorEnabled(arg2); return true; } -SE_BIND_FUNC(js_cc_Vec2_setPoint) +SE_BIND_FUNC(js_cc_ISystemWindow_setCursorEnabled) -static bool js_cc_Vec2_equals(se::State& s) +static bool js_cc_ISystemWindow_copyTextToClipboard(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::Vec2 *arg1 = (cc::Vec2 *) NULL ; - cc::Vec2 *arg2 = 0 ; - cc::Vec2 temp2 ; - bool result; + cc::ISystemWindow *arg1 = (cc::ISystemWindow *) NULL ; + ccstd::string *arg2 = 0 ; + ccstd::string temp2 ; if(argc != 1) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE& ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_equals,2,SWIGTYPE_p_cc__Vec2"); + SE_PRECONDITION2(ok, false, "ISystemWindow_copyTextToClipboard,2,SWIGTYPE_p_ccstd__string"); arg2 = &temp2; - result = (bool)((cc::Vec2 const *)arg1)->equals((cc::Vec2 const &)*arg2); - // out 5 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + (arg1)->copyTextToClipboard((ccstd::string const &)*arg2); return true; } -SE_BIND_FUNC(js_cc_Vec2_equals) +SE_BIND_FUNC(js_cc_ISystemWindow_copyTextToClipboard) -static bool js_cc_Vec2_fuzzyEquals(se::State& s) +static bool js_delete_cc_ISystemWindow(se::State& s) { - // js_function + // js_dtoroverride + return true; +} +SE_BIND_FINALIZE_FUNC(js_delete_cc_ISystemWindow) + +bool js_register_cc_ISystemWindow(se::Object* obj) { + auto* cls = se::Class::create("ISystemWindow", obj, nullptr, nullptr); + + + cls->defineFunction("createWindow", _SE(js_cc_ISystemWindow_createWindow)); + cls->defineFunction("getWindowId", _SE(js_cc_ISystemWindow_getWindowId)); + cls->defineFunction("closeWindow", _SE(js_cc_ISystemWindow_closeWindow)); + cls->defineFunction("getWindowHandle", _SE(js_cc_ISystemWindow_getWindowHandle)); + cls->defineFunction("getViewSize", _SE(js_cc_ISystemWindow_getViewSize)); + cls->defineFunction("setViewSize", _SE(js_cc_ISystemWindow_setViewSize)); + cls->defineFunction("setCursorEnabled", _SE(js_cc_ISystemWindow_setCursorEnabled)); + cls->defineFunction("copyTextToClipboard", _SE(js_cc_ISystemWindow_copyTextToClipboard)); + cls->defineStaticProperty("mainWindowId", nullptr, nullptr); + + + + cls->defineFinalizeFunction(_SE(js_delete_cc_ISystemWindow)); + + + cls->install(); + JSBClassType::registerClass(cls); + + __jsb_cc_ISystemWindow_proto = cls->getProto(); + __jsb_cc_ISystemWindow_class = cls; + se::ScriptEngine::getInstance()->clearException(); + return true; +} + + +se::Class* __jsb_cc_ISystemWindowInfo_class = nullptr; +se::Object* __jsb_cc_ISystemWindowInfo_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_ISystemWindowInfo) + +static bool js_cc_ISystemWindowInfo_title_set(se::State& s) +{ CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::Vec2 *arg1 = (cc::Vec2 *) NULL ; - cc::Vec2 *arg2 = 0 ; - float arg3 ; - cc::Vec2 temp2 ; - bool result; + cc::ISystemWindowInfo *arg1 = (cc::ISystemWindowInfo *) NULL ; - if(argc != 2) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); - return false; - } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_fuzzyEquals,2,SWIGTYPE_p_cc__Vec2"); - arg2 = &temp2; - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[1], &arg3, nullptr); - SE_PRECONDITION2(ok, false, "Vec2_fuzzyEquals,3,SWIGTYPE_float"); - result = (bool)((cc::Vec2 const *)arg1)->fuzzyEquals((cc::Vec2 const &)*arg2,arg3); - // out 5 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg1->title, s.thisObject()); + SE_PRECONDITION2(ok, false, "ISystemWindowInfo_title_set,2,SWIGTYPE_ccstd__string"); + return true; } -SE_BIND_FUNC(js_cc_Vec2_fuzzyEquals) +SE_BIND_PROP_SET(js_cc_ISystemWindowInfo_title_set) -static bool js_cc_Vec2_getLength(se::State& s) +static bool js_cc_ISystemWindowInfo_title_get(se::State& s) { - // js_function + CC_UNUSED bool ok = true; + cc::ISystemWindowInfo *arg1 = (cc::ISystemWindowInfo *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(arg1->title, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "ISystemWindowInfo_title_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(arg1->title, s.thisObject(), s.rval()); + + + return true; +} +SE_BIND_PROP_GET(js_cc_ISystemWindowInfo_title_get) + +static bool js_cc_ISystemWindowInfo_x_set(se::State& s) +{ CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::Vec2 *arg1 = (cc::Vec2 *) NULL ; - float result; + cc::ISystemWindowInfo *arg1 = (cc::ISystemWindowInfo *) NULL ; - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (float)((cc::Vec2 const *)arg1)->getLength(); - // out 1 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg1->x, s.thisObject()); + SE_PRECONDITION2(ok, false, "ISystemWindowInfo_x_set,2,SWIGTYPE_int32_t"); + return true; } -SE_BIND_FUNC(js_cc_Vec2_getLength) +SE_BIND_PROP_SET(js_cc_ISystemWindowInfo_x_set) -static bool js_cc_Vec2_getLengthSq(se::State& s) +static bool js_cc_ISystemWindowInfo_x_get(se::State& s) { - // js_function + CC_UNUSED bool ok = true; + cc::ISystemWindowInfo *arg1 = (cc::ISystemWindowInfo *) NULL ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(arg1->x, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "ISystemWindowInfo_x_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(arg1->x, s.thisObject(), s.rval()); + + + return true; +} +SE_BIND_PROP_GET(js_cc_ISystemWindowInfo_x_get) + +static bool js_cc_ISystemWindowInfo_y_set(se::State& s) +{ CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::Vec2 *arg1 = (cc::Vec2 *) NULL ; - float result; + cc::ISystemWindowInfo *arg1 = (cc::ISystemWindowInfo *) NULL ; - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (float)((cc::Vec2 const *)arg1)->getLengthSq(); - // out 1 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg1->y, s.thisObject()); + SE_PRECONDITION2(ok, false, "ISystemWindowInfo_y_set,2,SWIGTYPE_int32_t"); + return true; } -SE_BIND_FUNC(js_cc_Vec2_getLengthSq) +SE_BIND_PROP_SET(js_cc_ISystemWindowInfo_y_set) -static bool js_cc_Vec2_getDistanceSq(se::State& s) +static bool js_cc_ISystemWindowInfo_y_get(se::State& s) { - // js_function - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::Vec2 *arg1 = (cc::Vec2 *) NULL ; - cc::Vec2 *arg2 = 0 ; - cc::Vec2 temp2 ; - float result; + cc::ISystemWindowInfo *arg1 = (cc::ISystemWindowInfo *) NULL ; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_getDistanceSq,2,SWIGTYPE_p_cc__Vec2"); - arg2 = &temp2; - - result = (float)((cc::Vec2 const *)arg1)->getDistanceSq((cc::Vec2 const &)*arg2); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(arg1->y, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "ISystemWindowInfo_y_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(arg1->y, s.thisObject(), s.rval()); - // out 1 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); return true; } -SE_BIND_FUNC(js_cc_Vec2_getDistanceSq) +SE_BIND_PROP_GET(js_cc_ISystemWindowInfo_y_get) -static bool js_cc_Vec2_getDistance(se::State& s) +static bool js_cc_ISystemWindowInfo_width_set(se::State& s) { - // js_function - CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::Vec2 *arg1 = (cc::Vec2 *) NULL ; - cc::Vec2 *arg2 = 0 ; - cc::Vec2 temp2 ; - float result; + cc::ISystemWindowInfo *arg1 = (cc::ISystemWindowInfo *) NULL ; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_getDistance,2,SWIGTYPE_p_cc__Vec2"); - arg2 = &temp2; - result = (float)((cc::Vec2 const *)arg1)->getDistance((cc::Vec2 const &)*arg2); + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg1->width, s.thisObject()); + SE_PRECONDITION2(ok, false, "ISystemWindowInfo_width_set,2,SWIGTYPE_int32_t"); - // out 1 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); return true; } -SE_BIND_FUNC(js_cc_Vec2_getDistance) +SE_BIND_PROP_SET(js_cc_ISystemWindowInfo_width_set) -static bool js_cc_Vec2_getAngle__SWIG_0(se::State& s) +static bool js_cc_ISystemWindowInfo_width_get(se::State& s) { - // js_overloaded_function - CC_UNUSED bool ok = true; - const auto& args = s.args(); - cc::Vec2 *arg1 = (cc::Vec2 *) NULL ; - float result; + cc::ISystemWindowInfo *arg1 = (cc::ISystemWindowInfo *) NULL ; - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (float)((cc::Vec2 const *)arg1)->getAngle(); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(arg1->width, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "ISystemWindowInfo_width_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(arg1->width, s.thisObject(), s.rval()); - // out 1 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); return true; } +SE_BIND_PROP_GET(js_cc_ISystemWindowInfo_width_get) -static bool js_cc_Vec2_getAngle__SWIG_1(se::State& s) +static bool js_cc_ISystemWindowInfo_height_set(se::State& s) { - // js_overloaded_function - CC_UNUSED bool ok = true; const auto& args = s.args(); - cc::Vec2 *arg1 = (cc::Vec2 *) NULL ; - cc::Vec2 *arg2 = 0 ; - cc::Vec2 temp2 ; - float result; + size_t argc = args.size(); + cc::ISystemWindowInfo *arg1 = (cc::ISystemWindowInfo *) NULL ; - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_getAngle,2,SWIGTYPE_p_cc__Vec2"); - arg2 = &temp2; - result = (float)((cc::Vec2 const *)arg1)->getAngle((cc::Vec2 const &)*arg2); + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg1->height, s.thisObject()); + SE_PRECONDITION2(ok, false, "ISystemWindowInfo_height_set,2,SWIGTYPE_int32_t"); - // out 1 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); return true; } +SE_BIND_PROP_SET(js_cc_ISystemWindowInfo_height_set) -static bool js_cc_Vec2_getAngle(se::State& s) +static bool js_cc_ISystemWindowInfo_height_get(se::State& s) { - // js_function_dispatcher CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); + cc::ISystemWindowInfo *arg1 = (cc::ISystemWindowInfo *) NULL ; - // js_function_dispatch_case - if (argc == 0) { - ok = js_cc_Vec2_getAngle__SWIG_0(s); - if (ok) { - return true; - } - } // js_function_dispatch_case - if (argc == 1) { - ok = js_cc_Vec2_getAngle__SWIG_1(s); - if (ok) { - return true; - } - } - SE_REPORT_ERROR("wrong number of arguments: %d", (int)argc); - return false; + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(arg1->height, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "ISystemWindowInfo_height_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(arg1->height, s.thisObject(), s.rval()); + + + + return true; } -SE_BIND_FUNC(js_cc_Vec2_getAngle) +SE_BIND_PROP_GET(js_cc_ISystemWindowInfo_height_get) -static bool js_cc_Vec2_cross(se::State& s) +static bool js_cc_ISystemWindowInfo_flags_set(se::State& s) { - // js_function - CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::Vec2 *arg1 = (cc::Vec2 *) NULL ; - cc::Vec2 *arg2 = 0 ; - cc::Vec2 temp2 ; - float result; + cc::ISystemWindowInfo *arg1 = (cc::ISystemWindowInfo *) NULL ; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_cross,2,SWIGTYPE_p_cc__Vec2"); - arg2 = &temp2; - result = (float)((cc::Vec2 const *)arg1)->cross((cc::Vec2 const &)*arg2); + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg1->flags, s.thisObject()); + SE_PRECONDITION2(ok, false, "ISystemWindowInfo_flags_set,2,SWIGTYPE_int32_t"); - // out 1 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); return true; } -SE_BIND_FUNC(js_cc_Vec2_cross) +SE_BIND_PROP_SET(js_cc_ISystemWindowInfo_flags_set) -static bool js_cc_Vec2_getPerp(se::State& s) +static bool js_cc_ISystemWindowInfo_flags_get(se::State& s) { - // js_function - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::Vec2 *arg1 = (cc::Vec2 *) NULL ; - cc::Vec2 result; + cc::ISystemWindowInfo *arg1 = (cc::ISystemWindowInfo *) NULL ; - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = ((cc::Vec2 const *)arg1)->getPerp(); // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Vec2_getPerp, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + ok &= nativevalue_to_se(arg1->flags, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "ISystemWindowInfo_flags_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(arg1->flags, s.thisObject(), s.rval()); return true; } -SE_BIND_FUNC(js_cc_Vec2_getPerp) +SE_BIND_PROP_GET(js_cc_ISystemWindowInfo_flags_get) -static bool js_cc_Vec2_getMidpoint(se::State& s) +static bool js_cc_ISystemWindowInfo_externalHandle_set(se::State& s) { - // js_function - CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::Vec2 *arg1 = (cc::Vec2 *) NULL ; - cc::Vec2 *arg2 = 0 ; - cc::Vec2 temp2 ; - cc::Vec2 result; + cc::ISystemWindowInfo *arg1 = (cc::ISystemWindowInfo *) NULL ; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_getMidpoint,2,SWIGTYPE_p_cc__Vec2"); - arg2 = &temp2; - - result = ((cc::Vec2 const *)arg1)->getMidpoint((cc::Vec2 const &)*arg2); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Vec2_getMidpoint, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - + ok &= sevalue_to_native(args[0], &arg1->externalHandle); + SE_PRECONDITION2(ok, false, "ISystemWindowInfo_externalHandle_set,2,SWIGTYPE_p_void"); return true; } -SE_BIND_FUNC(js_cc_Vec2_getMidpoint) +SE_BIND_PROP_SET(js_cc_ISystemWindowInfo_externalHandle_set) -static bool js_cc_Vec2_getClampPoint(se::State& s) +static bool js_cc_ISystemWindowInfo_externalHandle_get(se::State& s) { - // js_function - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::Vec2 *arg1 = (cc::Vec2 *) NULL ; - cc::Vec2 *arg2 = 0 ; - cc::Vec2 *arg3 = 0 ; - cc::Vec2 temp2 ; - cc::Vec2 temp3 ; - cc::Vec2 result; + cc::ISystemWindowInfo *arg1 = (cc::ISystemWindowInfo *) NULL ; - if(argc != 2) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); - return false; - } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_getClampPoint,2,SWIGTYPE_p_cc__Vec2"); - arg2 = &temp2; + // %typemap(out) SWIGTYPE* + ok &= nativevalue_to_se(arg1->externalHandle, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "ISystemWindowInfo_externalHandle_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(arg1->externalHandle, s.thisObject(), s.rval()); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[1], &temp3, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_getClampPoint,3,SWIGTYPE_p_cc__Vec2"); - arg3 = &temp3; - result = ((cc::Vec2 const *)arg1)->getClampPoint((cc::Vec2 const &)*arg2,(cc::Vec2 const &)*arg3); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Vec2_getClampPoint, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + return true; +} +SE_BIND_PROP_GET(js_cc_ISystemWindowInfo_externalHandle_get) + +// js_ctor +static bool js_new_cc_ISystemWindowInfo(se::State& s) // NOLINT(readability-identifier-naming) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::ISystemWindowInfo *result; + result = (cc::ISystemWindowInfo *)new cc::ISystemWindowInfo(); + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); + return true; +} +SE_BIND_CTOR(js_new_cc_ISystemWindowInfo, __jsb_cc_ISystemWindowInfo_class, js_delete_cc_ISystemWindowInfo) + +static bool js_delete_cc_ISystemWindowInfo(se::State& s) +{ + // js_dtoroverride return true; } -SE_BIND_FUNC(js_cc_Vec2_getClampPoint) +SE_BIND_FINALIZE_FUNC(js_delete_cc_ISystemWindowInfo) -static bool js_cc_Vec2_getRPerp(se::State& s) +template<> +bool sevalue_to_native(const se::Value &from, cc::ISystemWindowInfo * to, se::Object *ctx) { - // js_function + assert(from.isObject()); + se::Object *json = from.toObject(); + auto* data = reinterpret_cast(json->getPrivateData()); + if (data) { + *to = *data; + return true; + } + se::Value field; + bool ok = true; - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::Vec2 *arg1 = (cc::Vec2 *) NULL ; - cc::Vec2 result; + json->getProperty("title", &field, true); + if (!field.isNullOrUndefined()) { + ok &= sevalue_to_native(field, &(to->title), ctx); + } + + + json->getProperty("x", &field, true); + if (!field.isNullOrUndefined()) { + ok &= sevalue_to_native(field, &(to->x), ctx); + } - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; + + json->getProperty("y", &field, true); + if (!field.isNullOrUndefined()) { + ok &= sevalue_to_native(field, &(to->y), ctx); } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = ((cc::Vec2 const *)arg1)->getRPerp(); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Vec2_getRPerp, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + json->getProperty("width", &field, true); + if (!field.isNullOrUndefined()) { + ok &= sevalue_to_native(field, &(to->width), ctx); + } - return true; -} -SE_BIND_FUNC(js_cc_Vec2_getRPerp) - -static bool js_cc_Vec2_project(se::State& s) -{ - // js_function - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::Vec2 *arg1 = (cc::Vec2 *) NULL ; - cc::Vec2 *arg2 = 0 ; - cc::Vec2 temp2 ; - cc::Vec2 result; + json->getProperty("height", &field, true); + if (!field.isNullOrUndefined()) { + ok &= sevalue_to_native(field, &(to->height), ctx); + } - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; + + json->getProperty("flags", &field, true); + if (!field.isNullOrUndefined()) { + ok &= sevalue_to_native(field, &(to->flags), ctx); } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_project,2,SWIGTYPE_p_cc__Vec2"); - arg2 = &temp2; - result = ((cc::Vec2 const *)arg1)->project((cc::Vec2 const &)*arg2); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Vec2_project, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + json->getProperty("externalHandle", &field, true); + if (!field.isNullOrUndefined()) { + ok &= sevalue_to_native(field, &(to->externalHandle), ctx); + } - return true; + return ok; } -SE_BIND_FUNC(js_cc_Vec2_project) -static bool js_cc_Vec2_rotate__SWIG_1(se::State& s) -{ - // js_overloaded_function + +bool js_register_cc_ISystemWindowInfo(se::Object* obj) { + auto* cls = se::Class::create("ISystemWindowInfo", obj, nullptr, _SE(js_new_cc_ISystemWindowInfo)); - CC_UNUSED bool ok = true; - const auto& args = s.args(); - cc::Vec2 *arg1 = (cc::Vec2 *) NULL ; - cc::Vec2 *arg2 = 0 ; - cc::Vec2 temp2 ; - cc::Vec2 result; + cls->defineProperty("title", _SE(js_cc_ISystemWindowInfo_title_get), _SE(js_cc_ISystemWindowInfo_title_set)); + cls->defineProperty("x", _SE(js_cc_ISystemWindowInfo_x_get), _SE(js_cc_ISystemWindowInfo_x_set)); + cls->defineProperty("y", _SE(js_cc_ISystemWindowInfo_y_get), _SE(js_cc_ISystemWindowInfo_y_set)); + cls->defineProperty("width", _SE(js_cc_ISystemWindowInfo_width_get), _SE(js_cc_ISystemWindowInfo_width_set)); + cls->defineProperty("height", _SE(js_cc_ISystemWindowInfo_height_get), _SE(js_cc_ISystemWindowInfo_height_set)); + cls->defineProperty("flags", _SE(js_cc_ISystemWindowInfo_flags_get), _SE(js_cc_ISystemWindowInfo_flags_set)); + cls->defineProperty("externalHandle", _SE(js_cc_ISystemWindowInfo_externalHandle_get), _SE(js_cc_ISystemWindowInfo_externalHandle_set)); - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_rotate,2,SWIGTYPE_p_cc__Vec2"); - arg2 = &temp2; - result = ((cc::Vec2 const *)arg1)->rotate((cc::Vec2 const &)*arg2); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Vec2_rotate, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + cls->defineFinalizeFunction(_SE(js_delete_cc_ISystemWindowInfo)); + + + cls->install(); + JSBClassType::registerClass(cls); + + __jsb_cc_ISystemWindowInfo_proto = cls->getProto(); + __jsb_cc_ISystemWindowInfo_class = cls; + se::ScriptEngine::getInstance()->clearException(); return true; } -static bool js_cc_Vec2_rotate(se::State& s) -{ - // js_function_dispatcher - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - - // js_function_dispatch_case - if (argc == 2) { - ok = js_cc_Vec2_rotate__SWIG_0(s); - if (ok) { - return true; - } - } // js_function_dispatch_case - if (argc == 1) { - ok = js_cc_Vec2_rotate__SWIG_1(s); - if (ok) { - return true; - } - } - SE_REPORT_ERROR("wrong number of arguments: %d", (int)argc); - return false; -} -SE_BIND_FUNC(js_cc_Vec2_rotate) -static bool js_cc_Vec2_unrotate(se::State& s) +se::Class* __jsb_cc_ISystemWindowManager_class = nullptr; +se::Object* __jsb_cc_ISystemWindowManager_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_ISystemWindowManager) + +static bool js_cc_ISystemWindowManager_init(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::Vec2 *arg1 = (cc::Vec2 *) NULL ; - cc::Vec2 *arg2 = 0 ; - cc::Vec2 temp2 ; - cc::Vec2 result; + cc::ISystemWindowManager *arg1 = (cc::ISystemWindowManager *) NULL ; + int result; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_unrotate,2,SWIGTYPE_p_cc__Vec2"); - arg2 = &temp2; - - result = ((cc::Vec2 const *)arg1)->unrotate((cc::Vec2 const &)*arg2); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Vec2_unrotate, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + result = (int)(arg1)->init(); + // out 1 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); return true; } -SE_BIND_FUNC(js_cc_Vec2_unrotate) +SE_BIND_FUNC(js_cc_ISystemWindowManager_init) -static bool js_cc_Vec2_lerp(se::State& s) +static bool js_cc_ISystemWindowManager_processEvent(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::Vec2 *arg1 = (cc::Vec2 *) NULL ; - cc::Vec2 *arg2 = 0 ; - float arg3 ; - cc::Vec2 temp2 ; - cc::Vec2 result; + cc::ISystemWindowManager *arg1 = (cc::ISystemWindowManager *) NULL ; + bool *arg2 = (bool *) NULL ; - if(argc != 2) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_lerp,2,SWIGTYPE_p_cc__Vec2"); - arg2 = &temp2; - - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[1], &arg3, nullptr); - SE_PRECONDITION2(ok, false, "Vec2_lerp,3,SWIGTYPE_float"); - result = ((cc::Vec2 const *)arg1)->lerp((cc::Vec2 const &)*arg2,arg3); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Vec2_lerp, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "ISystemWindowManager_processEvent,2,SWIGTYPE_p_bool"); + (arg1)->processEvent(arg2); return true; } -SE_BIND_FUNC(js_cc_Vec2_lerp) +SE_BIND_FUNC(js_cc_ISystemWindowManager_processEvent) -static bool js_cc_Vec2_rotateByAngle(se::State& s) +static bool js_cc_ISystemWindowManager_swapWindows(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::Vec2 *arg1 = (cc::Vec2 *) NULL ; - cc::Vec2 *arg2 = 0 ; - float arg3 ; - cc::Vec2 temp2 ; - cc::Vec2 result; + cc::ISystemWindowManager *arg1 = (cc::ISystemWindowManager *) NULL ; - if(argc != 2) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_rotateByAngle,2,SWIGTYPE_p_cc__Vec2"); - arg2 = &temp2; - - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[1], &arg3, nullptr); - SE_PRECONDITION2(ok, false, "Vec2_rotateByAngle,3,SWIGTYPE_float"); - result = ((cc::Vec2 const *)arg1)->rotateByAngle((cc::Vec2 const &)*arg2,arg3); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Vec2_rotateByAngle, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - + (arg1)->swapWindows(); return true; } -SE_BIND_FUNC(js_cc_Vec2_rotateByAngle) +SE_BIND_FUNC(js_cc_ISystemWindowManager_swapWindows) -static bool js_cc_Vec2_forAngle_static(se::State& s) +static bool js_cc_ISystemWindowManager_createWindow(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - float arg1 ; - cc::Vec2 result; + cc::ISystemWindowManager *arg1 = (cc::ISystemWindowManager *) NULL ; + cc::ISystemWindowInfo *arg2 = 0 ; + cc::ISystemWindowInfo temp2 ; + cc::ISystemWindow *result = 0 ; if(argc != 1) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg1, nullptr); - SE_PRECONDITION2(ok, false, "Vec2_forAngle,1,SWIGTYPE_float"); - result = cc::Vec2::forAngle(arg1); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Vec2_forAngle, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - - - - return true; -} -SE_BIND_FUNC(js_cc_Vec2_forAngle_static) - -static bool js_cc_Vec2_isLineIntersect_static__SWIG_0(se::State& s) -{ - // js_overloaded_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - cc::Vec2 *arg1 = 0 ; - cc::Vec2 *arg2 = 0 ; - cc::Vec2 *arg3 = 0 ; - cc::Vec2 *arg4 = 0 ; - float *arg5 = (float *) NULL ; - float *arg6 = (float *) NULL ; - cc::Vec2 temp1 ; - cc::Vec2 temp2 ; - cc::Vec2 temp3 ; - cc::Vec2 temp4 ; - bool result; - - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp1, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_isLineIntersect,1,SWIGTYPE_p_cc__Vec2"); - arg1 = &temp1; - + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[1], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_isLineIntersect,2,SWIGTYPE_p_cc__Vec2"); + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "ISystemWindowManager_createWindow,2,SWIGTYPE_p_cc__ISystemWindowInfo"); arg2 = &temp2; - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[2], &temp3, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_isLineIntersect,3,SWIGTYPE_p_cc__Vec2"); - arg3 = &temp3; - - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[3], &temp4, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_isLineIntersect,4,SWIGTYPE_p_cc__Vec2"); - arg4 = &temp4; - - // %typemap(in) SWIGTYPE* - ok &= sevalue_to_native(args[4], &arg5, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_isLineIntersect,5,SWIGTYPE_p_float"); - // %typemap(in) SWIGTYPE* - ok &= sevalue_to_native(args[5], &arg6, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_isLineIntersect,6,SWIGTYPE_p_float"); - result = (bool)cc::Vec2::isLineIntersect((cc::Vec2 const &)*arg1,(cc::Vec2 const &)*arg2,(cc::Vec2 const &)*arg3,(cc::Vec2 const &)*arg4,arg5,arg6); - // out 5 + result = (cc::ISystemWindow *)(arg1)->createWindow((cc::ISystemWindowInfo const &)*arg2); + // %typemap(out) SWIGTYPE* ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "ISystemWindowManager_createWindow, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); return true; } +SE_BIND_FUNC(js_cc_ISystemWindowManager_createWindow) -static bool js_cc_Vec2_isLineIntersect_static__SWIG_1(se::State& s) +static bool js_cc_ISystemWindowManager_getWindow(se::State& s) { - // js_overloaded_function + // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); - cc::Vec2 *arg1 = 0 ; - cc::Vec2 *arg2 = 0 ; - cc::Vec2 *arg3 = 0 ; - cc::Vec2 *arg4 = 0 ; - float *arg5 = (float *) NULL ; - cc::Vec2 temp1 ; - cc::Vec2 temp2 ; - cc::Vec2 temp3 ; - cc::Vec2 temp4 ; - bool result; - - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp1, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_isLineIntersect,1,SWIGTYPE_p_cc__Vec2"); - arg1 = &temp1; - - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[1], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_isLineIntersect,2,SWIGTYPE_p_cc__Vec2"); - arg2 = &temp2; + size_t argc = args.size(); + cc::ISystemWindowManager *arg1 = (cc::ISystemWindowManager *) NULL ; + uint32_t arg2 ; + cc::ISystemWindow *result = 0 ; - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[2], &temp3, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_isLineIntersect,3,SWIGTYPE_p_cc__Vec2"); - arg3 = &temp3; + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[3], &temp4, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_isLineIntersect,4,SWIGTYPE_p_cc__Vec2"); - arg4 = &temp4; + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "ISystemWindowManager_getWindow,2,SWIGTYPE_uint32_t"); - // %typemap(in) SWIGTYPE* - ok &= sevalue_to_native(args[4], &arg5, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_isLineIntersect,5,SWIGTYPE_p_float"); - result = (bool)cc::Vec2::isLineIntersect((cc::Vec2 const &)*arg1,(cc::Vec2 const &)*arg2,(cc::Vec2 const &)*arg3,(cc::Vec2 const &)*arg4,arg5); - // out 5 + result = (cc::ISystemWindow *)((cc::ISystemWindowManager const *)arg1)->getWindow(arg2); + // %typemap(out) SWIGTYPE* ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "ISystemWindowManager_getWindow, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); return true; } +SE_BIND_FUNC(js_cc_ISystemWindowManager_getWindow) -static bool js_cc_Vec2_isLineIntersect_static__SWIG_2(se::State& s) +static bool js_cc_ISystemWindowManager_getWindows(se::State& s) { - // js_overloaded_function + // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); - cc::Vec2 *arg1 = 0 ; - cc::Vec2 *arg2 = 0 ; - cc::Vec2 *arg3 = 0 ; - cc::Vec2 *arg4 = 0 ; - cc::Vec2 temp1 ; - cc::Vec2 temp2 ; - cc::Vec2 temp3 ; - cc::Vec2 temp4 ; - bool result; + size_t argc = args.size(); + cc::ISystemWindowManager *arg1 = (cc::ISystemWindowManager *) NULL ; + cc::SystemWindowMap *result = 0 ; - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp1, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_isLineIntersect,1,SWIGTYPE_p_cc__Vec2"); - arg1 = &temp1; + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (cc::SystemWindowMap *) &((cc::ISystemWindowManager const *)arg1)->getWindows(); + // %typemap(out) SWIGTYPE& + ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "ISystemWindowManager_getWindows, Error processing arguments"); + SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[1], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_isLineIntersect,2,SWIGTYPE_p_cc__Vec2"); - arg2 = &temp2; - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[2], &temp3, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_isLineIntersect,3,SWIGTYPE_p_cc__Vec2"); - arg3 = &temp3; + return true; +} +SE_BIND_FUNC(js_cc_ISystemWindowManager_getWindows) + +static bool js_delete_cc_ISystemWindowManager(se::State& s) +{ + // js_dtoroverride + return true; +} +SE_BIND_FINALIZE_FUNC(js_delete_cc_ISystemWindowManager) + +bool js_register_cc_ISystemWindowManager(se::Object* obj) { + auto* cls = se::Class::create("ISystemWindowManager", obj, nullptr, nullptr); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[3], &temp4, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_isLineIntersect,4,SWIGTYPE_p_cc__Vec2"); - arg4 = &temp4; - result = (bool)cc::Vec2::isLineIntersect((cc::Vec2 const &)*arg1,(cc::Vec2 const &)*arg2,(cc::Vec2 const &)*arg3,(cc::Vec2 const &)*arg4); - // out 5 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + cls->defineFunction("init", _SE(js_cc_ISystemWindowManager_init)); + cls->defineFunction("processEvent", _SE(js_cc_ISystemWindowManager_processEvent)); + cls->defineFunction("swapWindows", _SE(js_cc_ISystemWindowManager_swapWindows)); + cls->defineFunction("createWindow", _SE(js_cc_ISystemWindowManager_createWindow)); + cls->defineFunction("getWindow", _SE(js_cc_ISystemWindowManager_getWindow)); + cls->defineFunction("getWindows", _SE(js_cc_ISystemWindowManager_getWindows)); + + + + + cls->defineFinalizeFunction(_SE(js_delete_cc_ISystemWindowManager)); + + cls->install(); + JSBClassType::registerClass(cls); + __jsb_cc_ISystemWindowManager_proto = cls->getProto(); + __jsb_cc_ISystemWindowManager_class = cls; + se::ScriptEngine::getInstance()->clearException(); return true; } -static bool js_cc_Vec2_isLineIntersect_static(se::State& s) -{ - // js_function_dispatcher - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - - // js_function_dispatch_case - if (argc == 6) { - ok = js_cc_Vec2_isLineIntersect_static__SWIG_0(s); - if (ok) { - return true; - } - } // js_function_dispatch_case - if (argc == 5) { - ok = js_cc_Vec2_isLineIntersect_static__SWIG_1(s); - if (ok) { - return true; - } - } // js_function_dispatch_case - if (argc == 4) { - ok = js_cc_Vec2_isLineIntersect_static__SWIG_2(s); - if (ok) { - return true; - } - } - SE_REPORT_ERROR("wrong number of arguments: %d", (int)argc); - return false; -} -SE_BIND_FUNC(js_cc_Vec2_isLineIntersect_static) -static bool js_cc_Vec2_isLineOverlap_static(se::State& s) +se::Class* __jsb_cc_FileUtils_class = nullptr; +se::Object* __jsb_cc_FileUtils_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_FileUtils) + +static bool js_cc_FileUtils_getInstance_static(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::Vec2 *arg1 = 0 ; - cc::Vec2 *arg2 = 0 ; - cc::Vec2 *arg3 = 0 ; - cc::Vec2 *arg4 = 0 ; - cc::Vec2 temp1 ; - cc::Vec2 temp2 ; - cc::Vec2 temp3 ; - cc::Vec2 temp4 ; - bool result; + cc::FileUtils *result = 0 ; - if(argc != 4) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 4); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp1, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_isLineOverlap,1,SWIGTYPE_p_cc__Vec2"); - arg1 = &temp1; - - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[1], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_isLineOverlap,2,SWIGTYPE_p_cc__Vec2"); - arg2 = &temp2; - - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[2], &temp3, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_isLineOverlap,3,SWIGTYPE_p_cc__Vec2"); - arg3 = &temp3; - - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[3], &temp4, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_isLineOverlap,4,SWIGTYPE_p_cc__Vec2"); - arg4 = &temp4; - - result = (bool)cc::Vec2::isLineOverlap((cc::Vec2 const &)*arg1,(cc::Vec2 const &)*arg2,(cc::Vec2 const &)*arg3,(cc::Vec2 const &)*arg4); - // out 5 + result = (cc::FileUtils *)cc::FileUtils::getInstance(); + // %typemap(out) SWIGTYPE* ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "FileUtils_getInstance, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); return true; } -SE_BIND_FUNC(js_cc_Vec2_isLineOverlap_static) +SE_BIND_FUNC(js_cc_FileUtils_getInstance_static) + +static bool js_delete_cc_FileUtils(se::State& s) +{ + // js_dtoroverride + return true; +} +SE_BIND_FINALIZE_FUNC(js_delete_cc_FileUtils) -static bool js_cc_Vec2_isLineParallel_static(se::State& s) +static bool js_cc_FileUtils_purgeCachedEntries(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::Vec2 *arg1 = 0 ; - cc::Vec2 *arg2 = 0 ; - cc::Vec2 *arg3 = 0 ; - cc::Vec2 *arg4 = 0 ; - cc::Vec2 temp1 ; - cc::Vec2 temp2 ; - cc::Vec2 temp3 ; - cc::Vec2 temp4 ; - bool result; + cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; - if(argc != 4) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 4); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp1, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_isLineParallel,1,SWIGTYPE_p_cc__Vec2"); - arg1 = &temp1; - - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[1], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_isLineParallel,2,SWIGTYPE_p_cc__Vec2"); - arg2 = &temp2; - - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[2], &temp3, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_isLineParallel,3,SWIGTYPE_p_cc__Vec2"); - arg3 = &temp3; - - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[3], &temp4, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_isLineParallel,4,SWIGTYPE_p_cc__Vec2"); - arg4 = &temp4; - - result = (bool)cc::Vec2::isLineParallel((cc::Vec2 const &)*arg1,(cc::Vec2 const &)*arg2,(cc::Vec2 const &)*arg3,(cc::Vec2 const &)*arg4); - // out 5 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + (arg1)->purgeCachedEntries(); return true; } -SE_BIND_FUNC(js_cc_Vec2_isLineParallel_static) +SE_BIND_FUNC(js_cc_FileUtils_purgeCachedEntries) -static bool js_cc_Vec2_isSegmentOverlap_static__SWIG_0(se::State& s) +static bool js_cc_FileUtils_getStringFromFile(se::State& s) { - // js_overloaded_function + // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); - cc::Vec2 *arg1 = 0 ; - cc::Vec2 *arg2 = 0 ; - cc::Vec2 *arg3 = 0 ; - cc::Vec2 *arg4 = 0 ; - cc::Vec2 *arg5 = (cc::Vec2 *) NULL ; - cc::Vec2 *arg6 = (cc::Vec2 *) NULL ; - cc::Vec2 temp1 ; - cc::Vec2 temp2 ; - cc::Vec2 temp3 ; - cc::Vec2 temp4 ; - bool result; - - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp1, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_isSegmentOverlap,1,SWIGTYPE_p_cc__Vec2"); - arg1 = &temp1; + size_t argc = args.size(); + cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; + ccstd::string *arg2 = 0 ; + ccstd::string temp2 ; + ccstd::string result; + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[1], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_isSegmentOverlap,2,SWIGTYPE_p_cc__Vec2"); + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "FileUtils_getStringFromFile,2,SWIGTYPE_p_ccstd__string"); arg2 = &temp2; - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[2], &temp3, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_isSegmentOverlap,3,SWIGTYPE_p_cc__Vec2"); - arg3 = &temp3; - - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[3], &temp4, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_isSegmentOverlap,4,SWIGTYPE_p_cc__Vec2"); - arg4 = &temp4; - - // %typemap(in) SWIGTYPE* - ok &= sevalue_to_native(args[4], &arg5, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_isSegmentOverlap,5,SWIGTYPE_p_cc__Vec2"); - // %typemap(in) SWIGTYPE* - ok &= sevalue_to_native(args[5], &arg6, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_isSegmentOverlap,6,SWIGTYPE_p_cc__Vec2"); - result = (bool)cc::Vec2::isSegmentOverlap((cc::Vec2 const &)*arg1,(cc::Vec2 const &)*arg2,(cc::Vec2 const &)*arg3,(cc::Vec2 const &)*arg4,arg5,arg6); - // out 5 + result = (arg1)->getStringFromFile((ccstd::string const &)*arg2); + // %typemap(out) SWIGTYPE ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "FileUtils_getStringFromFile, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + return true; } +SE_BIND_FUNC(js_cc_FileUtils_getStringFromFile) -static bool js_cc_Vec2_isSegmentOverlap_static__SWIG_1(se::State& s) +static bool js_cc_FileUtils_getDataFromFile(se::State& s) { - // js_overloaded_function + // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); - cc::Vec2 *arg1 = 0 ; - cc::Vec2 *arg2 = 0 ; - cc::Vec2 *arg3 = 0 ; - cc::Vec2 *arg4 = 0 ; - cc::Vec2 *arg5 = (cc::Vec2 *) NULL ; - cc::Vec2 temp1 ; - cc::Vec2 temp2 ; - cc::Vec2 temp3 ; - cc::Vec2 temp4 ; - bool result; - - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp1, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_isSegmentOverlap,1,SWIGTYPE_p_cc__Vec2"); - arg1 = &temp1; - - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[1], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_isSegmentOverlap,2,SWIGTYPE_p_cc__Vec2"); - arg2 = &temp2; - - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[2], &temp3, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_isSegmentOverlap,3,SWIGTYPE_p_cc__Vec2"); - arg3 = &temp3; + size_t argc = args.size(); + cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; + ccstd::string *arg2 = 0 ; + ccstd::string temp2 ; + cc::Data result; + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[3], &temp4, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_isSegmentOverlap,4,SWIGTYPE_p_cc__Vec2"); - arg4 = &temp4; + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "FileUtils_getDataFromFile,2,SWIGTYPE_p_ccstd__string"); + arg2 = &temp2; - // %typemap(in) SWIGTYPE* - ok &= sevalue_to_native(args[4], &arg5, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_isSegmentOverlap,5,SWIGTYPE_p_cc__Vec2"); - result = (bool)cc::Vec2::isSegmentOverlap((cc::Vec2 const &)*arg1,(cc::Vec2 const &)*arg2,(cc::Vec2 const &)*arg3,(cc::Vec2 const &)*arg4,arg5); - // out 5 + result = (arg1)->getDataFromFile((ccstd::string const &)*arg2); + // %typemap(out) SWIGTYPE ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "FileUtils_getDataFromFile, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + return true; } +SE_BIND_FUNC(js_cc_FileUtils_getDataFromFile) -static bool js_cc_Vec2_isSegmentOverlap_static__SWIG_2(se::State& s) +static bool js_cc_FileUtils_getFileDataFromZip(se::State& s) { - // js_overloaded_function + // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); - cc::Vec2 *arg1 = 0 ; - cc::Vec2 *arg2 = 0 ; - cc::Vec2 *arg3 = 0 ; - cc::Vec2 *arg4 = 0 ; - cc::Vec2 temp1 ; - cc::Vec2 temp2 ; - cc::Vec2 temp3 ; - cc::Vec2 temp4 ; - bool result; - - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp1, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_isSegmentOverlap,1,SWIGTYPE_p_cc__Vec2"); - arg1 = &temp1; + size_t argc = args.size(); + cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; + ccstd::string *arg2 = 0 ; + ccstd::string *arg3 = 0 ; + uint32_t *arg4 = (uint32_t *) NULL ; + ccstd::string temp2 ; + ccstd::string temp3 ; + unsigned char *result = 0 ; + if(argc != 3) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[1], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_isSegmentOverlap,2,SWIGTYPE_p_cc__Vec2"); + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "FileUtils_getFileDataFromZip,2,SWIGTYPE_p_ccstd__string"); arg2 = &temp2; // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[2], &temp3, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_isSegmentOverlap,3,SWIGTYPE_p_cc__Vec2"); + ok &= sevalue_to_native(args[1], &temp3, s.thisObject()); + SE_PRECONDITION2(ok, false, "FileUtils_getFileDataFromZip,3,SWIGTYPE_p_ccstd__string"); arg3 = &temp3; - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[3], &temp4, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_isSegmentOverlap,4,SWIGTYPE_p_cc__Vec2"); - arg4 = &temp4; - - result = (bool)cc::Vec2::isSegmentOverlap((cc::Vec2 const &)*arg1,(cc::Vec2 const &)*arg2,(cc::Vec2 const &)*arg3,(cc::Vec2 const &)*arg4); - // out 5 + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[2], &arg4, s.thisObject()); + SE_PRECONDITION2(ok, false, "FileUtils_getFileDataFromZip,4,SWIGTYPE_p_uint32_t"); + result = (unsigned char *)(arg1)->getFileDataFromZip((ccstd::string const &)*arg2,(ccstd::string const &)*arg3,arg4); + // %typemap(out) SWIGTYPE* ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "FileUtils_getFileDataFromZip, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); return true; } +SE_BIND_FUNC(js_cc_FileUtils_getFileDataFromZip) -static bool js_cc_Vec2_isSegmentOverlap_static(se::State& s) +static bool js_cc_FileUtils_fullPathForFilename(se::State& s) { - // js_function_dispatcher + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); + cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; + ccstd::string *arg2 = 0 ; + ccstd::string temp2 ; + ccstd::string result; - // js_function_dispatch_case - if (argc == 6) { - ok = js_cc_Vec2_isSegmentOverlap_static__SWIG_0(s); - if (ok) { - return true; - } - } // js_function_dispatch_case - if (argc == 5) { - ok = js_cc_Vec2_isSegmentOverlap_static__SWIG_1(s); - if (ok) { - return true; - } - } // js_function_dispatch_case - if (argc == 4) { - ok = js_cc_Vec2_isSegmentOverlap_static__SWIG_2(s); - if (ok) { - return true; - } - } - SE_REPORT_ERROR("wrong number of arguments: %d", (int)argc); - return false; + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "FileUtils_fullPathForFilename,2,SWIGTYPE_p_ccstd__string"); + arg2 = &temp2; + + result = ((cc::FileUtils const *)arg1)->fullPathForFilename((ccstd::string const &)*arg2); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "FileUtils_fullPathForFilename, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + + return true; } -SE_BIND_FUNC(js_cc_Vec2_isSegmentOverlap_static) +SE_BIND_FUNC(js_cc_FileUtils_fullPathForFilename) -static bool js_cc_Vec2_isSegmentIntersect_static(se::State& s) +static bool js_cc_FileUtils_fullPathFromRelativeFile(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::Vec2 *arg1 = 0 ; - cc::Vec2 *arg2 = 0 ; - cc::Vec2 *arg3 = 0 ; - cc::Vec2 *arg4 = 0 ; - cc::Vec2 temp1 ; - cc::Vec2 temp2 ; - cc::Vec2 temp3 ; - cc::Vec2 temp4 ; - bool result; + cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; + ccstd::string *arg2 = 0 ; + ccstd::string *arg3 = 0 ; + ccstd::string temp2 ; + ccstd::string temp3 ; + ccstd::string result; - if(argc != 4) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 4); + if(argc != 2) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); return false; } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp1, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_isSegmentIntersect,1,SWIGTYPE_p_cc__Vec2"); - arg1 = &temp1; - - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[1], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_isSegmentIntersect,2,SWIGTYPE_p_cc__Vec2"); + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "FileUtils_fullPathFromRelativeFile,2,SWIGTYPE_p_ccstd__string"); arg2 = &temp2; // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[2], &temp3, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_isSegmentIntersect,3,SWIGTYPE_p_cc__Vec2"); + ok &= sevalue_to_native(args[1], &temp3, s.thisObject()); + SE_PRECONDITION2(ok, false, "FileUtils_fullPathFromRelativeFile,3,SWIGTYPE_p_ccstd__string"); arg3 = &temp3; - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[3], &temp4, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_isSegmentIntersect,4,SWIGTYPE_p_cc__Vec2"); - arg4 = &temp4; - - result = (bool)cc::Vec2::isSegmentIntersect((cc::Vec2 const &)*arg1,(cc::Vec2 const &)*arg2,(cc::Vec2 const &)*arg3,(cc::Vec2 const &)*arg4); - // out 5 + result = (arg1)->fullPathFromRelativeFile((ccstd::string const &)*arg2,(ccstd::string const &)*arg3); + // %typemap(out) SWIGTYPE ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "FileUtils_fullPathFromRelativeFile, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + return true; } -SE_BIND_FUNC(js_cc_Vec2_isSegmentIntersect_static) +SE_BIND_FUNC(js_cc_FileUtils_fullPathFromRelativeFile) -static bool js_cc_Vec2_getIntersectPoint_static(se::State& s) +static bool js_cc_FileUtils_setSearchPaths(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::Vec2 *arg1 = 0 ; - cc::Vec2 *arg2 = 0 ; - cc::Vec2 *arg3 = 0 ; - cc::Vec2 *arg4 = 0 ; - cc::Vec2 temp1 ; - cc::Vec2 temp2 ; - cc::Vec2 temp3 ; - cc::Vec2 temp4 ; - cc::Vec2 result; + cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; + ccstd::vector< ccstd::string > *arg2 = 0 ; + ccstd::vector< ccstd::string > temp2 ; - if(argc != 4) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 4); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp1, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_getIntersectPoint,1,SWIGTYPE_p_cc__Vec2"); - arg1 = &temp1; - - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[1], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_getIntersectPoint,2,SWIGTYPE_p_cc__Vec2"); + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "FileUtils_setSearchPaths,2,SWIGTYPE_p_ccstd__vectorT_ccstd__string_t"); arg2 = &temp2; - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[2], &temp3, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_getIntersectPoint,3,SWIGTYPE_p_cc__Vec2"); - arg3 = &temp3; - - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[3], &temp4, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vec2_getIntersectPoint,4,SWIGTYPE_p_cc__Vec2"); - arg4 = &temp4; - - result = cc::Vec2::getIntersectPoint((cc::Vec2 const &)*arg1,(cc::Vec2 const &)*arg2,(cc::Vec2 const &)*arg3,(cc::Vec2 const &)*arg4); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Vec2_getIntersectPoint, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - + (arg1)->setSearchPaths((ccstd::vector< ccstd::string > const &)*arg2); return true; } -SE_BIND_FUNC(js_cc_Vec2_getIntersectPoint_static) +SE_BIND_FUNC(js_cc_FileUtils_setSearchPaths) -static bool js_cc_Vec2_ZERO_get(se::State& s) +static bool js_cc_FileUtils_getDefaultResourceRootPath(se::State& s) { - CC_UNUSED bool ok = true; - cc::Vec2 result; + // js_function - result = cc::Vec2::ZERO; - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Vec2_ZERO_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; + ccstd::string *result = 0 ; + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (ccstd::string *) &((cc::FileUtils const *)arg1)->getDefaultResourceRootPath(); + // %typemap(out) SWIGTYPE& + ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "FileUtils_getDefaultResourceRootPath, Error processing arguments"); + SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); return true; } -SE_BIND_PROP_GET(js_cc_Vec2_ZERO_get) +SE_BIND_FUNC(js_cc_FileUtils_getDefaultResourceRootPath) -static bool js_cc_Vec2_ONE_get(se::State& s) +static bool js_cc_FileUtils_setDefaultResourceRootPath(se::State& s) { + // js_function + CC_UNUSED bool ok = true; - cc::Vec2 result; + const auto& args = s.args(); + size_t argc = args.size(); + cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; + ccstd::string *arg2 = 0 ; + ccstd::string temp2 ; - result = cc::Vec2::ONE; - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Vec2_ONE_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "FileUtils_setDefaultResourceRootPath,2,SWIGTYPE_p_ccstd__string"); + arg2 = &temp2; + (arg1)->setDefaultResourceRootPath((ccstd::string const &)*arg2); return true; } -SE_BIND_PROP_GET(js_cc_Vec2_ONE_get) +SE_BIND_FUNC(js_cc_FileUtils_setDefaultResourceRootPath) -static bool js_cc_Vec2_UNIT_X_get(se::State& s) +static bool js_cc_FileUtils_addSearchPath__SWIG_0(se::State& s) { + // js_overloaded_function + CC_UNUSED bool ok = true; - cc::Vec2 result; + const auto& args = s.args(); + cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; + ccstd::string *arg2 = 0 ; + bool arg3 ; + ccstd::string temp2 ; - result = cc::Vec2::UNIT_X; - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Vec2_UNIT_X_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "FileUtils_addSearchPath,2,SWIGTYPE_p_ccstd__string"); + arg2 = &temp2; + // %typemap(in) bool + ok &= sevalue_to_native(args[1], &arg3); + SE_PRECONDITION2(ok, false, "FileUtils_addSearchPath,3,SWIGTYPE_bool"); + (arg1)->addSearchPath((ccstd::string const &)*arg2,arg3); return true; } -SE_BIND_PROP_GET(js_cc_Vec2_UNIT_X_get) -static bool js_cc_Vec2_UNIT_Y_get(se::State& s) +static bool js_cc_FileUtils_addSearchPath__SWIG_1(se::State& s) { + // js_overloaded_function + CC_UNUSED bool ok = true; - cc::Vec2 result; + const auto& args = s.args(); + cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; + ccstd::string *arg2 = 0 ; + ccstd::string temp2 ; - result = cc::Vec2::UNIT_Y; - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Vec2_UNIT_Y_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "FileUtils_addSearchPath,2,SWIGTYPE_p_ccstd__string"); + arg2 = &temp2; + (arg1)->addSearchPath((ccstd::string const &)*arg2); return true; } -SE_BIND_PROP_GET(js_cc_Vec2_UNIT_Y_get) -static bool js_cc_Vec2_ANCHOR_MIDDLE_get(se::State& s) +static bool js_cc_FileUtils_addSearchPath(se::State& s) { + // js_function_dispatcher CC_UNUSED bool ok = true; - cc::Vec2 result; - - result = cc::Vec2::ANCHOR_MIDDLE; - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Vec2_ANCHOR_MIDDLE_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - - + const auto& args = s.args(); + size_t argc = args.size(); - return true; + // js_function_dispatch_case + if (argc == 2) { + ok = js_cc_FileUtils_addSearchPath__SWIG_0(s); + if (ok) { + return true; + } + } // js_function_dispatch_case + if (argc == 1) { + ok = js_cc_FileUtils_addSearchPath__SWIG_1(s); + if (ok) { + return true; + } + } + SE_REPORT_ERROR("wrong number of arguments: %d", (int)argc); + return false; } -SE_BIND_PROP_GET(js_cc_Vec2_ANCHOR_MIDDLE_get) +SE_BIND_FUNC(js_cc_FileUtils_addSearchPath) -static bool js_cc_Vec2_ANCHOR_BOTTOM_LEFT_get(se::State& s) +static bool js_cc_FileUtils_getSearchPaths(se::State& s) { - CC_UNUSED bool ok = true; - cc::Vec2 result; + // js_function - result = cc::Vec2::ANCHOR_BOTTOM_LEFT; - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Vec2_ANCHOR_BOTTOM_LEFT_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; + ccstd::vector< ccstd::string > *result = 0 ; + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (ccstd::vector< ccstd::string > *) &((cc::FileUtils const *)arg1)->getSearchPaths(); + // %typemap(out) SWIGTYPE& + ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "FileUtils_getSearchPaths, Error processing arguments"); + SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); return true; } -SE_BIND_PROP_GET(js_cc_Vec2_ANCHOR_BOTTOM_LEFT_get) +SE_BIND_FUNC(js_cc_FileUtils_getSearchPaths) -static bool js_cc_Vec2_ANCHOR_TOP_LEFT_get(se::State& s) +static bool js_cc_FileUtils_getOriginalSearchPaths(se::State& s) { - CC_UNUSED bool ok = true; - cc::Vec2 result; + // js_function - result = cc::Vec2::ANCHOR_TOP_LEFT; - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Vec2_ANCHOR_TOP_LEFT_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; + ccstd::vector< ccstd::string > *result = 0 ; + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (ccstd::vector< ccstd::string > *) &((cc::FileUtils const *)arg1)->getOriginalSearchPaths(); + // %typemap(out) SWIGTYPE& + ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "FileUtils_getOriginalSearchPaths, Error processing arguments"); + SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); return true; } -SE_BIND_PROP_GET(js_cc_Vec2_ANCHOR_TOP_LEFT_get) +SE_BIND_FUNC(js_cc_FileUtils_getOriginalSearchPaths) -static bool js_cc_Vec2_ANCHOR_BOTTOM_RIGHT_get(se::State& s) +static bool js_cc_FileUtils_getWritablePath(se::State& s) { + // js_function + CC_UNUSED bool ok = true; - cc::Vec2 result; + const auto& args = s.args(); + size_t argc = args.size(); + cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; + ccstd::string result; - result = cc::Vec2::ANCHOR_BOTTOM_RIGHT; + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = ((cc::FileUtils const *)arg1)->getWritablePath(); // %typemap(out) SWIGTYPE ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Vec2_ANCHOR_BOTTOM_RIGHT_get, Error processing arguments"); + SE_PRECONDITION2(ok, false, "FileUtils_getWritablePath, Error processing arguments"); SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); return true; } -SE_BIND_PROP_GET(js_cc_Vec2_ANCHOR_BOTTOM_RIGHT_get) +SE_BIND_FUNC(js_cc_FileUtils_getWritablePath) -static bool js_cc_Vec2_ANCHOR_TOP_RIGHT_get(se::State& s) +static bool js_cc_FileUtils_setWritablePath(se::State& s) { + // js_function + CC_UNUSED bool ok = true; - cc::Vec2 result; + const auto& args = s.args(); + size_t argc = args.size(); + cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; + ccstd::string *arg2 = 0 ; + ccstd::string temp2 ; - result = cc::Vec2::ANCHOR_TOP_RIGHT; - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Vec2_ANCHOR_TOP_RIGHT_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "FileUtils_setWritablePath,2,SWIGTYPE_p_ccstd__string"); + arg2 = &temp2; + (arg1)->setWritablePath((ccstd::string const &)*arg2); return true; } -SE_BIND_PROP_GET(js_cc_Vec2_ANCHOR_TOP_RIGHT_get) +SE_BIND_FUNC(js_cc_FileUtils_setWritablePath) -static bool js_cc_Vec2_ANCHOR_MIDDLE_RIGHT_get(se::State& s) +static bool js_cc_FileUtils_getValueMapFromFile(se::State& s) { + // js_function + CC_UNUSED bool ok = true; - cc::Vec2 result; + const auto& args = s.args(); + size_t argc = args.size(); + cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; + ccstd::string *arg2 = 0 ; + ccstd::string temp2 ; + cc::ValueMap result; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "FileUtils_getValueMapFromFile,2,SWIGTYPE_p_ccstd__string"); + arg2 = &temp2; - result = cc::Vec2::ANCHOR_MIDDLE_RIGHT; + result = (arg1)->getValueMapFromFile((ccstd::string const &)*arg2); // %typemap(out) SWIGTYPE ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Vec2_ANCHOR_MIDDLE_RIGHT_get, Error processing arguments"); + SE_PRECONDITION2(ok, false, "FileUtils_getValueMapFromFile, Error processing arguments"); SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); return true; } -SE_BIND_PROP_GET(js_cc_Vec2_ANCHOR_MIDDLE_RIGHT_get) +SE_BIND_FUNC(js_cc_FileUtils_getValueMapFromFile) -static bool js_cc_Vec2_ANCHOR_MIDDLE_LEFT_get(se::State& s) +static bool js_cc_FileUtils_getValueMapFromData(se::State& s) { + // js_function + CC_UNUSED bool ok = true; - cc::Vec2 result; + const auto& args = s.args(); + size_t argc = args.size(); + cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; + char *arg2 = (char *) NULL ; + int arg3 ; + ccstd::string temp2 ; + cc::ValueMap result; + + if(argc != 2) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = cc::Vec2::ANCHOR_MIDDLE_LEFT; + ok &= sevalue_to_native(args[0], &temp2); + SE_PRECONDITION2(ok, false, "FileUtils_getValueMapFromData,2,SWIGTYPE_p_char"); + arg2 = (char *) temp2.c_str(); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "FileUtils_getValueMapFromData,3,SWIGTYPE_int"); + result = (arg1)->getValueMapFromData((char const *)arg2,arg3); // %typemap(out) SWIGTYPE ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Vec2_ANCHOR_MIDDLE_LEFT_get, Error processing arguments"); + SE_PRECONDITION2(ok, false, "FileUtils_getValueMapFromData, Error processing arguments"); SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); return true; } -SE_BIND_PROP_GET(js_cc_Vec2_ANCHOR_MIDDLE_LEFT_get) +SE_BIND_FUNC(js_cc_FileUtils_getValueMapFromData) -static bool js_cc_Vec2_ANCHOR_MIDDLE_TOP_get(se::State& s) +static bool js_cc_FileUtils_writeToFile(se::State& s) { + // js_function + CC_UNUSED bool ok = true; - cc::Vec2 result; + const auto& args = s.args(); + size_t argc = args.size(); + cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; + cc::ValueMap *arg2 = 0 ; + ccstd::string *arg3 = 0 ; + cc::ValueMap temp2 ; + ccstd::string temp3 ; + bool result; - result = cc::Vec2::ANCHOR_MIDDLE_TOP; - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Vec2_ANCHOR_MIDDLE_TOP_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + if(argc != 2) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "FileUtils_writeToFile,2,SWIGTYPE_p_ccstd__unordered_mapT_ccstd__string_cc__Value_t"); + arg2 = &temp2; + + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[1], &temp3, s.thisObject()); + SE_PRECONDITION2(ok, false, "FileUtils_writeToFile,3,SWIGTYPE_p_ccstd__string"); + arg3 = &temp3; + result = (bool)(arg1)->writeToFile((cc::ValueMap const &)*arg2,(ccstd::string const &)*arg3); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); return true; } -SE_BIND_PROP_GET(js_cc_Vec2_ANCHOR_MIDDLE_TOP_get) +SE_BIND_FUNC(js_cc_FileUtils_writeToFile) -static bool js_cc_Vec2_ANCHOR_MIDDLE_BOTTOM_get(se::State& s) +static bool js_cc_FileUtils_writeStringToFile(se::State& s) { + // js_function + CC_UNUSED bool ok = true; - cc::Vec2 result; + const auto& args = s.args(); + size_t argc = args.size(); + cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; + ccstd::string *arg2 = 0 ; + ccstd::string *arg3 = 0 ; + ccstd::string temp2 ; + ccstd::string temp3 ; + bool result; - result = cc::Vec2::ANCHOR_MIDDLE_BOTTOM; - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Vec2_ANCHOR_MIDDLE_BOTTOM_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + if(argc != 2) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "FileUtils_writeStringToFile,2,SWIGTYPE_p_ccstd__string"); + arg2 = &temp2; + + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[1], &temp3, s.thisObject()); + SE_PRECONDITION2(ok, false, "FileUtils_writeStringToFile,3,SWIGTYPE_p_ccstd__string"); + arg3 = &temp3; + result = (bool)(arg1)->writeStringToFile((ccstd::string const &)*arg2,(ccstd::string const &)*arg3); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); return true; } -SE_BIND_PROP_GET(js_cc_Vec2_ANCHOR_MIDDLE_BOTTOM_get) +SE_BIND_FUNC(js_cc_FileUtils_writeStringToFile) -bool js_register_cc_Vec2(se::Object* obj) { - auto* cls = se::Class::create("Vec2", obj, nullptr, _SE(js_new_Vec2)); +static bool js_cc_FileUtils_writeDataToFile(se::State& s) +{ + // js_function - cls->defineProperty("x", _SE(js_cc_Vec2_x_get), _SE(js_cc_Vec2_x_set)); - cls->defineProperty("y", _SE(js_cc_Vec2_y_get), _SE(js_cc_Vec2_y_set)); - - cls->defineFunction("isZero", _SE(js_cc_Vec2_isZero)); - cls->defineFunction("isOne", _SE(js_cc_Vec2_isOne)); - cls->defineFunction("distance", _SE(js_cc_Vec2_distance)); - cls->defineFunction("distanceSquared", _SE(js_cc_Vec2_distanceSquared)); - cls->defineFunction("length", _SE(js_cc_Vec2_length)); - cls->defineFunction("lengthSquared", _SE(js_cc_Vec2_lengthSquared)); - cls->defineFunction("negate", _SE(js_cc_Vec2_negate)); - cls->defineFunction("normalize", _SE(js_cc_Vec2_normalize)); - cls->defineFunction("getNormalized", _SE(js_cc_Vec2_getNormalized)); - cls->defineFunction("scale", _SE(js_cc_Vec2_scale)); - cls->defineFunction("set", _SE(js_cc_Vec2_set)); - cls->defineFunction("setZero", _SE(js_cc_Vec2_setZero)); - cls->defineFunction("smooth", _SE(js_cc_Vec2_smooth)); - cls->defineFunction("approxEquals", _SE(js_cc_Vec2_approxEquals)); - cls->defineFunction("setPoint", _SE(js_cc_Vec2_setPoint)); - cls->defineFunction("equals", _SE(js_cc_Vec2_equals)); - cls->defineFunction("fuzzyEquals", _SE(js_cc_Vec2_fuzzyEquals)); - cls->defineFunction("getLength", _SE(js_cc_Vec2_getLength)); - cls->defineFunction("getLengthSq", _SE(js_cc_Vec2_getLengthSq)); - cls->defineFunction("getDistanceSq", _SE(js_cc_Vec2_getDistanceSq)); - cls->defineFunction("getDistance", _SE(js_cc_Vec2_getDistance)); - cls->defineFunction("getAngle", _SE(js_cc_Vec2_getAngle)); - cls->defineFunction("cross", _SE(js_cc_Vec2_cross)); - cls->defineFunction("getPerp", _SE(js_cc_Vec2_getPerp)); - cls->defineFunction("getMidpoint", _SE(js_cc_Vec2_getMidpoint)); - cls->defineFunction("getClampPoint", _SE(js_cc_Vec2_getClampPoint)); - cls->defineFunction("getRPerp", _SE(js_cc_Vec2_getRPerp)); - cls->defineFunction("project", _SE(js_cc_Vec2_project)); - cls->defineFunction("rotate", _SE(js_cc_Vec2_rotate)); - cls->defineFunction("unrotate", _SE(js_cc_Vec2_unrotate)); - cls->defineFunction("lerp", _SE(js_cc_Vec2_lerp)); - cls->defineFunction("rotateByAngle", _SE(js_cc_Vec2_rotateByAngle)); - - cls->defineStaticProperty("ZERO", _SE(js_cc_Vec2_ZERO_get), nullptr); - cls->defineStaticProperty("ONE", _SE(js_cc_Vec2_ONE_get), nullptr); - cls->defineStaticProperty("UNIT_X", _SE(js_cc_Vec2_UNIT_X_get), nullptr); - cls->defineStaticProperty("UNIT_Y", _SE(js_cc_Vec2_UNIT_Y_get), nullptr); - cls->defineStaticProperty("ANCHOR_MIDDLE", _SE(js_cc_Vec2_ANCHOR_MIDDLE_get), nullptr); - cls->defineStaticProperty("ANCHOR_BOTTOM_LEFT", _SE(js_cc_Vec2_ANCHOR_BOTTOM_LEFT_get), nullptr); - cls->defineStaticProperty("ANCHOR_TOP_LEFT", _SE(js_cc_Vec2_ANCHOR_TOP_LEFT_get), nullptr); - cls->defineStaticProperty("ANCHOR_BOTTOM_RIGHT", _SE(js_cc_Vec2_ANCHOR_BOTTOM_RIGHT_get), nullptr); - cls->defineStaticProperty("ANCHOR_TOP_RIGHT", _SE(js_cc_Vec2_ANCHOR_TOP_RIGHT_get), nullptr); - cls->defineStaticProperty("ANCHOR_MIDDLE_RIGHT", _SE(js_cc_Vec2_ANCHOR_MIDDLE_RIGHT_get), nullptr); - cls->defineStaticProperty("ANCHOR_MIDDLE_LEFT", _SE(js_cc_Vec2_ANCHOR_MIDDLE_LEFT_get), nullptr); - cls->defineStaticProperty("ANCHOR_MIDDLE_TOP", _SE(js_cc_Vec2_ANCHOR_MIDDLE_TOP_get), nullptr); - cls->defineStaticProperty("ANCHOR_MIDDLE_BOTTOM", _SE(js_cc_Vec2_ANCHOR_MIDDLE_BOTTOM_get), nullptr); - - cls->defineStaticFunction("angle", _SE(js_cc_Vec2_angle_static)); - cls->defineStaticFunction("add", _SE(js_cc_Vec2_add_static)); - cls->defineStaticFunction("clamp", _SE(js_cc_Vec2_clamp_static)); - cls->defineStaticFunction("dot", _SE(js_cc_Vec2_dot_static)); - cls->defineStaticFunction("subtract", _SE(js_cc_Vec2_subtract_static)); - cls->defineStaticFunction("forAngle", _SE(js_cc_Vec2_forAngle_static)); - cls->defineStaticFunction("isLineIntersect", _SE(js_cc_Vec2_isLineIntersect_static)); - cls->defineStaticFunction("isLineOverlap", _SE(js_cc_Vec2_isLineOverlap_static)); - cls->defineStaticFunction("isLineParallel", _SE(js_cc_Vec2_isLineParallel_static)); - cls->defineStaticFunction("isSegmentOverlap", _SE(js_cc_Vec2_isSegmentOverlap_static)); - cls->defineStaticFunction("isSegmentIntersect", _SE(js_cc_Vec2_isSegmentIntersect_static)); - cls->defineStaticFunction("getIntersectPoint", _SE(js_cc_Vec2_getIntersectPoint_static)); + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; + cc::Data *arg2 = 0 ; + ccstd::string *arg3 = 0 ; + cc::Data temp2 ; + ccstd::string temp3 ; + bool result; + if(argc != 2) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "FileUtils_writeDataToFile,2,SWIGTYPE_p_cc__Data"); + arg2 = &temp2; - cls->defineFinalizeFunction(_SE(js_delete_cc_Vec2)); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[1], &temp3, s.thisObject()); + SE_PRECONDITION2(ok, false, "FileUtils_writeDataToFile,3,SWIGTYPE_p_ccstd__string"); + arg3 = &temp3; + result = (bool)(arg1)->writeDataToFile((cc::Data const &)*arg2,(ccstd::string const &)*arg3); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - cls->install(); - JSBClassType::registerClass(cls); - __jsb_cc_Vec2_proto = cls->getProto(); - __jsb_cc_Vec2_class = cls; - se::ScriptEngine::getInstance()->clearException(); return true; } +SE_BIND_FUNC(js_cc_FileUtils_writeDataToFile) - -se::Class* __jsb_cc_Color_class = nullptr; -se::Object* __jsb_cc_Color_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_Color) - -static bool js_cc_Color_r_set(se::State& s) +static bool js_cc_FileUtils_writeValueMapToFile(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::Color *arg1 = (cc::Color *) NULL ; + cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; + cc::ValueMap *arg2 = 0 ; + ccstd::string *arg3 = 0 ; + cc::ValueMap temp2 ; + ccstd::string temp3 ; + bool result; - arg1 = SE_THIS_OBJECT(s); + if(argc != 2) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "FileUtils_writeValueMapToFile,2,SWIGTYPE_p_ccstd__unordered_mapT_ccstd__string_cc__Value_t"); + arg2 = &temp2; - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1->r, s.thisObject()); - SE_PRECONDITION2(ok, false, "Color_r_set,2,SWIGTYPE_uint8_t"); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[1], &temp3, s.thisObject()); + SE_PRECONDITION2(ok, false, "FileUtils_writeValueMapToFile,3,SWIGTYPE_p_ccstd__string"); + arg3 = &temp3; + result = (bool)(arg1)->writeValueMapToFile((cc::ValueMap const &)*arg2,(ccstd::string const &)*arg3); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); return true; } -SE_BIND_PROP_SET(js_cc_Color_r_set) +SE_BIND_FUNC(js_cc_FileUtils_writeValueMapToFile) -static bool js_cc_Color_r_get(se::State& s) +static bool js_cc_FileUtils_writeValueVectorToFile(se::State& s) { + // js_function + CC_UNUSED bool ok = true; - cc::Color *arg1 = (cc::Color *) NULL ; + const auto& args = s.args(); + size_t argc = args.size(); + cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; + cc::ValueVector *arg2 = 0 ; + ccstd::string *arg3 = 0 ; + cc::ValueVector temp2 ; + ccstd::string temp3 ; + bool result; - arg1 = SE_THIS_OBJECT(s); + if(argc != 2) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(arg1->r, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Color_r_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->r, s.thisObject(), s.rval()); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "FileUtils_writeValueVectorToFile,2,SWIGTYPE_p_ccstd__vectorT_cc__Value_t"); + arg2 = &temp2; + + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[1], &temp3, s.thisObject()); + SE_PRECONDITION2(ok, false, "FileUtils_writeValueVectorToFile,3,SWIGTYPE_p_ccstd__string"); + arg3 = &temp3; + result = (bool)(arg1)->writeValueVectorToFile((cc::ValueVector const &)*arg2,(ccstd::string const &)*arg3); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); return true; } -SE_BIND_PROP_GET(js_cc_Color_r_get) +SE_BIND_FUNC(js_cc_FileUtils_writeValueVectorToFile) -static bool js_cc_Color_g_set(se::State& s) +static bool js_cc_FileUtils_getSuitableFOpen(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::Color *arg1 = (cc::Color *) NULL ; + cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; + ccstd::string *arg2 = 0 ; + ccstd::string temp2 ; + ccstd::string result; - arg1 = SE_THIS_OBJECT(s); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "FileUtils_getSuitableFOpen,2,SWIGTYPE_p_ccstd__string"); + arg2 = &temp2; - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1->g, s.thisObject()); - SE_PRECONDITION2(ok, false, "Color_g_set,2,SWIGTYPE_uint8_t"); + result = ((cc::FileUtils const *)arg1)->getSuitableFOpen((ccstd::string const &)*arg2); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "FileUtils_getSuitableFOpen, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); return true; } -SE_BIND_PROP_SET(js_cc_Color_g_set) +SE_BIND_FUNC(js_cc_FileUtils_getSuitableFOpen) -static bool js_cc_Color_g_get(se::State& s) +static bool js_cc_FileUtils_getValueVectorFromFile(se::State& s) { + // js_function + CC_UNUSED bool ok = true; - cc::Color *arg1 = (cc::Color *) NULL ; + const auto& args = s.args(); + size_t argc = args.size(); + cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; + ccstd::string *arg2 = 0 ; + ccstd::string temp2 ; + cc::ValueVector result; - arg1 = SE_THIS_OBJECT(s); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "FileUtils_getValueVectorFromFile,2,SWIGTYPE_p_ccstd__string"); + arg2 = &temp2; + + result = (arg1)->getValueVectorFromFile((ccstd::string const &)*arg2); // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(arg1->g, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Color_g_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->g, s.thisObject(), s.rval()); + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "FileUtils_getValueVectorFromFile, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); return true; } -SE_BIND_PROP_GET(js_cc_Color_g_get) +SE_BIND_FUNC(js_cc_FileUtils_getValueVectorFromFile) -static bool js_cc_Color_b_set(se::State& s) +static bool js_cc_FileUtils_isFileExist(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::Color *arg1 = (cc::Color *) NULL ; + cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; + ccstd::string *arg2 = 0 ; + ccstd::string temp2 ; + bool result; - arg1 = SE_THIS_OBJECT(s); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "FileUtils_isFileExist,2,SWIGTYPE_p_ccstd__string"); + arg2 = &temp2; - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1->b, s.thisObject()); - SE_PRECONDITION2(ok, false, "Color_b_set,2,SWIGTYPE_uint8_t"); - + result = (bool)((cc::FileUtils const *)arg1)->isFileExist((ccstd::string const &)*arg2); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); return true; } -SE_BIND_PROP_SET(js_cc_Color_b_set) +SE_BIND_FUNC(js_cc_FileUtils_isFileExist) -static bool js_cc_Color_b_get(se::State& s) +static bool js_cc_FileUtils_getFileExtension(se::State& s) { + // js_function + CC_UNUSED bool ok = true; - cc::Color *arg1 = (cc::Color *) NULL ; + const auto& args = s.args(); + size_t argc = args.size(); + cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; + ccstd::string *arg2 = 0 ; + ccstd::string temp2 ; + ccstd::string result; - arg1 = SE_THIS_OBJECT(s); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "FileUtils_getFileExtension,2,SWIGTYPE_p_ccstd__string"); + arg2 = &temp2; + + result = ((cc::FileUtils const *)arg1)->getFileExtension((ccstd::string const &)*arg2); // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(arg1->b, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Color_b_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->b, s.thisObject(), s.rval()); + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "FileUtils_getFileExtension, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); return true; } -SE_BIND_PROP_GET(js_cc_Color_b_get) +SE_BIND_FUNC(js_cc_FileUtils_getFileExtension) -static bool js_cc_Color_a_set(se::State& s) +static bool js_cc_FileUtils_isAbsolutePath(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::Color *arg1 = (cc::Color *) NULL ; + cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; + ccstd::string *arg2 = 0 ; + ccstd::string temp2 ; + bool result; - arg1 = SE_THIS_OBJECT(s); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "FileUtils_isAbsolutePath,2,SWIGTYPE_p_ccstd__string"); + arg2 = &temp2; - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1->a, s.thisObject()); - SE_PRECONDITION2(ok, false, "Color_a_set,2,SWIGTYPE_uint8_t"); - + result = (bool)((cc::FileUtils const *)arg1)->isAbsolutePath((ccstd::string const &)*arg2); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); return true; } -SE_BIND_PROP_SET(js_cc_Color_a_set) +SE_BIND_FUNC(js_cc_FileUtils_isAbsolutePath) -static bool js_cc_Color_a_get(se::State& s) +static bool js_cc_FileUtils_isDirectoryExist(se::State& s) { + // js_function + CC_UNUSED bool ok = true; - cc::Color *arg1 = (cc::Color *) NULL ; + const auto& args = s.args(); + size_t argc = args.size(); + cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; + ccstd::string *arg2 = 0 ; + ccstd::string temp2 ; + bool result; - arg1 = SE_THIS_OBJECT(s); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(arg1->a, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Color_a_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->a, s.thisObject(), s.rval()); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "FileUtils_isDirectoryExist,2,SWIGTYPE_p_ccstd__string"); + arg2 = &temp2; + result = (bool)((cc::FileUtils const *)arg1)->isDirectoryExist((ccstd::string const &)*arg2); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); return true; } -SE_BIND_PROP_GET(js_cc_Color_a_get) +SE_BIND_FUNC(js_cc_FileUtils_isDirectoryExist) -static bool js_new_cc_Color__SWIG_0(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_FileUtils_listFiles(se::State& s) { - // js_overloaded_ctor - const auto& args = s.args(); - CC_UNUSED bool ok = true; - cc::Color *result; - result = (cc::Color *)new cc::Color(); - + // js_function - auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); - s.thisObject()->setPrivateObject(ptr); - return true; -} - - -static bool js_new_cc_Color__SWIG_1(se::State& s) // NOLINT(readability-identifier-naming) -{ - // js_overloaded_ctor - const auto& args = s.args(); CC_UNUSED bool ok = true; - uint8_t arg1 ; - uint8_t arg2 ; - uint8_t arg3 ; - uint8_t arg4 ; - cc::Color *result; - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1, s.thisObject()); - SE_PRECONDITION2(ok, false, "new_Color,1,SWIGTYPE_uint8_t"); - - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[1], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "new_Color,2,SWIGTYPE_uint8_t"); - - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[2], &arg3, s.thisObject()); - SE_PRECONDITION2(ok, false, "new_Color,3,SWIGTYPE_uint8_t"); + const auto& args = s.args(); + size_t argc = args.size(); + cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; + ccstd::string *arg2 = 0 ; + ccstd::string temp2 ; + ccstd::vector< ccstd::string > result; + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "FileUtils_listFiles,2,SWIGTYPE_p_ccstd__string"); + arg2 = &temp2; - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[3], &arg4, s.thisObject()); - SE_PRECONDITION2(ok, false, "new_Color,4,SWIGTYPE_uint8_t"); + result = ((cc::FileUtils const *)arg1)->listFiles((ccstd::string const &)*arg2); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "FileUtils_listFiles, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - result = (cc::Color *)new cc::Color(arg1,arg2,arg3,arg4); - auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); - s.thisObject()->setPrivateObject(ptr); return true; } +SE_BIND_FUNC(js_cc_FileUtils_listFiles) - -static bool js_new_cc_Color__SWIG_2(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_FileUtils_createDirectory(se::State& s) { - // js_overloaded_ctor - const auto& args = s.args(); - CC_UNUSED bool ok = true; - uint8_t *arg1 = (uint8_t *) NULL ; - cc::Color *result; - // %typemap(in) SWIGTYPE* - ok &= sevalue_to_native(args[0], &arg1, s.thisObject()); - SE_PRECONDITION2(ok, false, "new_Color,1,SWIGTYPE_p_uint8_t"); - result = (cc::Color *)new cc::Color((uint8_t const *)arg1); - + // js_function - auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); - s.thisObject()->setPrivateObject(ptr); - return true; -} - - -static bool js_new_cc_Color__SWIG_3(se::State& s) // NOLINT(readability-identifier-naming) -{ - // js_overloaded_ctor - const auto& args = s.args(); CC_UNUSED bool ok = true; - uint32_t arg1 ; - cc::Color *result; + const auto& args = s.args(); + size_t argc = args.size(); + cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; + ccstd::string *arg2 = 0 ; + ccstd::string temp2 ; + bool result; - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1, s.thisObject()); - SE_PRECONDITION2(ok, false, "new_Color,1,SWIGTYPE_uint32_t"); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "FileUtils_createDirectory,2,SWIGTYPE_p_ccstd__string"); + arg2 = &temp2; - result = (cc::Color *)new cc::Color(arg1); + result = (bool)(arg1)->createDirectory((ccstd::string const &)*arg2); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); - s.thisObject()->setPrivateObject(ptr); return true; } +SE_BIND_FUNC(js_cc_FileUtils_createDirectory) - -static bool js_new_cc_Color__SWIG_4(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_FileUtils_removeDirectory(se::State& s) { - // js_overloaded_ctor - const auto& args = s.args(); + // js_function + CC_UNUSED bool ok = true; - cc::Color *arg1 = 0 ; - cc::Color *arg2 = 0 ; - cc::Color temp1 ; - cc::Color temp2 ; - cc::Color *result; - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp1, s.thisObject()); - SE_PRECONDITION2(ok, false, "new_Color,1,SWIGTYPE_p_cc__Color"); - arg1 = &temp1; + const auto& args = s.args(); + size_t argc = args.size(); + cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; + ccstd::string *arg2 = 0 ; + ccstd::string temp2 ; + bool result; + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[1], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "new_Color,2,SWIGTYPE_p_cc__Color"); + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "FileUtils_removeDirectory,2,SWIGTYPE_p_ccstd__string"); arg2 = &temp2; - result = (cc::Color *)new cc::Color((cc::Color const &)*arg1,(cc::Color const &)*arg2); + result = (bool)(arg1)->removeDirectory((ccstd::string const &)*arg2); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); - s.thisObject()->setPrivateObject(ptr); return true; } +SE_BIND_FUNC(js_cc_FileUtils_removeDirectory) - -static bool js_new_cc_Color__SWIG_5(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_FileUtils_removeFile(se::State& s) { - // js_overloaded_ctor - const auto& args = s.args(); + // js_function + CC_UNUSED bool ok = true; - cc::Color *arg1 = 0 ; - cc::Color temp1 ; - cc::Color *result; + const auto& args = s.args(); + size_t argc = args.size(); + cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; + ccstd::string *arg2 = 0 ; + ccstd::string temp2 ; + bool result; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp1, s.thisObject()); - SE_PRECONDITION2(ok, false, "new_Color,1,SWIGTYPE_p_cc__Color"); - arg1 = &temp1; + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "FileUtils_removeFile,2,SWIGTYPE_p_ccstd__string"); + arg2 = &temp2; - result = (cc::Color *)new cc::Color((cc::Color const &)*arg1); + result = (bool)(arg1)->removeFile((ccstd::string const &)*arg2); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); - s.thisObject()->setPrivateObject(ptr); return true; } +SE_BIND_FUNC(js_cc_FileUtils_removeFile) - -static bool js_new_Color(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_FileUtils_renameFile__SWIG_0(se::State& s) { - // js_ctor_dispatcher - size_t argc = s.args().size(); - bool ret = false; - - // switch all cases by means of series of if-returns. - - // js_ctor_dispatch_case - if(argc == 0) { - ret = js_new_cc_Color__SWIG_0(s); - if (ret) { - return ret; - } /* reset exception and return */ - } + // js_overloaded_function - // js_ctor_dispatch_case - if(argc == 4) { - ret = js_new_cc_Color__SWIG_1(s); - if (ret) { - return ret; - } /* reset exception and return */ - } + CC_UNUSED bool ok = true; + const auto& args = s.args(); + cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; + ccstd::string *arg2 = 0 ; + ccstd::string *arg3 = 0 ; + ccstd::string *arg4 = 0 ; + ccstd::string temp2 ; + ccstd::string temp3 ; + ccstd::string temp4 ; + bool result; - // js_ctor_dispatch_case - if(argc == 1) { - ret = js_new_cc_Color__SWIG_2(s); - if (ret) { - return ret; - } /* reset exception and return */ - } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "FileUtils_renameFile,2,SWIGTYPE_p_ccstd__string"); + arg2 = &temp2; - // js_ctor_dispatch_case - if(argc == 1) { - ret = js_new_cc_Color__SWIG_3(s); - if (ret) { - return ret; - } /* reset exception and return */ - } + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[1], &temp3, s.thisObject()); + SE_PRECONDITION2(ok, false, "FileUtils_renameFile,3,SWIGTYPE_p_ccstd__string"); + arg3 = &temp3; - // js_ctor_dispatch_case - if(argc == 2) { - ret = js_new_cc_Color__SWIG_4(s); - if (ret) { - return ret; - } /* reset exception and return */ - } + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[2], &temp4, s.thisObject()); + SE_PRECONDITION2(ok, false, "FileUtils_renameFile,4,SWIGTYPE_p_ccstd__string"); + arg4 = &temp4; - // js_ctor_dispatch_case - if(argc == 1) { - ret = js_new_cc_Color__SWIG_5(s); - if (ret) { - return ret; - } /* reset exception and return */ - } + result = (bool)(arg1)->renameFile((ccstd::string const &)*arg2,(ccstd::string const &)*arg3,(ccstd::string const &)*arg4); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - // default: - SE_REPORT_ERROR("Illegal arguments for construction of Color"); - return false; + return true; } -SE_BIND_CTOR(js_new_Color, __jsb_cc_Color_class, js_delete_cc_Color) -static bool js_cc_Color_set__SWIG_0(se::State& s) +static bool js_cc_FileUtils_renameFile__SWIG_1(se::State& s) { // js_overloaded_function CC_UNUSED bool ok = true; const auto& args = s.args(); - cc::Color *arg1 = (cc::Color *) NULL ; - uint8_t arg2 ; - uint8_t arg3 ; - uint8_t arg4 ; - uint8_t arg5 ; + cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; + ccstd::string *arg2 = 0 ; + ccstd::string *arg3 = 0 ; + ccstd::string temp2 ; + ccstd::string temp3 ; + bool result; - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "FileUtils_renameFile,2,SWIGTYPE_p_ccstd__string"); + arg2 = &temp2; - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Color_set,2,SWIGTYPE_uint8_t"); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[1], &temp3, s.thisObject()); + SE_PRECONDITION2(ok, false, "FileUtils_renameFile,3,SWIGTYPE_p_ccstd__string"); + arg3 = &temp3; + result = (bool)(arg1)->renameFile((ccstd::string const &)*arg2,(ccstd::string const &)*arg3); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[1], &arg3, s.thisObject()); - SE_PRECONDITION2(ok, false, "Color_set,3,SWIGTYPE_uint8_t"); + return true; +} + +static bool js_cc_FileUtils_renameFile(se::State& s) +{ + // js_function_dispatcher + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[2], &arg4, s.thisObject()); - SE_PRECONDITION2(ok, false, "Color_set,4,SWIGTYPE_uint8_t"); + // js_function_dispatch_case + if (argc == 3) { + ok = js_cc_FileUtils_renameFile__SWIG_0(s); + if (ok) { + return true; + } + } // js_function_dispatch_case + if (argc == 2) { + ok = js_cc_FileUtils_renameFile__SWIG_1(s); + if (ok) { + return true; + } + } + SE_REPORT_ERROR("wrong number of arguments: %d", (int)argc); + return false; +} +SE_BIND_FUNC(js_cc_FileUtils_renameFile) + +static bool js_cc_FileUtils_getFileSize(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; + ccstd::string *arg2 = 0 ; + ccstd::string temp2 ; + long result; + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "FileUtils_getFileSize,2,SWIGTYPE_p_ccstd__string"); + arg2 = &temp2; - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[3], &arg5, s.thisObject()); - SE_PRECONDITION2(ok, false, "Color_set,5,SWIGTYPE_uint8_t"); + result = (long)(arg1)->getFileSize((ccstd::string const &)*arg2); - (arg1)->set(arg2,arg3,arg4,arg5); + // out 1 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); return true; } +SE_BIND_FUNC(js_cc_FileUtils_getFileSize) -static bool js_cc_Color_set__SWIG_1(se::State& s) +static bool js_cc_FileUtils_normalizePath(se::State& s) { - // js_overloaded_function + // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); - cc::Color *arg1 = (cc::Color *) NULL ; - uint8_t *arg2 = (uint8_t *) NULL ; + size_t argc = args.size(); + cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; + ccstd::string *arg2 = 0 ; + ccstd::string temp2 ; + ccstd::string result; - arg1 = SE_THIS_OBJECT(s); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE* - ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Color_set,2,SWIGTYPE_p_uint8_t"); - (arg1)->set((uint8_t const *)arg2); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "FileUtils_normalizePath,2,SWIGTYPE_p_ccstd__string"); + arg2 = &temp2; + + result = ((cc::FileUtils const *)arg1)->normalizePath((ccstd::string const &)*arg2); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "FileUtils_normalizePath, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + return true; } +SE_BIND_FUNC(js_cc_FileUtils_normalizePath) -static bool js_cc_Color_set__SWIG_2(se::State& s) +static bool js_cc_FileUtils_getFileDir(se::State& s) { - // js_overloaded_function + // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); - cc::Color *arg1 = (cc::Color *) NULL ; - uint32_t arg2 ; + size_t argc = args.size(); + cc::FileUtils *arg1 = (cc::FileUtils *) NULL ; + ccstd::string *arg2 = 0 ; + ccstd::string temp2 ; + ccstd::string result; - arg1 = SE_THIS_OBJECT(s); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "FileUtils_getFileDir,2,SWIGTYPE_p_ccstd__string"); + arg2 = &temp2; - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Color_set,2,SWIGTYPE_uint32_t"); + result = ((cc::FileUtils const *)arg1)->getFileDir((ccstd::string const &)*arg2); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "FileUtils_getFileDir, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - (arg1)->set(arg2); return true; } +SE_BIND_FUNC(js_cc_FileUtils_getFileDir) -static bool js_cc_Color_set__SWIG_3(se::State& s) -{ - // js_overloaded_function +bool js_register_cc_FileUtils(se::Object* obj) { + auto* cls = se::Class::create("FileUtils", obj, nullptr, nullptr); - CC_UNUSED bool ok = true; - const auto& args = s.args(); - cc::Color *arg1 = (cc::Color *) NULL ; - cc::Color *arg2 = 0 ; - cc::Color temp2 ; - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Color_set,2,SWIGTYPE_p_cc__Color"); - arg2 = &temp2; + cls->defineFunction("purgeCachedEntries", _SE(js_cc_FileUtils_purgeCachedEntries)); + cls->defineFunction("getStringFromFile", _SE(js_cc_FileUtils_getStringFromFile)); + cls->defineFunction("getDataFromFile", _SE(js_cc_FileUtils_getDataFromFile)); + cls->defineFunction("getFileDataFromZip", _SE(js_cc_FileUtils_getFileDataFromZip)); + cls->defineFunction("fullPathForFilename", _SE(js_cc_FileUtils_fullPathForFilename)); + cls->defineFunction("fullPathFromRelativeFile", _SE(js_cc_FileUtils_fullPathFromRelativeFile)); + cls->defineFunction("setSearchPaths", _SE(js_cc_FileUtils_setSearchPaths)); + cls->defineFunction("getDefaultResourceRootPath", _SE(js_cc_FileUtils_getDefaultResourceRootPath)); + cls->defineFunction("setDefaultResourceRootPath", _SE(js_cc_FileUtils_setDefaultResourceRootPath)); + cls->defineFunction("addSearchPath", _SE(js_cc_FileUtils_addSearchPath)); + cls->defineFunction("getSearchPaths", _SE(js_cc_FileUtils_getSearchPaths)); + cls->defineFunction("getOriginalSearchPaths", _SE(js_cc_FileUtils_getOriginalSearchPaths)); + cls->defineFunction("getWritablePath", _SE(js_cc_FileUtils_getWritablePath)); + cls->defineFunction("setWritablePath", _SE(js_cc_FileUtils_setWritablePath)); + cls->defineFunction("getValueMapFromFile", _SE(js_cc_FileUtils_getValueMapFromFile)); + cls->defineFunction("getValueMapFromData", _SE(js_cc_FileUtils_getValueMapFromData)); + cls->defineFunction("writeToFile", _SE(js_cc_FileUtils_writeToFile)); + cls->defineFunction("writeStringToFile", _SE(js_cc_FileUtils_writeStringToFile)); + cls->defineFunction("writeDataToFile", _SE(js_cc_FileUtils_writeDataToFile)); + cls->defineFunction("writeValueMapToFile", _SE(js_cc_FileUtils_writeValueMapToFile)); + cls->defineFunction("writeValueVectorToFile", _SE(js_cc_FileUtils_writeValueVectorToFile)); + cls->defineFunction("getSuitableFOpen", _SE(js_cc_FileUtils_getSuitableFOpen)); + cls->defineFunction("getValueVectorFromFile", _SE(js_cc_FileUtils_getValueVectorFromFile)); + cls->defineFunction("isFileExist", _SE(js_cc_FileUtils_isFileExist)); + cls->defineFunction("getFileExtension", _SE(js_cc_FileUtils_getFileExtension)); + cls->defineFunction("isAbsolutePath", _SE(js_cc_FileUtils_isAbsolutePath)); + cls->defineFunction("isDirectoryExist", _SE(js_cc_FileUtils_isDirectoryExist)); + cls->defineFunction("listFiles", _SE(js_cc_FileUtils_listFiles)); + cls->defineFunction("createDirectory", _SE(js_cc_FileUtils_createDirectory)); + cls->defineFunction("removeDirectory", _SE(js_cc_FileUtils_removeDirectory)); + cls->defineFunction("removeFile", _SE(js_cc_FileUtils_removeFile)); + cls->defineFunction("renameFile", _SE(js_cc_FileUtils_renameFile)); + cls->defineFunction("getFileSize", _SE(js_cc_FileUtils_getFileSize)); + cls->defineFunction("normalizePath", _SE(js_cc_FileUtils_normalizePath)); + cls->defineFunction("getFileDir", _SE(js_cc_FileUtils_getFileDir)); - (arg1)->set((cc::Color const &)*arg2); + cls->defineStaticFunction("getInstance", _SE(js_cc_FileUtils_getInstance_static)); + + + cls->defineFinalizeFunction(_SE(js_delete_cc_FileUtils)); + + + cls->install(); + JSBClassType::registerClass(cls); + __jsb_cc_FileUtils_proto = cls->getProto(); + __jsb_cc_FileUtils_class = cls; + se::ScriptEngine::getInstance()->clearException(); return true; } -static bool js_cc_Color_set__SWIG_4(se::State& s) + +static bool js_cc_createFileUtils(se::State& s) { - // js_overloaded_function + // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); - cc::Color *arg1 = (cc::Color *) NULL ; - cc::Color *arg2 = 0 ; - cc::Color *arg3 = 0 ; - cc::Color temp2 ; - cc::Color temp3 ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "Color_set,2,SWIGTYPE_p_cc__Color"); - arg2 = &temp2; - - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[1], &temp3, s.thisObject()); - SE_PRECONDITION2(ok, false, "Color_set,3,SWIGTYPE_p_cc__Color"); - arg3 = &temp3; + size_t argc = args.size(); + cc::FileUtils *result = 0 ; - (arg1)->set((cc::Color const &)*arg2,(cc::Color const &)*arg3); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + result = (cc::FileUtils *)cc::createFileUtils(); + // %typemap(out) SWIGTYPE* + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "createFileUtils, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); return true; } +SE_BIND_FUNC(js_cc_createFileUtils) + +se::Class* __jsb_cc_SAXParser_class = nullptr; +se::Object* __jsb_cc_SAXParser_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_SAXParser) -static bool js_cc_Color_set(se::State& s) +// js_ctor +static bool js_new_cc_SAXParser(se::State& s) // NOLINT(readability-identifier-naming) { - // js_function_dispatcher CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - // js_function_dispatch_case - if (argc == 4) { - ok = js_cc_Color_set__SWIG_0(s); - if (ok) { - return true; - } - } // js_function_dispatch_case - if (argc == 1) { - ok = js_cc_Color_set__SWIG_1(s); - if (ok) { - return true; - } - } // js_function_dispatch_case - if (argc == 1) { - ok = js_cc_Color_set__SWIG_2(s); - if (ok) { - return true; - } - } // js_function_dispatch_case - if (argc == 1) { - ok = js_cc_Color_set__SWIG_3(s); - if (ok) { - return true; - } - } // js_function_dispatch_case - if (argc == 2) { - ok = js_cc_Color_set__SWIG_4(s); - if (ok) { - return true; - } - } - SE_REPORT_ERROR("wrong number of arguments: %d", (int)argc); - return false; + cc::SAXParser *result; + result = (cc::SAXParser *)new cc::SAXParser(); + + + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); + return true; +} +SE_BIND_CTOR(js_new_cc_SAXParser, __jsb_cc_SAXParser_class, js_delete_cc_SAXParser) + +static bool js_delete_cc_SAXParser(se::State& s) +{ + // js_dtoroverride + return true; } -SE_BIND_FUNC(js_cc_Color_set) +SE_BIND_FINALIZE_FUNC(js_delete_cc_SAXParser) -static bool js_cc_Color_toVec4(se::State& s) +static bool js_cc_PlistParser_init(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::Color *arg1 = (cc::Color *) NULL ; - cc::Vec4 result; + cc::SAXParser *arg1 = (cc::SAXParser *) NULL ; + char *arg2 = (char *) NULL ; + ccstd::string temp2 ; + bool result; - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = ((cc::Color const *)arg1)->toVec4(); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Color_toVec4, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + ok &= sevalue_to_native(args[0], &temp2); + SE_PRECONDITION2(ok, false, "PlistParser_init,2,SWIGTYPE_p_char"); + arg2 = (char *) temp2.c_str(); + result = (bool)(arg1)->init((char const *)arg2); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); return true; } -SE_BIND_FUNC(js_cc_Color_toVec4) +SE_BIND_FUNC(js_cc_PlistParser_init) -static bool js_delete_cc_Color(se::State& s) +static bool js_cc_PlistParser_parse(se::State& s) { - // js_dtoroverride + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::SAXParser *arg1 = (cc::SAXParser *) NULL ; + ccstd::string *arg2 = 0 ; + ccstd::string temp2 ; + bool result; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "PlistParser_parse,2,SWIGTYPE_p_ccstd__string"); + arg2 = &temp2; + + result = (bool)(arg1)->parse((ccstd::string const &)*arg2); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + + return true; } -SE_BIND_FINALIZE_FUNC(js_delete_cc_Color) +SE_BIND_FUNC(js_cc_PlistParser_parse) -bool js_register_cc_Color(se::Object* obj) { - auto* cls = se::Class::create("Color", obj, nullptr, _SE(js_new_Color)); +bool js_register_cc_SAXParser(se::Object* obj) { + auto* cls = se::Class::create("PlistParser", obj, nullptr, _SE(js_new_cc_SAXParser)); - cls->defineProperty("r", _SE(js_cc_Color_r_get), _SE(js_cc_Color_r_set)); - cls->defineProperty("g", _SE(js_cc_Color_g_get), _SE(js_cc_Color_g_set)); - cls->defineProperty("b", _SE(js_cc_Color_b_get), _SE(js_cc_Color_b_set)); - cls->defineProperty("a", _SE(js_cc_Color_a_get), _SE(js_cc_Color_a_set)); - cls->defineFunction("set", _SE(js_cc_Color_set)); - cls->defineFunction("toVec4", _SE(js_cc_Color_toVec4)); + cls->defineFunction("init", _SE(js_cc_PlistParser_init)); + cls->defineFunction("parse", _SE(js_cc_PlistParser_parse)); - cls->defineFinalizeFunction(_SE(js_delete_cc_Color)); + cls->defineFinalizeFunction(_SE(js_delete_cc_SAXParser)); cls->install(); - JSBClassType::registerClass(cls); + JSBClassType::registerClass(cls); - __jsb_cc_Color_proto = cls->getProto(); - __jsb_cc_Color_class = cls; + __jsb_cc_SAXParser_proto = cls->getProto(); + __jsb_cc_SAXParser_class = cls; se::ScriptEngine::getInstance()->clearException(); return true; } @@ -8970,6 +6884,13 @@ bool register_all_engine(se::Object* obj) { } se::Object* ns = nsVal.toObject(); /* Register classes */ + js_register_cc_Vec2(ns); + js_register_cc_Color(ns); + js_register_cc_Vec3(ns); + js_register_cc_Vec4(ns); + js_register_cc_Mat3(ns); + js_register_cc_Mat4(ns); + js_register_cc_Quaternion(ns); js_register_cc_CCObject(ns); js_register_cc_JSBNativeDataHolder(ns); js_register_cc_ICanvasGradient(ns); @@ -8982,8 +6903,6 @@ bool register_all_engine(se::Object* obj) { js_register_cc_ISystemWindowManager(ns); js_register_cc_FileUtils(ns); js_register_cc_SAXParser(ns); - js_register_cc_Vec2(ns); - js_register_cc_Color(ns); #if CC_USE_DEBUG_RENDERER js_register_cc_DebugTextInfo(ns); #endif // CC_USE_DEBUG_RENDERER diff --git a/native/cocos/bindings/auto/jsb_cocos_auto.h b/native/cocos/bindings/auto/jsb_cocos_auto.h index b7680ac751b..503dcd73ed2 100644 --- a/native/cocos/bindings/auto/jsb_cocos_auto.h +++ b/native/cocos/bindings/auto/jsb_cocos_auto.h @@ -47,6 +47,11 @@ #include "platform/FileUtils.h" #include "platform/SAXParser.h" #include "math/Vec2.h" +#include "math/Vec3.h" +#include "math/Vec4.h" +#include "math/Mat3.h" +#include "math/Mat4.h" +#include "math/Quaternion.h" #include "math/Color.h" #include "profiler/DebugRenderer.h" @@ -55,6 +60,41 @@ bool register_all_engine(se::Object* obj); +JSB_REGISTER_OBJECT_TYPE(cc::Vec2); +extern se::Object *__jsb_cc_Vec2_proto; // NOLINT +extern se::Class * __jsb_cc_Vec2_class; // NOLINT + + +JSB_REGISTER_OBJECT_TYPE(cc::Color); +extern se::Object *__jsb_cc_Color_proto; // NOLINT +extern se::Class * __jsb_cc_Color_class; // NOLINT + + +JSB_REGISTER_OBJECT_TYPE(cc::Vec3); +extern se::Object *__jsb_cc_Vec3_proto; // NOLINT +extern se::Class * __jsb_cc_Vec3_class; // NOLINT + + +JSB_REGISTER_OBJECT_TYPE(cc::Vec4); +extern se::Object *__jsb_cc_Vec4_proto; // NOLINT +extern se::Class * __jsb_cc_Vec4_class; // NOLINT + + +JSB_REGISTER_OBJECT_TYPE(cc::Mat3); +extern se::Object *__jsb_cc_Mat3_proto; // NOLINT +extern se::Class * __jsb_cc_Mat3_class; // NOLINT + + +JSB_REGISTER_OBJECT_TYPE(cc::Mat4); +extern se::Object *__jsb_cc_Mat4_proto; // NOLINT +extern se::Class * __jsb_cc_Mat4_class; // NOLINT + + +JSB_REGISTER_OBJECT_TYPE(cc::Quaternion); +extern se::Object *__jsb_cc_Quaternion_proto; // NOLINT +extern se::Class * __jsb_cc_Quaternion_class; // NOLINT + + JSB_REGISTER_OBJECT_TYPE(cc::CCObject); extern se::Object *__jsb_cc_CCObject_proto; // NOLINT extern se::Class * __jsb_cc_CCObject_class; // NOLINT @@ -118,16 +158,6 @@ JSB_REGISTER_OBJECT_TYPE(cc::SAXParser); extern se::Object *__jsb_cc_SAXParser_proto; // NOLINT extern se::Class * __jsb_cc_SAXParser_class; // NOLINT - -JSB_REGISTER_OBJECT_TYPE(cc::Vec2); -extern se::Object *__jsb_cc_Vec2_proto; // NOLINT -extern se::Class * __jsb_cc_Vec2_class; // NOLINT - - -JSB_REGISTER_OBJECT_TYPE(cc::Color); -extern se::Object *__jsb_cc_Color_proto; // NOLINT -extern se::Class * __jsb_cc_Color_class; // NOLINT - #if CC_USE_DEBUG_RENDERER JSB_REGISTER_OBJECT_TYPE(cc::DebugTextInfo); diff --git a/native/cocos/bindings/auto/jsb_geometry_auto.cpp b/native/cocos/bindings/auto/jsb_geometry_auto.cpp index ed411b87568..6fb8caf6945 100644 --- a/native/cocos/bindings/auto/jsb_geometry_auto.cpp +++ b/native/cocos/bindings/auto/jsb_geometry_auto.cpp @@ -62,6 +62,7 @@ #include "bindings/auto/jsb_geometry_auto.h" +#include "bindings/auto/jsb_cocos_auto.h" diff --git a/native/cocos/bindings/manual/jsb_cocos_manual.cpp b/native/cocos/bindings/manual/jsb_cocos_manual.cpp index b82dd11b2ef..3d983dd1d09 100644 --- a/native/cocos/bindings/manual/jsb_cocos_manual.cpp +++ b/native/cocos/bindings/manual/jsb_cocos_manual.cpp @@ -25,6 +25,7 @@ #include "jsb_cocos_manual.h" +#include "bindings/manual/jsb_global.h" #include "cocos/bindings/auto/jsb_cocos_auto.h" #include "cocos/bindings/jswrapper/SeApi.h" #include "cocos/bindings/manual/jsb_conversions.h" @@ -734,10 +735,8 @@ static bool register_engine_Color_manual(se::Object * /*obj*/) { // NOLINT(reada return true; } - static bool js_cc_ISystemWindowManager_getInstance_static(se::State &s) { // NOLINT(readability-identifier-naming) const auto &args = s.args(); - CC_UNUSED bool ok = true; auto *instance = CC_GET_PLATFORM_INTERFACE(cc::ISystemWindowManager); ok &= nativevalue_to_se(instance, s.rval(), s.thisObject()); @@ -754,7 +753,58 @@ static bool register_platform(se::Object * /*obj*/) { // NOLINT(readability-iden return result; } +template +static bool bindAsExternalBuffer(se::State &s) { // NOLINT + auto *self = SE_THIS_OBJECT(s); + if (!self) { + return false; + } + // NOLINTNEXTLINE + se::HandleObject buffer(se::Object::createExternalArrayBufferObject(self, sizeof(*self), [](void *, size_t, void *) {})); + s.rval().setObject(buffer); + return true; +} + +static bool js_cc_Vec2_underlyingData(se::State &s) { // NOLINT + return bindAsExternalBuffer(s); +} +SE_BIND_FUNC(js_cc_Vec2_underlyingData) + +static bool js_cc_Vec3_underlyingData(se::State &s) { // NOLINT + return bindAsExternalBuffer(s); +} +SE_BIND_FUNC(js_cc_Vec3_underlyingData) + +static bool js_cc_Vec4_underlyingData(se::State &s) { // NOLINT + return bindAsExternalBuffer(s); +} +SE_BIND_FUNC(js_cc_Vec4_underlyingData) + +static bool js_cc_Mat3_underlyingData(se::State &s) { // NOLINT + return bindAsExternalBuffer(s); +} +SE_BIND_FUNC(js_cc_Mat3_underlyingData) + +static bool js_cc_Mat4_underlyingData(se::State &s) { // NOLINT + return bindAsExternalBuffer(s); +} +SE_BIND_FUNC(js_cc_Mat4_underlyingData) + +static bool js_cc_Quaternion_underlyingData(se::State &s) { // NOLINT + return bindAsExternalBuffer(s); +} +SE_BIND_FUNC(js_cc_Quaternion_underlyingData) + + bool register_all_cocos_manual(se::Object *obj) { // NOLINT(readability-identifier-naming) + + __jsb_cc_Vec2_proto->defineFunction("underlyingData", _SE(js_cc_Vec2_underlyingData)); + __jsb_cc_Vec3_proto->defineFunction("underlyingData", _SE(js_cc_Vec3_underlyingData)); + __jsb_cc_Vec4_proto->defineFunction("underlyingData", _SE(js_cc_Vec4_underlyingData)); + __jsb_cc_Mat3_proto->defineFunction("underlyingData", _SE(js_cc_Mat3_underlyingData)); + __jsb_cc_Mat4_proto->defineFunction("underlyingData", _SE(js_cc_Mat4_underlyingData)); + __jsb_cc_Quaternion_proto->defineFunction("underlyingData", _SE(js_cc_Quaternion_underlyingData)); + register_plist_parser(obj); register_sys_localStorage(obj); register_device(obj); diff --git a/native/cocos/bindings/manual/jsb_conversions_spec.cpp b/native/cocos/bindings/manual/jsb_conversions_spec.cpp index ba8c2ecb50b..e8007979909 100644 --- a/native/cocos/bindings/manual/jsb_conversions_spec.cpp +++ b/native/cocos/bindings/manual/jsb_conversions_spec.cpp @@ -360,6 +360,10 @@ bool seval_to_DownloaderHints(const se::Value &v, cc::network::DownloaderHints * bool sevalue_to_native(const se::Value &from, cc::Vec4 *to, se::Object * /*ctx*/) { SE_PRECONDITION2(from.isObject(), false, "Convert parameter to Vec4 failed!"); se::Object *obj = from.toObject(); + if(obj->getPrivateData()) { + *to = *obj->getTypedPrivateData(); + return true; + } se::Value tmp; set_member_field(obj, to, "x", &cc::Vec4::x, tmp); set_member_field(obj, to, "y", &cc::Vec4::y, tmp); @@ -399,6 +403,11 @@ bool sevalue_to_native(const se::Value &from, cc::Mat3 *to, se::Object * /*ctx*/ SE_PRECONDITION2(from.isObject(), false, "Convert parameter to Matrix3 failed!"); se::Object *obj = from.toObject(); + if(obj->getPrivateData()) { + *to = *obj->getTypedPrivateData(); + return true; + } + if (obj->isTypedArray()) { // typed array SE_PRECONDITION2(obj->isTypedArray(), false, "Convert parameter to Matrix3 failed!"); @@ -440,6 +449,10 @@ bool sevalue_to_native(const se::Value &from, cc::Mat3 *to, se::Object * /*ctx*/ bool sevalue_to_native(const se::Value &from, cc::Mat4 *to, se::Object * /*unused*/) { SE_PRECONDITION2(from.isObject(), false, "Convert parameter to Matrix4 failed!"); se::Object *obj = from.toObject(); + if(obj->getPrivateData()) { + *to = *obj->getTypedPrivateData(); + return true; + } if (obj->isTypedArray()) { // typed array @@ -484,6 +497,10 @@ bool sevalue_to_native(const se::Value &from, cc::Vec3 *to, se::Object * /*unuse SE_PRECONDITION2(from.isObject(), false, "Convert parameter to Vec3 failed!"); se::Object *obj = from.toObject(); + if(obj->getPrivateData() != nullptr) { + *to = *obj->getTypedPrivateData(); + return true; + } se::Value tmp; set_member_field(obj, to, "x", &cc::Vec3::x, tmp); set_member_field(obj, to, "y", &cc::Vec3::y, tmp); @@ -496,6 +513,10 @@ bool sevalue_to_native(const se::Value &from, cc::Color *to, se::Object * /*unus SE_PRECONDITION2(from.isObject(), false, "Convert parameter to Color failed!"); se::Object *obj = from.toObject(); + if(obj->getPrivateObject()) { + *to = *obj->getTypedPrivateData(); + return true; + } se::Value t; set_member_field(obj, to, "r", &cc::Color::r, t); set_member_field(obj, to, "g", &cc::Color::g, t); @@ -509,6 +530,10 @@ bool sevalue_to_native(const se::Value &from, cc::Vec2 *to, se::Object * /*unuse SE_PRECONDITION2(from.isObject(), false, "Convert parameter to Vec2 failed!"); se::Object *obj = from.toObject(); + if(obj->getPrivateObject()) { + *to = *obj->getTypedPrivateData(); + return true; + } se::Value tmp; set_member_field(obj, to, "x", &cc::Vec2::x, tmp); set_member_field(obj, to, "y", &cc::Vec2::y, tmp); @@ -530,6 +555,10 @@ bool sevalue_to_native(const se::Value &from, cc::Size *to, se::Object * /*unuse bool sevalue_to_native(const se::Value &from, cc::Quaternion *to, se::Object * /*unused*/) { SE_PRECONDITION2(from.isObject(), false, "Convert parameter to Quaternion failed!"); se::Object *obj = from.toObject(); + if(obj->getPrivateObject()) { + *to = *obj->getTypedPrivateData(); + return true; + } se::Value tmp; set_member_field(obj, to, "x", &cc::Quaternion::x, tmp); set_member_field(obj, to, "y", &cc::Quaternion::y, tmp); @@ -1379,39 +1408,6 @@ bool nativevalue_to_se(const ccstd::unordered_map &fro return ok; } -// NOLINTNEXTLINE(readability-identifier-naming) -bool nativevalue_to_se(const cc::Vec4 &from, se::Value &to, se::Object * /*unused*/) { - se::HandleObject obj(se::Object::createPlainObject()); - obj->setProperty("x", se::Value(from.x)); - obj->setProperty("y", se::Value(from.y)); - obj->setProperty("z", se::Value(from.z)); - obj->setProperty("w", se::Value(from.w)); - obj->setProperty("type", se::Value(static_cast(MathType::VEC4))); - to.setObject(obj); - return true; -} - -// NOLINTNEXTLINE(readability-identifier-naming) -bool nativevalue_to_se(const cc::Vec2 &from, se::Value &to, se::Object * /*unused*/) { - se::HandleObject obj(se::Object::createPlainObject()); - obj->setProperty("x", se::Value(from.x)); - obj->setProperty("y", se::Value(from.y)); - obj->setProperty("type", se::Value(static_cast(MathType::VEC2))); - to.setObject(obj); - return true; -} - -// NOLINTNEXTLINE(readability-identifier-naming) -bool nativevalue_to_se(const cc::Vec3 &from, se::Value &to, se::Object * /*unused*/) { - se::HandleObject obj(se::Object::createPlainObject()); - obj->setProperty("x", se::Value(from.x)); - obj->setProperty("y", se::Value(from.y)); - obj->setProperty("z", se::Value(from.z)); - obj->setProperty("type", se::Value(static_cast(MathType::VEC3))); - to.setObject(obj); - return true; -} - // NOLINTNEXTLINE(readability-identifier-naming) bool nativevalue_to_se(const cc::Size &from, se::Value &to, se::Object * /*unused*/) { se::HandleObject obj(se::Object::createPlainObject()); @@ -1514,31 +1510,6 @@ bool nativevalue_to_se(const cc::NativeDep &from, se::Value &to, se::Object * /* return true; } -// NOLINTNEXTLINE(readability-identifier-naming) -bool nativevalue_to_se(const cc::Mat3 &from, se::Value &to, se::Object * /*ctx*/) { - se::HandleObject obj(se::Object::createPlainObject()); - char keybuf[8] = {0}; - for (auto i = 0; i < 9; i++) { - snprintf(keybuf, sizeof(keybuf), "m%02d", i); - obj->setProperty(keybuf, se::Value(from.m[i])); - } - obj->setProperty("type", se::Value(static_cast(MathType::MAT3))); - to.setObject(obj); - return true; -} - -// NOLINTNEXTLINE(readability-identifier-naming) -bool nativevalue_to_se(const cc::Mat4 &from, se::Value &to, se::Object * /*ctx*/) { - se::HandleObject obj(se::Object::createPlainObject()); - char keybuf[8] = {0}; - for (auto i = 0; i < 16; i++) { - snprintf(keybuf, sizeof(keybuf), "m%02d", i); - obj->setProperty(keybuf, se::Value(from.m[i])); - } - obj->setProperty("type", se::Value(static_cast(MathType::MAT4))); - to.setObject(obj); - return true; -} #if CC_USE_PHYSICS_PHYSX diff --git a/native/cocos/bindings/manual/jsb_conversions_spec.h b/native/cocos/bindings/manual/jsb_conversions_spec.h index 6fd854ac7ea..72b73a6b77d 100644 --- a/native/cocos/bindings/manual/jsb_conversions_spec.h +++ b/native/cocos/bindings/manual/jsb_conversions_spec.h @@ -535,15 +535,8 @@ inline bool nativevalue_to_se(char *from, se::Value &to, se::Object * /*ctx*/) { return true; } -// template <> -// bool nativevalue_to_se(const cc::Color &from, se::Value &to, se::Object *ctx); // NOLINT(readability-identifier-naming) - bool nativevalue_to_se(const cc::NativeDep &from, se::Value &to, se::Object *ctx); // NOLINT(readability-identifier-naming) -bool nativevalue_to_se(const cc::Mat3 &from, se::Value &to, se::Object *ctx); // NOLINT(readability-identifier-naming) - -bool nativevalue_to_se(const cc::Mat4 &from, se::Value &to, se::Object *ctx); // NOLINT(readability-identifier-naming) - // JSB_REGISTER_OBJECT_TYPE(cc::network::DownloaderHints); bool nativevalue_to_se(const cc::Data &from, se::Value &to, se::Object *ctx); // NOLINT(readability-identifier-naming) @@ -552,23 +545,8 @@ bool nativevalue_to_se(const cc::Value &from, se::Value &to, se::Object *ctx); / bool nativevalue_to_se(const ccstd::unordered_map &from, se::Value &to, se::Object *ctx); // NOLINT(readability-identifier-naming) -bool nativevalue_to_se(const cc::Vec2 &from, se::Value &to, se::Object *ctx); // NOLINT(readability-identifier-naming) - -bool nativevalue_to_se(const cc::Vec3 &from, se::Value &to, se::Object *ctx); // NOLINT(readability-identifier-naming) -inline bool nativevalue_to_se(const cc::Vec3 *from, se::Value &to, se::Object *ctx) { // NOLINT(readability-identifier-naming) - if (from != nullptr) { - return nativevalue_to_se(*from, to, ctx); - } - to.setUndefined(); - return true; -} - -bool nativevalue_to_se(const cc::Vec4 &from, se::Value &to, se::Object *ctx); // NOLINT(readability-identifier-naming) - bool nativevalue_to_se(const cc::Size &from, se::Value &to, se::Object *ctx); // NOLINT(readability-identifier-naming) -bool nativevalue_to_se(const cc::Quaternion &from, se::Value &to, se::Object *ctx); // NOLINT(readability-identifier-naming) - bool nativevalue_to_se(const cc::extension::ManifestAsset &from, se::Value &to, se::Object *ctx); // NOLINT(readability-identifier-naming) bool nativevalue_to_se(const cc::Rect &from, se::Value &to, se::Object *ctx); // NOLINT(readability-identifier-naming) diff --git a/native/cocos/core/Root.cpp b/native/cocos/core/Root.cpp index bcde6a52ed8..e3cd67f7a82 100644 --- a/native/cocos/core/Root.cpp +++ b/native/cocos/core/Root.cpp @@ -106,8 +106,8 @@ scene::RenderWindow *Root::createRenderWindowFromSystemWindow(ISystemWindow *win const auto &size = window->getViewSize(); gfx::SwapchainInfo info; - info.width = static_cast(size.x); - info.height = static_cast(size.y); + info.width = static_cast(size.width); + info.height = static_cast(size.height); info.windowHandle = reinterpret_cast(handle); info.windowId = window->getWindowId(); diff --git a/native/cocos/engine/Engine.cpp b/native/cocos/engine/Engine.cpp index ec2aa8e3461..602e6985638 100644 --- a/native/cocos/engine/Engine.cpp +++ b/native/cocos/engine/Engine.cpp @@ -82,8 +82,8 @@ bool setCanvasCallback(se::Object * /*global*/) { std::stringstream ss; { - ss << "window.innerWidth = " << static_cast(viewSize.x / dpr) << ";"; - ss << "window.innerHeight = " << static_cast(viewSize.y / dpr) << ";"; + ss << "window.innerWidth = " << static_cast(viewSize.width / dpr) << ";"; + ss << "window.innerHeight = " << static_cast(viewSize.height / dpr) << ";"; ss << "window.windowHandler = "; if (sizeof(handler) == 8) { // use bigint ss << static_cast(handler) << "n;"; diff --git a/native/cocos/platform/interfaces/modules/ISystemWindow.h b/native/cocos/platform/interfaces/modules/ISystemWindow.h index 0514dbf68d9..47b987cd10b 100644 --- a/native/cocos/platform/interfaces/modules/ISystemWindow.h +++ b/native/cocos/platform/interfaces/modules/ISystemWindow.h @@ -27,7 +27,7 @@ #include #include "base/std/container/array.h" -#include "math/Vec2.h" +#include "math/Geometry.h" #include "platform/interfaces/OSInterface.h" namespace cc { @@ -36,7 +36,7 @@ class CC_DLL ISystemWindow : public OSInterface { public: static constexpr uint32_t mainWindowId = 1; - using Size = cc::Vec2; + using Size = cc::Size; enum WindowFlags { /* !!! FIXME: change this to name = (1<init(_device, info.maxCharacters * DEBUG_VERTICES_PER_CHAR, ATTRIBUTES); const auto *window = CC_GET_MAIN_SYSTEM_WINDOW(); - const auto width = window->getViewSize().x * Device::getDevicePixelRatio(); + const auto width = window->getViewSize().width * Device::getDevicePixelRatio(); auto fontSize = static_cast(width / 800.0F * info.fontSize); fontSize = fontSize < 10U ? 10U : (fontSize > 20U ? 20U : fontSize); diff --git a/native/cocos/profiler/Profiler.cpp b/native/cocos/profiler/Profiler.cpp index 6e9e7f27421..5899f5f018c 100644 --- a/native/cocos/profiler/Profiler.cpp +++ b/native/cocos/profiler/Profiler.cpp @@ -204,8 +204,8 @@ void Profiler::doIntervalUpdate() { _coreStats.multiThread = gfx::DeviceManager::isDetachDeviceThread(); _coreStats.occlusionQuery = pipeline->isOcclusionQueryEnabled(); _coreStats.shadowMap = shadows != nullptr && shadows->isEnabled() && shadows->getType() == scene::ShadowType::SHADOW_MAP; - _coreStats.screenWidth = static_cast(viewSize.x); - _coreStats.screenHeight = static_cast(viewSize.y); + _coreStats.screenWidth = static_cast(viewSize.width); + _coreStats.screenHeight = static_cast(viewSize.height); } void Profiler::doFrameUpdate() { @@ -225,7 +225,7 @@ void Profiler::printStats() { auto *renderer = CC_DEBUG_RENDERER; const auto *window = CC_GET_MAIN_SYSTEM_WINDOW(); const auto viewSize = window->getViewSize() * Device::getDevicePixelRatio(); - const auto width = viewSize.x; + const auto width = viewSize.width; const auto lineHeight = renderer->getLineHeight(); const auto columnWidth = width / 12.0F; // divide column numbers const auto leftOffset = width * 0.01F; diff --git a/native/cocos/renderer/gfx-vulkan/VKSwapchain.cpp b/native/cocos/renderer/gfx-vulkan/VKSwapchain.cpp index 347ca2794db..3ab3da644e0 100644 --- a/native/cocos/renderer/gfx-vulkan/VKSwapchain.cpp +++ b/native/cocos/renderer/gfx-vulkan/VKSwapchain.cpp @@ -234,7 +234,7 @@ void CCVKSwapchain::doInit(const SwapchainInfo &info) { #if CC_PLATFORM == CC_PLATFORM_ANDROID auto *window = CC_GET_SYSTEM_WINDOW(_windowId); auto viewSize = window->getViewSize(); - checkSwapchainStatus(viewSize.x, viewSize.y); + checkSwapchainStatus(viewSize.width, viewSize.height); // Android Game Frame Pacing:swappy #if CC_SWAPPY_ENABLED @@ -451,7 +451,7 @@ void CCVKSwapchain::doCreateSurface(void *windowHandle) { // NOLINT #if CC_PLATFORM == CC_PLATFORM_ANDROID auto *window = CC_GET_SYSTEM_WINDOW(_windowId); auto viewSize = window->getViewSize(); - checkSwapchainStatus(viewSize.x, viewSize.y); + checkSwapchainStatus(viewSize.width, viewSize.height); #else checkSwapchainStatus(); #endif diff --git a/native/cocos/ui/edit-box/EditBox-win32.cpp b/native/cocos/ui/edit-box/EditBox-win32.cpp index cc1fb6dac34..91ac4296be9 100644 --- a/native/cocos/ui/edit-box/EditBox-win32.cpp +++ b/native/cocos/ui/edit-box/EditBox-win32.cpp @@ -243,12 +243,12 @@ void EditBox::show(const EditBox::ShowInfo &showInfo) { RECT rect; GetWindowRect(getCurrentWindowHwnd(), &rect); - float WindowRatio = (float)(rect.bottom - rect.top) / (float)CC_GET_PLATFORM_INTERFACE(ISystemWindow)->getViewSize().y; + float WindowRatio = (float)(rect.bottom - rect.top) / (float)CC_GET_PLATFORM_INTERFACE(ISystemWindow)->getViewSize().height; float JsFontRatio = float(showInfo.fontSize) / 5; /** A probale way to calculate the increase of font size * OriginalSize + Increase = OriginalSize * Ratio_of_js_fontSize * Ratio_of_window * Default value : OriginalSize = 8, Ratio_of_js_fontSize = showInfo.fontSize /5, - * Ratio_of_window = (float)height / (float)CC_GET_PLATFORM_INTERFACE(ISystemWindow)->getViewSize().y + * Ratio_of_window = (float)height / (float)CC_GET_PLATFORM_INTERFACE(ISystemWindow)->getViewSize().height * thus Increase was calculated. */ int fsize = (float)(JsFontRatio + 8) * WindowRatio - 8; diff --git a/native/tools/swig-config/cocos.i b/native/tools/swig-config/cocos.i index b0b9b1d6fbe..f29ad5c0d88 100644 --- a/native/tools/swig-config/cocos.i +++ b/native/tools/swig-config/cocos.i @@ -18,6 +18,11 @@ #include "platform/FileUtils.h" #include "platform/SAXParser.h" #include "math/Vec2.h" +#include "math/Vec3.h" +#include "math/Vec4.h" +#include "math/Mat3.h" +#include "math/Mat4.h" +#include "math/Quaternion.h" #include "math/Color.h" #include "profiler/DebugRenderer.h" %} @@ -42,6 +47,15 @@ // 2. namespace is needed // +%rename("$ignore", regextarget=1, fullname=1) "cc::Vec2::.*[^2]$"; +%rename("$ignore", regextarget=1, fullname=1) "cc::Vec3::.*[^3]$"; +%rename("$ignore", regextarget=1, fullname=1) "cc::Vec3::t.*$"; +%rename("$ignore", regextarget=1, fullname=1) "cc::Vec4::.*[^4]$"; +%rename("$ignore", regextarget=1, fullname=1) "cc::Mat3::.*[^3]$"; +%rename("$ignore", regextarget=1, fullname=1) "cc::Mat4::.*[^4]$"; +%rename("$ignore", regextarget=1, fullname=1) "cc::Quaternion::.*[^n]$"; +%rename("$ignore", regextarget=1, fullname=1) "cc::Color::.*[^n]$"; + namespace cc { //%ignore ISystemWindowManager; @@ -106,6 +120,7 @@ namespace cc { // %rename(CanvasGradient) cc::ICanvasGradient; %rename(PlistParser) cc::SAXParser; +%rename(Quat) cc::Quaternion; // ----- Module Macro Section ------ @@ -166,7 +181,15 @@ namespace cc { %import "math/MathBase.h" %import "math/Geometry.h" -%import "math/Vec4.h" + +%include "math/Vec2.h" +%include "math/Color.h" +%include "math/Vec3.h" +%include "math/Vec4.h" +%include "math/Mat3.h" +%include "math/Mat4.h" +%include "math/Quaternion.h" + %import "platform/interfaces/modules/IScreen.h" %import "platform/interfaces/modules/ISystem.h" %import "platform/interfaces/modules/INetwork.h" @@ -185,8 +208,6 @@ namespace cc { %include "platform/interfaces/modules/ISystemWindowManager.h" %include "platform/FileUtils.h" %include "platform/SAXParser.h" -%include "math/Vec2.h" -%include "math/Color.h" %include "profiler/DebugRenderer.h" diff --git a/native/tools/swig-config/geometry.i b/native/tools/swig-config/geometry.i index c312a8f39bd..c542af9a0c5 100644 --- a/native/tools/swig-config/geometry.i +++ b/native/tools/swig-config/geometry.i @@ -15,6 +15,7 @@ // Insert code at the beginning of generated source file (.cpp) %{ #include "bindings/auto/jsb_geometry_auto.h" +#include "bindings/auto/jsb_cocos_auto.h" %} // ----- Ignore Section ------ diff --git a/pal/input/native/mouse-input.ts b/pal/input/native/mouse-input.ts index b8244443a3c..3baad8dfe80 100644 --- a/pal/input/native/mouse-input.ts +++ b/pal/input/native/mouse-input.ts @@ -23,7 +23,7 @@ export class MouseInputSource { const windowSize = window.getViewSize(); const dpr = screenAdapter.devicePixelRatio; const x = event.x * dpr; - const y = windowSize.y - event.y * dpr; + const y = windowSize.height - event.y * dpr; return new Vec2(x, y); } diff --git a/pal/input/native/touch-input.ts b/pal/input/native/touch-input.ts index ad0817093d1..5756c94b665 100644 --- a/pal/input/native/touch-input.ts +++ b/pal/input/native/touch-input.ts @@ -58,7 +58,7 @@ export class TouchInputSource { private _getLocation (touch: globalThis.Touch, windowSize: Size): Vec2 { const dpr = screenAdapter.devicePixelRatio; const x = touch.clientX * dpr; - const y = windowSize.y - touch.clientY * dpr; + const y = windowSize.height - touch.clientY * dpr; return new Vec2(x, y); } From 75e9b6afd0030c901ca4529331bafc3666e5aac9 Mon Sep 17 00:00:00 2001 From: zhangxin <59186205+chichinohaha@users.noreply.github.com> Date: Mon, 31 Oct 2022 18:57:10 +0800 Subject: [PATCH 115/829] Update inspector message name (#13196) * update lod inspector's message name * Update reflection-probe-footer.js * update message name --- editor/inspector/components/lodGroup/index.js | 4 ++-- editor/inspector/components/lodGroup/lod-item.js | 2 +- editor/inspector/components/reflection-probe-footer.js | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/editor/inspector/components/lodGroup/index.js b/editor/inspector/components/lodGroup/index.js index f3c47a1fe87..9a8590961fd 100644 --- a/editor/inspector/components/lodGroup/index.js +++ b/editor/inspector/components/lodGroup/index.js @@ -240,13 +240,13 @@ exports.ready = function() { } const preValue = LODs[index].value.screenUsagePercentage.value; const nextValue = LODs[index + 1] ? LODs[index + 1].value.screenUsagePercentage.value : 0; - Editor.Message.request('scene', 'lod:insert-lod', that.dump.value.uuid.value, index + 1, (preValue + nextValue) / 2, null); + Editor.Message.request('scene', 'lod-insert', that.dump.value.uuid.value, index + 1, (preValue + nextValue) / 2, null); } else if (operator === 'delete') { if (LODs.length === 1) { console.warn('At least one LOD, Can\'t delete any more'); return; } - Editor.Message.request('scene', 'lod:delete-lod', that.dump.value.uuid.value, index); + Editor.Message.request('scene', 'lod-erase', that.dump.value.uuid.value, index); } }, calculateRange(range, index) { diff --git a/editor/inspector/components/lodGroup/lod-item.js b/editor/inspector/components/lodGroup/lod-item.js index 35abaad2bd6..27630458920 100644 --- a/editor/inspector/components/lodGroup/lod-item.js +++ b/editor/inspector/components/lodGroup/lod-item.js @@ -119,7 +119,7 @@ exports.methods = { }, applyCameraSize() { const that = this; - Editor.Message.send('scene', 'lod:apply-current-camera-size', that.lodGroupId, that.index); + Editor.Message.send('scene', 'lod-apply-current-camera-size', that.lodGroupId, that.index); }, handleTriangleLabel(meshIndex) { const that = this; diff --git a/editor/inspector/components/reflection-probe-footer.js b/editor/inspector/components/reflection-probe-footer.js index 9f52db74bf6..73713c453aa 100644 --- a/editor/inspector/components/reflection-probe-footer.js +++ b/editor/inspector/components/reflection-probe-footer.js @@ -40,7 +40,7 @@ exports.update = async function(dump) { exports.ready = function() { this.$.bake.addEventListener('confirm', () => { const uuids = this.dump.value.uuid.values ?? [this.dump.value.uuid.value]; - Editor.Message.send('scene', 'reflection-probe:bake-cube-map', uuids); + Editor.Message.send('scene', 'reflection-probe-bake-cube-map', uuids); }) }; From b657754849404232ad52afbfca21b6a89555586f Mon Sep 17 00:00:00 2001 From: Zeqiang Li Date: Tue, 1 Nov 2022 13:35:06 +0800 Subject: [PATCH 116/829] fix gfx-native-test (#13187) --- .../renderer/gfx-metal/MTLCommandBuffer.mm | 23 +++++++++++-------- .../cocos/renderer/gfx-metal/MTLRenderPass.mm | 4 ++++ native/cocos/renderer/gfx-metal/MTLUtils.mm | 2 ++ 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/native/cocos/renderer/gfx-metal/MTLCommandBuffer.mm b/native/cocos/renderer/gfx-metal/MTLCommandBuffer.mm index 3bed9628349..9af87bdeda4 100644 --- a/native/cocos/renderer/gfx-metal/MTLCommandBuffer.mm +++ b/native/cocos/renderer/gfx-metal/MTLCommandBuffer.mm @@ -90,12 +90,18 @@ of this software and associated engine source code (the "Software"), a limited, bool CCMTLCommandBuffer::isRenderingEntireDrawable(const Rect &rect, const CCMTLFramebuffer *fbo) { const auto &colors = fbo->getColorTextures(); + const auto &depthStencil = fbo->getDepthStencilTexture(); bool res = true; for (size_t i = 0; i < fbo->getColorTextures().size(); ++i) { if (!(rect.x == 0 && rect.y == 0 && rect.width == colors[i]->getWidth() && rect.height == colors[i]->getHeight())) { res = false; } } + if(depthStencil) { + if (!(rect.x == 0 && rect.y == 0 && rect.width == depthStencil->getWidth() && rect.height == depthStencil->getHeight())) { + res = false; + } + } return res; } @@ -177,7 +183,9 @@ of this software and associated engine source code (the "Software"), a limited, } if (colorAttachments.empty()) { - ccMtlRenderPass->setColorAttachment(0, swapchain->colorTexture(), 0); + if(swapchain) { + ccMtlRenderPass->setColorAttachment(0, swapchain->colorTexture(), 0); + } } else { for (size_t i = 0; i < colorAttachments.size(); ++i) { auto *ccMtlTexture = static_cast(colorTextures[i]); @@ -332,20 +340,15 @@ of this software and associated engine source code (the "Software"), a limited, uint32_t ds = subpass.depthStencil; if (ds != INVALID_BINDING) { - auto iter = std::find_if(subpass.inputs.begin(), subpass.inputs.end(), [&subpass](uint32_t index){ return index >= subpass.inputs.size(); }); - if(iter != subpass.inputs.end()) { - ds = (*iter); - } else { - auto opIter = std::find_if(subpass.colors.begin(), subpass.colors.end(), [&subpass](uint32_t index){ return index >= subpass.colors.size(); }); - if(opIter != subpass.colors.end()) - ds = (*opIter); - } + auto *ccMTLTexture = static_cast(curFBO->getDepthStencilTexture()); + // if ds is provided explicitly in fbo->depthStencil, use it. const TextureList &colorTextures = curFBO->getColorTextures(); if (ds >= colorTextures.size()) { auto *ccMTLTexture = static_cast(curFBO->getDepthStencilTexture()); descriptor.depthAttachment.texture = ccMTLTexture->getMTLTexture(); - if (ccMTLTexture->getFormat() == Format::DEPTH_STENCIL) + if (ccMTLTexture->getFormat() == Format::DEPTH_STENCIL) { descriptor.stencilAttachment.texture = ccMTLTexture->getMTLTexture(); + } } else { auto *ccMTLTexture = static_cast(colorTextures[ds]); descriptor.depthAttachment.texture = ccMTLTexture->getMTLTexture(); diff --git a/native/cocos/renderer/gfx-metal/MTLRenderPass.mm b/native/cocos/renderer/gfx-metal/MTLRenderPass.mm index ad517c613a4..873955287c3 100644 --- a/native/cocos/renderer/gfx-metal/MTLRenderPass.mm +++ b/native/cocos/renderer/gfx-metal/MTLRenderPass.mm @@ -111,6 +111,10 @@ of this software and associated engine source code (the "Software"), a limited, _mtlRenderPassDescriptor.stencilAttachment.texture = texture; _mtlRenderPassDescriptor.stencilAttachment.level = level; } + + if(_renderTargetSizes.empty()) { + _renderTargetSizes.emplace_back(static_cast(texture.width), static_cast(texture.height)); + } } } // namespace gfx diff --git a/native/cocos/renderer/gfx-metal/MTLUtils.mm b/native/cocos/renderer/gfx-metal/MTLUtils.mm index 170d8bfbdd1..e7c2b90e415 100644 --- a/native/cocos/renderer/gfx-metal/MTLUtils.mm +++ b/native/cocos/renderer/gfx-metal/MTLUtils.mm @@ -953,6 +953,8 @@ void main() { #endif options.emulate_subgroups = true; options.pad_fragment_output_components = true; + // fully support + options.set_msl_version(2, 0, 0); if (isFramebufferFetchSupported()) { options.use_framebuffer_fetch_subpasses = true; #if (CC_PLATFORM == CC_PLATFORM_MACOS) From 68b82d663d53681f201fc476b0ab9a1051c1e3c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B1=9F=E6=88=98?= <40414978+PatriceJiang@users.noreply.github.com> Date: Tue, 1 Nov 2022 14:43:21 +0800 Subject: [PATCH 117/829] Add tests for event-system (#13195) --- native/CMakeLists.txt | 1 + native/cocos/core/event/EventBus.cpp | 50 ++-- native/cocos/core/event/EventBus.h | 105 ++++--- native/cocos/core/event/EventTarget.h | 173 +++++------ native/cocos/core/event/intl/EventBusMacros.h | 42 +-- native/cocos/core/event/intl/EventIntl.h | 100 +++---- native/tests/unit-test/src/core_event_bus.cpp | 212 ++++++++++++++ .../tests/unit-test/src/core_event_target.cpp | 270 ++++++++++++++++++ 8 files changed, 734 insertions(+), 219 deletions(-) create mode 100644 native/tests/unit-test/src/core_event_bus.cpp create mode 100644 native/tests/unit-test/src/core_event_target.cpp diff --git a/native/CMakeLists.txt b/native/CMakeLists.txt index 437e414d179..71cd3d4c7b8 100644 --- a/native/CMakeLists.txt +++ b/native/CMakeLists.txt @@ -390,6 +390,7 @@ cocos_source_files( cocos/core/event/EventBus.cpp cocos/core/event/EventTarget.h cocos/core/event/intl/EventIntl.h + cocos/core/event/intl/List.h cocos/core/event/intl/EventTargetMacros.h cocos/core/event/intl/EventBusMacros.h ) diff --git a/native/cocos/core/event/EventBus.cpp b/native/cocos/core/event/EventBus.cpp index db78fee1a21..e0f9c5a406a 100644 --- a/native/cocos/core/event/EventBus.cpp +++ b/native/cocos/core/event/EventBus.cpp @@ -1,8 +1,8 @@ /**************************************************************************** Copyright (c) 2022 Xiamen Yaji Software Co., Ltd. - + http://www.cocos.com - + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated engine source code (the "Software"), a limited, worldwide, royalty-free, non-assignable, revocable and non-exclusive license @@ -10,10 +10,10 @@ not use Cocos Creator software for developing other software or tools that's used for developing games. You are not granted to publish, distribute, sublicense, and/or sell copies of Cocos Creator. - + The software or tools in this License Agreement are licensed, not sold. Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. - + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -29,33 +29,35 @@ namespace cc { namespace event { -bool BusEventListenerContainer::addListener(BusEventListenerBase *lis) { +void BusEventListenerContainer::addListener(BusEventListenerBase *listener) { if (_isBroadcasting) { - intl::listAppend(&_pendingNew, lis); - return true; + intl::listAppend(&_listenersToAdd, listener->entry); + return; } - return doAddListener(lis); + intl::listAppend(&_listenerList, listener->entry); } -bool BusEventListenerContainer::removeListener(BusEventListenerBase *lis) { +void BusEventListenerContainer::removeListener(BusEventListenerBase *listener) { if (_isBroadcasting) { - intl::listAppend(&_pendingDel, lis); - return true; + _listenersToRemove.emplace_back(listener->entry); + listener->entry->listener = nullptr; + return; } - return doRemoveListener(lis); + intl::detachFromList(&_listenerList, listener->entry); + delete listener->entry; } -void BusEventListenerContainer::fixPendings() { - EVENT_LIST_LOOP_REV_BEGIN(curr, _pendingDel) - intl::detachFromList(&_pendingDel, curr); - doRemoveListener(curr); - EVENT_LIST_LOOP_REV_END(curr, _pendingDel) - EVENT_LIST_LOOP_REV_BEGIN(curr, _pendingNew) - intl::detachFromList(&_pendingNew, curr); - doAddListener(curr); - EVENT_LIST_LOOP_REV_END(curr, _pendingNew) - _pendingDel = nullptr; - _pendingNew = nullptr; +void BusEventListenerContainer::addOrRemovePendingListeners() { + for (auto &entry : _listenersToRemove) { + intl::detachFromList(&_listenerList, entry); + delete entry; + } + EVENT_LIST_LOOP_REV_BEGIN(curr, _listenersToAdd) + intl::detachFromList(&_listenersToAdd, curr); + intl::listAppend(&_listenerList, curr); + EVENT_LIST_LOOP_REV_END(curr, _listenersToAdd) + _listenersToAdd = nullptr; + _listenersToRemove.clear(); } } // namespace event -} // namespace cc \ No newline at end of file +} // namespace cc diff --git a/native/cocos/core/event/EventBus.h b/native/cocos/core/event/EventBus.h index 88eb4429950..8c6f66e8fd1 100644 --- a/native/cocos/core/event/EventBus.h +++ b/native/cocos/core/event/EventBus.h @@ -26,51 +26,70 @@ #include #include +#include #include +#include "base/std/container/vector.h" +#include "core/memop/Pool.h" #include "intl/EventIntl.h" #include "intl/List.h" namespace cc { namespace event { +class BusEventListenerBase; +template +class BusEventListenerDB; + +template +class BusEventBroadcaster; + +class BusEventListenerContainer; +struct BusEventListenerEntry { + BusEventListenerEntry *next{nullptr}; + BusEventListenerEntry *prev{nullptr}; + BusEventListenerBase *listener{nullptr}; +}; class BusEventListenerBase { -public: - BusEventListenerBase *next{nullptr}; - BusEventListenerBase *prev{nullptr}; +protected: + BusEventListenerEntry *entry{nullptr}; // NOLINT + friend class BusEventListenerContainer; }; class BusEventListenerContainer { public: - BusEventListenerContainer() = default; - virtual ~BusEventListenerContainer() = default; - bool addListener(BusEventListenerBase *); - bool removeListener(BusEventListenerBase *); - template bool broadcast(ARGS &&...args); -private: - bool doAddListener(BusEventListenerBase *listener) { - return intl::listAppend(&_arr, listener); - } - bool doRemoveListener(BusEventListenerBase *listener) { - return intl::detachFromList(&_arr, listener); - } - bool hasPending() const { - return _pendingDel || _pendingNew; - } - void fixPendings(); - protected: - BusEventListenerBase *_arr{nullptr}; - BusEventListenerBase *_pendingNew{nullptr}; - BusEventListenerBase *_pendingDel{nullptr}; + BusEventListenerContainer() = default; + virtual ~BusEventListenerContainer() = default; + void addListener(BusEventListenerBase *); + void removeListener(BusEventListenerBase *); + + bool hasPendingListeners() const { + return !_listenersToRemove.empty() || _listenersToAdd; + } + void addOrRemovePendingListeners(); + // fields + BusEventListenerEntry *_listenerList{nullptr}; + BusEventListenerEntry *_listenersToAdd{nullptr}; + ccstd::vector _listenersToRemove; int _isBroadcasting = 0; + + template + friend class BusEventListenerDB; + + template + friend class BusEventBroadcaster; + + friend class BusEventListenerBase; + template + friend class Listener; }; template -class BusEventBroadcaster : public BusEventListenerContainer { +class BusEventBroadcaster final : public BusEventListenerContainer { public: bool doBroadcast(ARGS &&...args); }; @@ -81,8 +100,8 @@ bool BusEventListenerContainer::broadcast(ARGS &&...args) { _isBroadcasting++; auto ret = static_cast(this)->doBroadcast(std::forward(args)...); _isBroadcasting--; - if (!_isBroadcasting && hasPending()) { - fixPendings(); + if (!_isBroadcasting && hasPendingListeners()) { + addOrRemovePendingListeners(); } return false; } @@ -106,9 +125,9 @@ BusEventListenerContainer *BusEventListenerDB::ctn = nullptr; template struct BusEventTrait { - using bus_type = BusType; - using return_type = R; - using argument_tuple_types = std::tuple; + using _bus_type = BusType; + using _return_type = R; + using _argument_tuple_types = std::tuple; constexpr static int ARG_COUNT = sizeof...(ARGS); }; /** @@ -117,12 +136,10 @@ struct BusEventTrait { template class Listener : public BusEventListenerBase { public: - using bus_type = typename EHandler::bus_type; - using return_type = typename EHandler::return_type; - using argument_tuple_types = typename EHandler::argument_tuple_types; - using _argument_wrapper = typename intl::TupleExtractor; + using _agurment_tuple_types = typename EHandler::_argument_tuple_types; + using _argument_wrapper = typename intl::TupleExtractor<_agurment_tuple_types>; // using func_type = typename _argument_wrapper::func_type; - using std_func_type = typename _argument_wrapper::std_func_type; + using _std_func_type = typename _argument_wrapper::std_func_type; constexpr static const char *BUS_NAME = EHandler::BUS_NAME; constexpr static const char *HANDLE_CLASS = EHandler::HANDLE_CLASS; @@ -151,15 +168,19 @@ class Listener : public BusEventListenerBase { } const char *getBusName() const { return BUS_NAME; } - const char *getHanlderName() const { return HANDLE_CLASS; } + const char *getHandlerName() const { return HANDLE_CLASS; } private: bool _enabled{true}; - std_func_type _callback; + _std_func_type _callback; + + friend class BusEventListenerContainer; }; template Listener::Listener() { + entry = new BusEventListenerEntry; + entry->listener = this; BusEventListenerDB::container()->addListener(this); } @@ -171,9 +192,11 @@ Listener::~Listener() { template bool BusEventBroadcaster::doBroadcast(ARGS &&...args) { // broadcast events to all listeners - EVENT_LIST_LOOP_BEGIN(curr, _arr) - static_cast *>(curr)->invoke(std::forward(args)...); - EVENT_LIST_LOOP_END(curr, _arr) + EVENT_LIST_LOOP_BEGIN(curr, _listenerList) + if (curr->listener) { + static_cast *>(curr->listener)->invoke(std::forward(args)...); + } + EVENT_LIST_LOOP_END(curr, _listenerList) return true; } @@ -199,9 +222,9 @@ void broadcast(ARGS &&...args) { // NOLINTNEXTLINE #define _DECLARE_BUS_EVENT_VA(BusEventClass, EventBusClass, ...) \ struct BusEventClass final : cc::event::BusEventTrait { \ - using bus_type = EventBusName_(EventBusClass); \ + using BusType = EventBusName_(EventBusClass); \ using Listener = cc::event::Listener; \ - constexpr static const char *BUS_NAME = EventBusName_(EventBusClass)::BUS_NAME; \ + constexpr static const char *BUS_NAME = BusType::BUS_NAME; \ constexpr static const char *HANDLE_CLASS = #BusEventClass; \ constexpr static size_t TypeID() { \ return cc::event::intl::hash(#BusEventClass); \ diff --git a/native/cocos/core/event/EventTarget.h b/native/cocos/core/event/EventTarget.h index c391d8e45e5..d3c0a6b5033 100644 --- a/native/cocos/core/event/EventTarget.h +++ b/native/cocos/core/event/EventTarget.h @@ -39,31 +39,33 @@ enum class EventPhaseType { CAPTUREING_PHASE = 1, AT_TARGET = 2, BUBBLING_PHASE = 3, + UNKNOWN = 4, }; struct TgtEventInfo { - EventPhaseType eventPhase; + EventPhaseType eventPhase{EventPhaseType::UNKNOWN}; bool bubbles{true}; - bool cancelable; + bool cancelable{true}; void stopPropagation() { propagationStopped = true; } - void preventDefault(); + void preventDefault() { /* TODO: */ + } bool propagationStopped{false}; }; template struct Event : TgtEventInfo { - using emitter_type = typename TgtEvent::emitter_type; - using argument_tuple_types = typename TgtEvent::argument_tuple_types; - using argument_temp_types = typename TgtEvent::argument_temp_types; - emitter_type *target; - emitter_type *currentTarget; - argument_temp_types args; + using EmitterType = typename TgtEvent::_emitter_type; + using _argument_tuple_types = typename TgtEvent::_argument_tuple_types; + using _argument_local_types = typename TgtEvent::_argument_local_types; + EmitterType *target{nullptr}; + EmitterType *currentTarget{nullptr}; + _argument_local_types args; Event() = default; - explicit Event(const argument_tuple_types &argsIn) : args(argsIn) { + explicit Event(const _argument_local_types &argsIn) : args(argsIn) { } template @@ -92,9 +94,9 @@ struct Event : TgtEventInfo { template class TgtEventTrait : public TgtEventTraitClass { public: - using emitter_type = EmitterType; - using argument_tuple_types = std::tuple; - using argument_temp_types = std::tuple>...>; + using _emitter_type = EmitterType; + using _argument_tuple_types = std::tuple; + using _argument_local_types = std::tuple>...>; constexpr static int ARG_COUNT = sizeof...(ARGS); }; @@ -147,10 +149,10 @@ class TargetEventListenerBase { template class TargetEventListener : public TargetEventListenerBase { public: - using emitter_type = typename TgtEvent::emitter_type; - using event_type = typename TgtEvent::event_type; - using persist_function_type = typename TgtEvent::persist_function_type; - explicit TargetEventListener(persist_function_type func) : _func(func) { + using _emitter_type = typename TgtEvent::_emitter_type; + using EventType = typename TgtEvent::EventType; + using _persist_function_type = typename TgtEvent::_persist_function_type; + explicit TargetEventListener(_persist_function_type func) : _func(func) { _eventTypeID = TgtEvent::TypeID(); } @@ -171,7 +173,7 @@ class TargetEventListener : public TargetEventListenerBase { return nullptr; } - void apply(emitter_type *self, event_type *evobj) { + void apply(_emitter_type *self, EventType *evobj) { switch (_state) { case RunState::ONCE_DONE: return; @@ -185,19 +187,19 @@ class TargetEventListener : public TargetEventListenerBase { } protected: - persist_function_type _func; + _persist_function_type _func; TgtMemberFnCmp *_fnCmptor{nullptr}; }; -using target_event_id_type = int32_t; +using TargetEventIdType = int32_t; template class TargetEventID final { public: - using handle_type = TgtEvent; - using id_type = target_event_id_type; + using HandleType = TgtEvent; + using IdType = TargetEventIdType; TargetEventID() = default; - TargetEventID(id_type eventId) : _eventId(eventId) {} // NOLINT + TargetEventID(IdType eventId) : _eventId(eventId) {} // NOLINT TargetEventID(const TargetEventID &) = default; TargetEventID(TargetEventID &&) noexcept = default; @@ -205,10 +207,10 @@ class TargetEventID final { TargetEventID &operator=(const TargetEventID &) = default; TargetEventID &operator=(TargetEventID &&) noexcept = default; - id_type value() { return _eventId; } + IdType value() { return _eventId; } private: - id_type _eventId{}; + IdType _eventId{}; }; class EventTarget { @@ -273,7 +275,7 @@ class EventTarget { template bool off(TargetEventID eventId) { - CC_ASSERT(!_emittingEvent); + CC_ASSERT(!_emittingEvent[TgtEvent::TypeID()]); TargetEventListenerBase *&bubblingHandlers = _bubblingHandlersMap[TgtEvent::TypeID()]; @@ -298,7 +300,11 @@ class EventTarget { } void offAll() { - CC_ASSERT(!_emittingEvent); +#if CC_DEBUG + for (auto &itr : _emittingEvent) { + CC_ASSERT(!itr.second); + } +#endif for (auto &itr : _bubblingHandlersMap) { TargetEventListenerBase *&handlers = itr.second; EVENT_LIST_LOOP_REV_BEGIN(handle, handlers) @@ -320,7 +326,7 @@ class EventTarget { template void off() { static_assert(std::is_base_of_v, "incorrect template argument"); - CC_ASSERT(!_emittingEvent); + CC_ASSERT(!_emittingEvent[TgtEvent::TypeID()]); TargetEventListenerBase *&bubblingHandlers = _bubblingHandlersMap[TgtEvent::TypeID()]; EVENT_LIST_LOOP_REV_BEGIN(handle, bubblingHandlers) @@ -342,11 +348,11 @@ class EventTarget { template void emit(ARGS &&...args) { // TODO(): statistics - using handler_type = event::TargetEventListener; - using event_type = typename TgtEvent::event_type; + using _handler_function_type = event::TargetEventListener; + using EventType = typename TgtEvent::EventType; static_assert(sizeof...(ARGS) == TgtEvent::ARG_COUNT, "Parameter count incorrect for function EventTarget::emit"); event::intl::validateParameters<0, TgtEvent, ARGS...>(std::forward(args)...); - event_type eventObj(std::make_tuple(std::forward(args)...)); + EventType eventObj(std::make_tuple(std::forward(args)...)); eventObj.target = static_cast(this); eventObj.currentTarget = static_cast(this); @@ -354,29 +360,29 @@ class EventTarget { } template void emitEvtObj(EvtObj *eventObj) { - using event_type = typename TgtEvent::event_type; - using handler_type = event::TargetEventListener; - static_assert(std::is_same_v, "Event type mismatch"); - _emittingEvent++; + using EventType = typename TgtEvent::EventType; + using _handler_function_type = event::TargetEventListener; + static_assert(std::is_same_v, "Event type mismatch"); + _emittingEvent[TgtEvent::TypeID()]++; if constexpr (useCapture) { TargetEventListenerBase *&handlers = _capturingHandlersMap[TgtEvent::TypeID()]; EVENT_LIST_LOOP_BEGIN(handle, handlers) - if (handle && handle->getEventTypeID() == TgtEvent::TypeID() && handle->isEnabled()) { - static_cast(handle)->apply(static_cast(this), eventObj); + if (handle && handle->isEnabled()) { + static_cast<_handler_function_type *>(handle)->apply(static_cast(this), eventObj); } EVENT_LIST_LOOP_END(handle, handlers); } else { TargetEventListenerBase *&handlers = _bubblingHandlersMap[TgtEvent::TypeID()]; EVENT_LIST_LOOP_BEGIN(handle, handlers) - if (handle && handle->getEventTypeID() == TgtEvent::TypeID() && handle->isEnabled()) { - static_cast(handle)->apply(static_cast(this), eventObj); + if (handle && handle->isEnabled()) { + static_cast<_handler_function_type *>(handle)->apply(static_cast(this), eventObj); } EVENT_LIST_LOOP_END(handle, handlers); } - _emittingEvent--; + _emittingEvent[TgtEvent::TypeID()]--; } template - std::enable_if_t>, void> + std::enable_if_t>, void> dispatchEvent(EvtType &eventObj) { if constexpr (Self::HAS_PARENT) { std::vector parents; @@ -427,29 +433,29 @@ class EventTarget { } template - std::enable_if_t::head>>), void> + std::enable_if_t::head>>), void> dispatchEvent(ARGS &&...args) { - using handler_type = event::TargetEventListener; - using event_type = typename TgtEvent::event_type; + using _handler_function_type = event::TargetEventListener; + using EventType = typename TgtEvent::EventType; static_assert(sizeof...(ARGS) == TgtEvent::ARG_COUNT, "Parameter count incorrect for function EventTarget::emit"); event::intl::validateParameters<0, TgtEvent, ARGS...>(std::forward(args)...); - event_type eventObj(std::make_tuple(std::forward(args)...)); + EventType eventObj(std::make_tuple(std::forward(args)...)); eventObj.target = static_cast(this); eventObj.currentTarget = static_cast(this); eventObj.eventPhase = EventPhaseType::CAPTUREING_PHASE; - dispatchEvent(eventObj); + dispatchEvent(eventObj); } template void dispatchEvent() { - using handler_type = event::TargetEventListener; - using event_type = typename TgtEvent::event_type; + using _handler_function_type = event::TargetEventListener; + using EventType = typename TgtEvent::EventType; static_assert(0 == TgtEvent::ARG_COUNT, "Parameter count incorrect for function EventTarget::emit"); - event_type eventObj; + EventType eventObj; eventObj.target = static_cast(this); eventObj.currentTarget = static_cast(this); eventObj.eventPhase = EventPhaseType::CAPTUREING_PHASE; - dispatchEvent(eventObj); + dispatchEvent(eventObj); } template @@ -472,20 +478,20 @@ class EventTarget { template bool hasEventHandler(Fn func, C *target) { using wrap_type = event::intl::TgtEvtFnTrait; - using handler_type = event::TargetEventListener; + using _handler_function_type = event::TargetEventListener; static_assert(std::is_same::value, "member function type mismatch"); TargetEventListenerBase *&bubblingHandlers = _bubblingHandlersMap[TgtEvent::TypeID()]; EVENT_LIST_LOOP_BEGIN(handle, bubblingHandlers) if (handle && handle->isEnabled() && handle->getContext() == target) { - auto *ptr = static_cast(handle); + auto *ptr = static_cast<_handler_function_type *>(handle); return ptr->getMemberFuncAddr() == func; } EVENT_LIST_LOOP_END(handle, bubblingHandlers); TargetEventListenerBase *&capturingHandlers = _capturingHandlersMap[TgtEvent::TypeID()]; EVENT_LIST_LOOP_BEGIN(handle, capturingHandlers) if (handle && handle->isEnabled() && handle->getContext() == target) { - auto *ptr = static_cast(handle); + auto *ptr = static_cast<_handler_function_type *>(handle); return ptr->getMemberFuncAddr() == func; } EVENT_LIST_LOOP_END(handle, capturingHandlers); @@ -498,46 +504,47 @@ class EventTarget { std::unordered_map _bubblingHandlersMap; std::unordered_map _capturingHandlersMap; - target_event_id_type _handlerId{1}; - int _emittingEvent{0}; + TargetEventIdType _handlerId{1}; + std::unordered_map _emittingEvent; }; } // namespace event } // namespace cc -#define TARGET_EVENT_ARG0(EventType) \ - class EventType final : public cc::event::TgtEventTrait { \ - public: \ - using base_type = cc::event::TgtEventTrait; \ - using event_type = cc::event::Event; \ - using persist_function_type = std::function; \ - using handler_type = std::function; \ - constexpr static const char *EVENT_NAME = #EventType; \ - constexpr static size_t TypeID() { \ - return cc::event::intl::hash(#EventType); \ - } \ +#define TARGET_EVENT_ARG0(EventTypeClass) \ + class EventTypeClass final : public cc::event::TgtEventTrait<_emitter_type> { \ + public: \ + using BaseType = cc::event::TgtEventTrait<_emitter_type>; \ + using EventType = cc::event::Event; \ + using EventID = cc::event::TargetEventID; \ + using _persist_function_type = std::function; \ + using _handler_function_type = std::function; \ + constexpr static const char *EVENT_NAME = #EventTypeClass; \ + constexpr static size_t TypeID() { \ + return cc::event::intl::hash(#EventTypeClass); \ + } \ }; // NOLINTNEXTLINE -#define _DECLARE_TARGET_EVENT_INTER(EventType, ...) \ - class EventType final : public cc::event::TgtEventTrait { \ - public: \ - using base_type = cc::event::TgtEventTrait; \ - using event_type = cc::event::Event; \ - using EventID = cc::event::TargetEventID; \ - using persist_function_type = std::function; \ - using handler_type = std::function; \ - constexpr static const char *EVENT_NAME = #EventType; \ - constexpr static size_t TypeID() { \ - return cc::event::intl::hash(#EventType); \ - } \ +#define _DECLARE_TARGET_EVENT_INTER(EventTypeClass, ...) \ + class EventTypeClass final : public cc::event::TgtEventTrait<_emitter_type, __VA_ARGS__> { \ + public: \ + using BaseType = cc::event::TgtEventTrait<_emitter_type, __VA_ARGS__>; \ + using EventType = cc::event::Event; \ + using EventID = cc::event::TargetEventID; \ + using _persist_function_type = std::function; \ + using _handler_function_type = std::function; \ + constexpr static const char *EVENT_NAME = #EventTypeClass; \ + constexpr static size_t TypeID() { \ + return cc::event::intl::hash(#EventTypeClass); \ + } \ }; // NOLINTNEXTLINE #define _IMPL_EVENT_TARGET_(TargetClass) \ template \ cc::event::TargetEventID on(Fn &&func, bool useCapture = false) { \ - static_assert(std::is_base_of::value, "mismatch target type"); \ + static_assert(std::is_base_of::value, "mismatch target type"); \ return EventTarget::template addEventListener(std::forward(func), useCapture, false); \ } \ template \ @@ -546,7 +553,7 @@ class EventTarget { } \ template \ cc::event::TargetEventID once(Fn &&func, bool useCapture = false) { \ - static_assert(std::is_base_of::value, "mismatch target type"); \ + static_assert(std::is_base_of::value, "mismatch target type"); \ return EventTarget::template addEventListener(std::forward(func), useCapture, true); \ } \ template \ @@ -555,7 +562,7 @@ class EventTarget { } \ template \ void off() { \ - static_assert(std::is_base_of::value, "mismatch target type"); \ + static_assert(std::is_base_of::value, "mismatch target type"); \ EventTarget::template off(); \ } \ \ @@ -566,7 +573,7 @@ class EventTarget { \ template \ void emit(ARGS &&...args) { \ - static_assert(std::is_base_of::value, "mismatch target type"); \ + static_assert(std::is_base_of::value, "mismatch target type"); \ EventTarget::template emit(std::forward(args)...); \ } \ template \ @@ -592,7 +599,7 @@ public: \ _IMPL_EVENT_TARGET_(TargetClass) #define DECLARE_TARGET_EVENT_BEGIN(TargetClass) \ - using EmitterType = TargetClass; + using _emitter_type = TargetClass; #define DECLARE_TARGET_EVENT_END() diff --git a/native/cocos/core/event/intl/EventBusMacros.h b/native/cocos/core/event/intl/EventBusMacros.h index e013de71257..736dbacb331 100644 --- a/native/cocos/core/event/intl/EventBusMacros.h +++ b/native/cocos/core/event/intl/EventBusMacros.h @@ -2,7 +2,7 @@ #define DECLARE_BUS_EVENT_ARG0(BusEventClass, EventBusClass) \ struct BusEventClass final : cc::event::BusEventTrait { \ - using bus_type = EventBusName_(EventBusClass); \ + using BusType = EventBusName_(EventBusClass); \ using Listener = cc::event::Listener; \ constexpr static const char *BUS_NAME = EventBusName_(EventBusClass)::BUS_NAME; \ constexpr static const char *HANDLE_CLASS = #BusEventClass; \ @@ -16,7 +16,7 @@ #define DECLARE_BUS_EVENT_ARG1(BusEventClass, EventBusClass, ArgType0) \ struct BusEventClass final : cc::event::BusEventTrait { \ - using bus_type = EventBusName_(EventBusClass); \ + using BusType = EventBusName_(EventBusClass); \ using Listener = cc::event::Listener; \ constexpr static const char *BUS_NAME = EventBusName_(EventBusClass)::BUS_NAME; \ constexpr static const char *HANDLE_CLASS = #BusEventClass; \ @@ -30,7 +30,7 @@ #define DECLARE_BUS_EVENT_ARG2(BusEventClass, EventBusClass, ArgType0, ArgType1) \ struct BusEventClass final : cc::event::BusEventTrait { \ - using bus_type = EventBusName_(EventBusClass); \ + using BusType = EventBusName_(EventBusClass); \ using Listener = cc::event::Listener; \ constexpr static const char *BUS_NAME = EventBusName_(EventBusClass)::BUS_NAME; \ constexpr static const char *HANDLE_CLASS = #BusEventClass; \ @@ -44,7 +44,7 @@ #define DECLARE_BUS_EVENT_ARG3(BusEventClass, EventBusClass, ArgType0, ArgType1, ArgType2) \ struct BusEventClass final : cc::event::BusEventTrait { \ - using bus_type = EventBusName_(EventBusClass); \ + using BusType = EventBusName_(EventBusClass); \ using Listener = cc::event::Listener; \ constexpr static const char *BUS_NAME = EventBusName_(EventBusClass)::BUS_NAME; \ constexpr static const char *HANDLE_CLASS = #BusEventClass; \ @@ -58,7 +58,7 @@ #define DECLARE_BUS_EVENT_ARG4(BusEventClass, EventBusClass, ArgType0, ArgType1, ArgType2, ArgType3) \ struct BusEventClass final : cc::event::BusEventTrait { \ - using bus_type = EventBusName_(EventBusClass); \ + using BusType = EventBusName_(EventBusClass); \ using Listener = cc::event::Listener; \ constexpr static const char *BUS_NAME = EventBusName_(EventBusClass)::BUS_NAME; \ constexpr static const char *HANDLE_CLASS = #BusEventClass; \ @@ -72,7 +72,7 @@ #define DECLARE_BUS_EVENT_ARG5(BusEventClass, EventBusClass, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4) \ struct BusEventClass final : cc::event::BusEventTrait { \ - using bus_type = EventBusName_(EventBusClass); \ + using BusType = EventBusName_(EventBusClass); \ using Listener = cc::event::Listener; \ constexpr static const char *BUS_NAME = EventBusName_(EventBusClass)::BUS_NAME; \ constexpr static const char *HANDLE_CLASS = #BusEventClass; \ @@ -86,7 +86,7 @@ #define DECLARE_BUS_EVENT_ARG6(BusEventClass, EventBusClass, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5) \ struct BusEventClass final : cc::event::BusEventTrait { \ - using bus_type = EventBusName_(EventBusClass); \ + using BusType = EventBusName_(EventBusClass); \ using Listener = cc::event::Listener; \ constexpr static const char *BUS_NAME = EventBusName_(EventBusClass)::BUS_NAME; \ constexpr static const char *HANDLE_CLASS = #BusEventClass; \ @@ -100,7 +100,7 @@ #define DECLARE_BUS_EVENT_ARG7(BusEventClass, EventBusClass, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6) \ struct BusEventClass final : cc::event::BusEventTrait { \ - using bus_type = EventBusName_(EventBusClass); \ + using BusType = EventBusName_(EventBusClass); \ using Listener = cc::event::Listener; \ constexpr static const char *BUS_NAME = EventBusName_(EventBusClass)::BUS_NAME; \ constexpr static const char *HANDLE_CLASS = #BusEventClass; \ @@ -114,7 +114,7 @@ #define DECLARE_BUS_EVENT_ARG8(BusEventClass, EventBusClass, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7) \ struct BusEventClass final : cc::event::BusEventTrait { \ - using bus_type = EventBusName_(EventBusClass); \ + using BusType = EventBusName_(EventBusClass); \ using Listener = cc::event::Listener; \ constexpr static const char *BUS_NAME = EventBusName_(EventBusClass)::BUS_NAME; \ constexpr static const char *HANDLE_CLASS = #BusEventClass; \ @@ -128,7 +128,7 @@ #define DECLARE_BUS_EVENT_ARG9(BusEventClass, EventBusClass, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8) \ struct BusEventClass final : cc::event::BusEventTrait { \ - using bus_type = EventBusName_(EventBusClass); \ + using BusType = EventBusName_(EventBusClass); \ using Listener = cc::event::Listener; \ constexpr static const char *BUS_NAME = EventBusName_(EventBusClass)::BUS_NAME; \ constexpr static const char *HANDLE_CLASS = #BusEventClass; \ @@ -142,7 +142,7 @@ #define DECLARE_BUS_EVENT_ARG10(BusEventClass, EventBusClass, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9) \ struct BusEventClass final : cc::event::BusEventTrait { \ - using bus_type = EventBusName_(EventBusClass); \ + using BusType = EventBusName_(EventBusClass); \ using Listener = cc::event::Listener; \ constexpr static const char *BUS_NAME = EventBusName_(EventBusClass)::BUS_NAME; \ constexpr static const char *HANDLE_CLASS = #BusEventClass; \ @@ -156,7 +156,7 @@ #define DECLARE_BUS_EVENT_ARG11(BusEventClass, EventBusClass, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9, ArgType10) \ struct BusEventClass final : cc::event::BusEventTrait { \ - using bus_type = EventBusName_(EventBusClass); \ + using BusType = EventBusName_(EventBusClass); \ using Listener = cc::event::Listener; \ constexpr static const char *BUS_NAME = EventBusName_(EventBusClass)::BUS_NAME; \ constexpr static const char *HANDLE_CLASS = #BusEventClass; \ @@ -170,7 +170,7 @@ #define DECLARE_BUS_EVENT_ARG12(BusEventClass, EventBusClass, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9, ArgType10, ArgType11) \ struct BusEventClass final : cc::event::BusEventTrait { \ - using bus_type = EventBusName_(EventBusClass); \ + using BusType = EventBusName_(EventBusClass); \ using Listener = cc::event::Listener; \ constexpr static const char *BUS_NAME = EventBusName_(EventBusClass)::BUS_NAME; \ constexpr static const char *HANDLE_CLASS = #BusEventClass; \ @@ -184,7 +184,7 @@ #define DECLARE_BUS_EVENT_ARG13(BusEventClass, EventBusClass, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9, ArgType10, ArgType11, ArgType12) \ struct BusEventClass final : cc::event::BusEventTrait { \ - using bus_type = EventBusName_(EventBusClass); \ + using BusType = EventBusName_(EventBusClass); \ using Listener = cc::event::Listener; \ constexpr static const char *BUS_NAME = EventBusName_(EventBusClass)::BUS_NAME; \ constexpr static const char *HANDLE_CLASS = #BusEventClass; \ @@ -198,7 +198,7 @@ #define DECLARE_BUS_EVENT_ARG14(BusEventClass, EventBusClass, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9, ArgType10, ArgType11, ArgType12, ArgType13) \ struct BusEventClass final : cc::event::BusEventTrait { \ - using bus_type = EventBusName_(EventBusClass); \ + using BusType = EventBusName_(EventBusClass); \ using Listener = cc::event::Listener; \ constexpr static const char *BUS_NAME = EventBusName_(EventBusClass)::BUS_NAME; \ constexpr static const char *HANDLE_CLASS = #BusEventClass; \ @@ -212,7 +212,7 @@ #define DECLARE_BUS_EVENT_ARG15(BusEventClass, EventBusClass, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9, ArgType10, ArgType11, ArgType12, ArgType13, ArgType14) \ struct BusEventClass final : cc::event::BusEventTrait { \ - using bus_type = EventBusName_(EventBusClass); \ + using BusType = EventBusName_(EventBusClass); \ using Listener = cc::event::Listener; \ constexpr static const char *BUS_NAME = EventBusName_(EventBusClass)::BUS_NAME; \ constexpr static const char *HANDLE_CLASS = #BusEventClass; \ @@ -226,7 +226,7 @@ #define DECLARE_BUS_EVENT_ARG16(BusEventClass, EventBusClass, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9, ArgType10, ArgType11, ArgType12, ArgType13, ArgType14, ArgType15) \ struct BusEventClass final : cc::event::BusEventTrait { \ - using bus_type = EventBusName_(EventBusClass); \ + using BusType = EventBusName_(EventBusClass); \ using Listener = cc::event::Listener; \ constexpr static const char *BUS_NAME = EventBusName_(EventBusClass)::BUS_NAME; \ constexpr static const char *HANDLE_CLASS = #BusEventClass; \ @@ -240,7 +240,7 @@ #define DECLARE_BUS_EVENT_ARG17(BusEventClass, EventBusClass, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9, ArgType10, ArgType11, ArgType12, ArgType13, ArgType14, ArgType15, ArgType16) \ struct BusEventClass final : cc::event::BusEventTrait { \ - using bus_type = EventBusName_(EventBusClass); \ + using BusType = EventBusName_(EventBusClass); \ using Listener = cc::event::Listener; \ constexpr static const char *BUS_NAME = EventBusName_(EventBusClass)::BUS_NAME; \ constexpr static const char *HANDLE_CLASS = #BusEventClass; \ @@ -254,7 +254,7 @@ #define DECLARE_BUS_EVENT_ARG18(BusEventClass, EventBusClass, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9, ArgType10, ArgType11, ArgType12, ArgType13, ArgType14, ArgType15, ArgType16, ArgType17) \ struct BusEventClass final : cc::event::BusEventTrait { \ - using bus_type = EventBusName_(EventBusClass); \ + using BusType = EventBusName_(EventBusClass); \ using Listener = cc::event::Listener; \ constexpr static const char *BUS_NAME = EventBusName_(EventBusClass)::BUS_NAME; \ constexpr static const char *HANDLE_CLASS = #BusEventClass; \ @@ -268,7 +268,7 @@ #define DECLARE_BUS_EVENT_ARG19(BusEventClass, EventBusClass, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9, ArgType10, ArgType11, ArgType12, ArgType13, ArgType14, ArgType15, ArgType16, ArgType17, ArgType18) \ struct BusEventClass final : cc::event::BusEventTrait { \ - using bus_type = EventBusName_(EventBusClass); \ + using BusType = EventBusName_(EventBusClass); \ using Listener = cc::event::Listener; \ constexpr static const char *BUS_NAME = EventBusName_(EventBusClass)::BUS_NAME; \ constexpr static const char *HANDLE_CLASS = #BusEventClass; \ @@ -282,7 +282,7 @@ #define DECLARE_BUS_EVENT_ARG20(BusEventClass, EventBusClass, ArgType0, ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9, ArgType10, ArgType11, ArgType12, ArgType13, ArgType14, ArgType15, ArgType16, ArgType17, ArgType18, ArgType19) \ struct BusEventClass final : cc::event::BusEventTrait { \ - using bus_type = EventBusName_(EventBusClass); \ + using BusType = EventBusName_(EventBusClass); \ using Listener = cc::event::Listener; \ constexpr static const char *BUS_NAME = EventBusName_(EventBusClass)::BUS_NAME; \ constexpr static const char *HANDLE_CLASS = #BusEventClass; \ diff --git a/native/cocos/core/event/intl/EventIntl.h b/native/cocos/core/event/intl/EventIntl.h index ee8720eae60..6452bc081d0 100644 --- a/native/cocos/core/event/intl/EventIntl.h +++ b/native/cocos/core/event/intl/EventIntl.h @@ -1,8 +1,8 @@ /**************************************************************************** Copyright (c) 2022 Xiamen Yaji Software Co., Ltd. - + http://www.cocos.com - + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated engine source code (the "Software"), a limited, worldwide, royalty-free, non-assignable, revocable and non-exclusive license @@ -10,10 +10,10 @@ not use Cocos Creator software for developing other software or tools that's used for developing games. You are not granted to publish, distribute, sublicense, and/or sell copies of Cocos Creator. - + The software or tools in this License Agreement are licensed, not sold. Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. - + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -78,7 +78,7 @@ constexpr bool validateParameters() { template constexpr bool validateParameters(Head && /*unused*/) { - using element_t = std::remove_reference_t>; + using element_t = std::remove_reference_t>; using head = std::remove_reference_t; constexpr bool assignable = std::is_assignable_v || std::is_convertible_v; constexpr bool ret = assignable; @@ -175,7 +175,7 @@ struct TgtEvtFnTrait { template static constexpr bool accept() { if constexpr (sizeof...(ARGS) == 0) { - using event_type = typename TgtEvent::event_type; + using event_type = typename TgtEvent::EventType; return std::is_same_v; } else { return false; @@ -183,9 +183,9 @@ struct TgtEvtFnTrait { } template static auto wrap(src_func_type func) { - using event_type = typename TgtEvent::event_type; - using persist_function_type = typename TgtEvent::persist_function_type; - using emitter_type = typename TgtEvent::emitter_type; + using event_type = typename TgtEvent::EventType; + using persist_function_type = typename TgtEvent::_persist_function_type; + using emitter_type = typename TgtEvent::_emitter_type; persist_function_type ret; if constexpr (accept()) { ret = [&func](emitter_type * /*self*/, event_type *event) { @@ -208,7 +208,7 @@ struct TgtEvtFnTrait { template static constexpr bool accept() { if constexpr (sizeof...(ARGS) == 0) { - using event_type = typename TgtEvent::event_type; + using event_type = typename TgtEvent::EventType; return std::is_same_v; } else { return false; @@ -216,9 +216,9 @@ struct TgtEvtFnTrait { } template static auto wrap(src_func_type func) { - using event_type = typename TgtEvent::event_type; - using emitter_type = typename TgtEvent::emitter_type; - using persist_function_type = typename TgtEvent::persist_function_type; + using event_type = typename TgtEvent::EventType; + using emitter_type = typename TgtEvent::_emitter_type; + using persist_function_type = typename TgtEvent::_persist_function_type; persist_function_type ret; if constexpr (accept()) { ret = [func](emitter_type * /*self*/, event_type *event) { @@ -239,7 +239,7 @@ struct TgtEvtFnTrait { template static constexpr bool accept() { if constexpr (sizeof...(ARGS) == 0) { - using event_type = typename TgtEvent::event_type; + using event_type = typename TgtEvent::EventType; return std::is_same_v; } else { return false; @@ -247,18 +247,18 @@ struct TgtEvtFnTrait { } template static auto wrap(src_func_type func) { - using event_type = typename TgtEvent::event_type; - using persist_function_type = typename TgtEvent::persist_function_type; - using emitter_type = typename TgtEvent::emitter_type; + using EventType = typename TgtEvent::EventType; + using persist_function_type = typename TgtEvent::_persist_function_type; + using emitter_type = typename TgtEvent::_emitter_type; persist_function_type ret; if constexpr (accept()) { - auto ret2 = [func](emitter_type * /*self*/, event_type *event) { + auto ret2 = [func](emitter_type * /*self*/, EventType *event) { func(event); }; ret = ret2; } else { static_assert(std::is_same_v, "mismatch emitter type"); - ret = [func](emitter_type *self, event_type *event) { + ret = [func](emitter_type *self, EventType *event) { return std::apply([self, func](auto &&...args) { func(self, args...); }, event->args); }; } @@ -273,7 +273,7 @@ struct TgtEvtFnTrait { template static constexpr bool accept() { if constexpr (sizeof...(ARGS) == 0) { - using event_type = typename TgtEvent::event_type; + using event_type = typename TgtEvent::EventType; return std::is_same_v; } else { return false; @@ -281,9 +281,9 @@ struct TgtEvtFnTrait { } template static auto wrap(src_func_type func) { - using event_type = typename TgtEvent::event_type; - using emitter_type = typename TgtEvent::emitter_type; - using persist_function_type = typename TgtEvent::persist_function_type; + using event_type = typename TgtEvent::EventType; + using emitter_type = typename TgtEvent::_emitter_type; + using persist_function_type = typename TgtEvent::_persist_function_type; persist_function_type ret; if constexpr (accept()) { ret = [&func](emitter_type * /*self*/, event_type *event) { @@ -307,7 +307,7 @@ struct TgtEvtFnTrait> { template static constexpr bool accept() { if constexpr (sizeof...(ARGS) == 0) { - using event_type = typename TgtEvent::event_type; + using event_type = typename TgtEvent::EventType; return std::is_same_v; } else { return false; @@ -315,9 +315,9 @@ struct TgtEvtFnTrait> { } template static auto wrap(src_func_type func) { - using event_type = typename TgtEvent::event_type; - using emitter_type = typename TgtEvent::emitter_type; - using persist_function_type = typename TgtEvent::persist_function_type; + using event_type = typename TgtEvent::EventType; + using emitter_type = typename TgtEvent::_emitter_type; + using persist_function_type = typename TgtEvent::_persist_function_type; persist_function_type ret; if constexpr (accept()) { ret = [&func](emitter_type * /*self*/, event_type *event) { @@ -340,20 +340,20 @@ struct TgtEvtFnTrait> { template static constexpr bool accept() { if constexpr (sizeof...(ARGS) == 0) { - using event_type = typename TgtEvent::event_type; - return std::is_same_v; + using EventType = typename TgtEvent::EventType; + return std::is_same_v; } else { return false; } } template static auto wrap(src_func_type func) { - using event_type = typename TgtEvent::event_type; - using emitter_type = typename TgtEvent::emitter_type; - using persist_function_type = typename TgtEvent::persist_function_type; + using event_type = typename TgtEvent::EventType; + using emitter_type = typename TgtEvent::_emitter_type; + using persist_function_type = typename TgtEvent::_persist_function_type; persist_function_type ret; if constexpr (accept()) { - ret = [&func](emitter_type * /*self*/, event_type *event) { + ret = [func](emitter_type * /*self*/, event_type *event) { func(event); }; } else { @@ -374,7 +374,7 @@ struct TgtEvtFnTrait { template static constexpr bool accept() { if constexpr (sizeof...(ARGS) == 1) { - using event_type = typename TgtEvent::event_type; + using event_type = typename TgtEvent::EventType; return std::is_same_v; } else { return false; @@ -383,9 +383,9 @@ struct TgtEvtFnTrait { template static auto wrap(src_func_type func) { - using event_type = typename TgtEvent::event_type; - using emitter_type = typename TgtEvent::emitter_type; - using persist_function_type = typename TgtEvent::persist_function_type; + using event_type = typename TgtEvent::EventType; + using emitter_type = typename TgtEvent::_emitter_type; + using persist_function_type = typename TgtEvent::_persist_function_type; persist_function_type ret; static_assert(std::is_same_v, "mismatch emitter type"); if constexpr (accept()) { @@ -401,9 +401,9 @@ struct TgtEvtFnTrait { } template static auto wrapWithContext(src_func_type func, context_type *ctx) { - using emitter_type = typename TgtEvent::emitter_type; - using event_type = typename TgtEvent::event_type; - using persist_function_type = typename TgtEvent::persist_function_type; + using emitter_type = typename TgtEvent::_emitter_type; + using event_type = typename TgtEvent::EventType; + using persist_function_type = typename TgtEvent::_persist_function_type; persist_function_type ret; if constexpr (accept()) { ret = [func, ctx](emitter_type * /*self*/, event_type *event) { @@ -427,7 +427,7 @@ struct TgtEvtFnTrait { template static constexpr bool accept() { if constexpr (sizeof...(ARGS) == 1) { - using event_type = typename TgtEvent::event_type; + using event_type = typename TgtEvent::EventType; return std::is_same_v; } else { return false; @@ -436,17 +436,17 @@ struct TgtEvtFnTrait { template static auto wrap(src_func_type func) { - using event_type = typename TgtEvent::event_type; - using persist_function_type = typename TgtEvent::persist_function_type; - using emitter_type = typename TgtEvent::emitter_type; + using EventType = typename TgtEvent::EventType; + using persist_function_type = typename TgtEvent::_persist_function_type; + using emitter_type = typename TgtEvent::_emitter_type; persist_function_type ret; static_assert(std::is_same_v, "mismatch emitter type"); if constexpr (accept()) { - ret = [&func](context_type *self, event_type *event) { + ret = [&func](context_type *self, EventType *event) { (self->*func)(event); }; } else { - ret = [&func](context_type *self, event_type *event) { + ret = [&func](context_type *self, EventType *event) { return std::apply([self, func](auto &&...args) { (self->*func)(args...); }, event->args); }; } @@ -455,9 +455,9 @@ struct TgtEvtFnTrait { template static auto wrapWithContext(src_func_type func, context_type *ctx) { - using emitter_type = typename TgtEvent::emitter_type; - using event_type = typename TgtEvent::event_type; - using persist_function_type = typename TgtEvent::persist_function_type; + using emitter_type = typename TgtEvent::_emitter_type; + using event_type = typename TgtEvent::EventType; + using persist_function_type = typename TgtEvent::_persist_function_type; persist_function_type ret = [func, ctx](emitter_type * /*self*/, event_type *event) { return std::apply([ctx, func](auto &&...args) { (ctx->*func)(args...); }, event->args); }; @@ -467,4 +467,4 @@ struct TgtEvtFnTrait { } // namespace intl } // namespace event -} // namespace cc \ No newline at end of file +} // namespace cc diff --git a/native/tests/unit-test/src/core_event_bus.cpp b/native/tests/unit-test/src/core_event_bus.cpp new file mode 100644 index 00000000000..373cb6b02c4 --- /dev/null +++ b/native/tests/unit-test/src/core_event_bus.cpp @@ -0,0 +1,212 @@ +#include "core/event/EventBus.h" +#include "utils.h" +namespace { +DECLARE_EVENT_BUS(Test1) +DECLARE_BUS_EVENT_ARG0(BusEvent0_Test1, Test1) +DECLARE_BUS_EVENT_ARG1(BusEvent1_Test1, Test1, int) +DECLARE_BUS_EVENT_ARG2(BusEvent2_Test1, Test1, int, const char *) +DECLARE_BUS_EVENT_ARG3(BusEvent3_Test1, Test1, int, char *, float) + +DECLARE_EVENT_BUS(Test2) +DECLARE_BUS_EVENT_ARG0(BusEvent0_Test2, Test2) +DECLARE_BUS_EVENT_ARG1(BusEvent1_Test2, Test2, int) +DECLARE_BUS_EVENT_ARG2(BusEvent2_Test2, Test2, int, const char *) +DECLARE_BUS_EVENT_ARG3(BusEvent3_Test2, Test2, int, char *, float) +struct Test1_ListenerT { + static int handleArg2_arg0; + static const char *handleArg2_arg1; + static int handleArg3_arg0; + static char *handleArg3_arg1; + static float handleArg3_arg2; + static void handleArg2(int arg0, const char *arg1) { + handleArg2_arg0 = arg0; + handleArg2_arg1 = arg1; + } + static void handleArg3(int arg0, char *arg1, float arg2) { + handleArg3_arg0 = arg0; + handleArg3_arg1 = arg1; + handleArg3_arg2 = arg2; + } +}; +int Test1_ListenerT::handleArg2_arg0 = 0; +const char *Test1_ListenerT::handleArg2_arg1 = nullptr; +int Test1_ListenerT::handleArg3_arg0 = 0; +char *Test1_ListenerT::handleArg3_arg1 = nullptr; +float Test1_ListenerT::handleArg3_arg2 = 0; + +static int handleArg2_value1 = 0; +static const char *handleArg2_value2 = nullptr; +static void handleArg2(int arg0, const char *arg1) { + handleArg2_value1 = arg0; + handleArg2_value2 = arg1; +} + +} // namespace +TEST(eventBus, test_stack_allocated_listener) { + BusEvent0_Test1::Listener listener; + int listenerTriggerTimes = 0; + listener.bind([&]() { + listenerTriggerTimes++; + }); + BusEvent0_Test1::broadcast(); + logLabel = "listener trigger 1 time"; + EXPECT_EQ(listenerTriggerTimes, 1); + + logLabel = "listener trigger 2 time"; + cc::event::broadcast(); + EXPECT_EQ(listenerTriggerTimes, 2); + + logLabel = "listener disabled"; + listener.disable(); + cc::event::broadcast(); + EXPECT_EQ(listenerTriggerTimes, 2); + + logLabel = "listener enabled"; + listener.enable(); + cc::event::broadcast(); + EXPECT_EQ(listenerTriggerTimes, 3); +} + +TEST(eventBus, test_heap_allocated_listener) { + BusEvent0_Test1::Listener *listener = new BusEvent0_Test1::Listener; + int listenerTriggerTimes = 0; + listener->bind([&]() { + listenerTriggerTimes++; + }); + BusEvent0_Test1::broadcast(); + logLabel = "listener trigger 1 time"; + EXPECT_EQ(listenerTriggerTimes, 1); + + logLabel = "listener trigger 2 time"; + cc::event::broadcast(); + EXPECT_EQ(listenerTriggerTimes, 2); + + delete listener; + logLabel = "listener trigger remain 2 time after deleted"; + cc::event::broadcast(); + EXPECT_EQ(listenerTriggerTimes, 2); +} + +TEST(eventBus, test_bind_methods) { + BusEvent2_Test1::Listener listenerArg2; + BusEvent2_Test1::Listener listenerArg2Copy; + BusEvent3_Test1::Listener listenerArg3; + + int listenerTriggerTimes = 0; + const char *staticMessage = " hello event bus"; + listenerArg2.bind([&](int, const char *) { + listenerTriggerTimes++; + }); + BusEvent2_Test1::broadcast(1, staticMessage); + EXPECT_EQ(listenerTriggerTimes, 1); + + logLabel = "bind static method, override"; + listenerArg2.bind(&Test1_ListenerT::handleArg2); + listenerArg2Copy.bind(&handleArg2); + BusEvent2_Test1::broadcast(1, staticMessage); + EXPECT_EQ(Test1_ListenerT::handleArg2_arg0, 1); + EXPECT_EQ(Test1_ListenerT::handleArg2_arg1, staticMessage); + EXPECT_EQ(handleArg2_value1, 1); + EXPECT_EQ(handleArg2_value2, staticMessage); + EXPECT_EQ(listenerTriggerTimes, 1); // should not update + + logLabel = "broadcast arg3"; + char message[6] = "world"; + listenerArg3.bind(&Test1_ListenerT::handleArg3); + BusEvent3_Test1::broadcast(1, message, 3.5F); + EXPECT_EQ(Test1_ListenerT::handleArg3_arg0, 1); + EXPECT_EQ(Test1_ListenerT::handleArg3_arg1, message); + EXPECT_EQ(Test1_ListenerT::handleArg3_arg2, 3.5F); +} + +TEST(eventBus, test_multiple_listeners) { + BusEvent0_Test1::Listener listener1; + BusEvent0_Test1::Listener listener2; + int listener1_TriggerTimes = 0; + int listener2_TriggerTimes = 0; + listener1.bind([&]() { + listener1_TriggerTimes++; + }); + listener2.bind([&]() { + listener2_TriggerTimes++; + }); + logLabel = "trigger 1 time"; + BusEvent0_Test1::broadcast(); + EXPECT_EQ(listener1_TriggerTimes, 1); + EXPECT_EQ(listener2_TriggerTimes, 1); + logLabel = "trigger 1 time"; + BusEvent0_Test1::broadcast(); + EXPECT_EQ(listener1_TriggerTimes, 2); + EXPECT_EQ(listener2_TriggerTimes, 2); +} + +TEST(eventBus, create_event_bus_in_listener) { + std::unique_ptr listenerStatic_A1 = std::make_unique(); + std::vector> listenerDyn_A0; + std::vector> listenerDyn_A1; + int listenerStaticTriggerTimes = 0; + int sub0_ListenerStaticTriggerTimes = 0; + int sub1_ListenerStaticTriggerTimes = 0; + listenerStatic_A1->bind([&](int n) { + listenerStaticTriggerTimes += 1; + for (int i = 0; i < n; i++) { + listenerDyn_A0.emplace_back(std::make_unique()); + listenerDyn_A1.emplace_back(std::make_unique()); + listenerDyn_A0.back()->bind([&]() { + sub0_ListenerStaticTriggerTimes++; + }); + listenerDyn_A1.back()->bind([&](int n) { + sub1_ListenerStaticTriggerTimes++; + }); + } + // BusEvent1_Test2::broadcast(3); // dead loop + BusEvent0_Test2::broadcast(); + }); + logLabel = "create sub listeners x2"; + BusEvent1_Test2::broadcast(2); + EXPECT_EQ(listenerStaticTriggerTimes, 1); + EXPECT_EQ(sub0_ListenerStaticTriggerTimes, 2); + EXPECT_EQ(sub1_ListenerStaticTriggerTimes, 0); // new listenerDyn_A1 listeners would not be triggers + + logLabel = "create sub listeners x2"; + listenerStatic_A1.reset(); + BusEvent1_Test2::broadcast(5); + BusEvent0_Test2::broadcast(); + EXPECT_EQ(listenerStaticTriggerTimes, 1); + EXPECT_EQ(sub0_ListenerStaticTriggerTimes, 2 + 2); + EXPECT_EQ(sub1_ListenerStaticTriggerTimes, 2); +} + +TEST(eventBus, del_event_bus_in_listener) { + BusEvent1_Test2::Listener *listener_1 = new BusEvent1_Test2::Listener; + BusEvent1_Test2::Listener *listener_2 = new BusEvent1_Test2::Listener; + BusEvent1_Test2::Listener *listener_3 = new BusEvent1_Test2::Listener; + int listener1_cnt = 0; + int listener2_cnt = 0; + int listener3_cnt = 0; + listener_1->bind([&](int x) { + listener1_cnt++; + }); + listener_2->bind([&](int x) { + listener2_cnt++; + }); + listener_3->bind([&](int x) { + listener3_cnt++; + if (listener_2) { + delete listener_2; + listener_2 = nullptr; + } + }); + BusEvent1_Test2::broadcast(3); + EXPECT_EQ(listener1_cnt, 1); + EXPECT_EQ(listener2_cnt, 1); + EXPECT_EQ(listener2_cnt, 1); + BusEvent1_Test2::broadcast(3); + EXPECT_EQ(listener1_cnt, 2); + EXPECT_EQ(listener2_cnt, 1); // should not run again + EXPECT_EQ(listener3_cnt, 2); + + delete listener_1; + // delete listener_2; + delete listener_3; +} diff --git a/native/tests/unit-test/src/core_event_target.cpp b/native/tests/unit-test/src/core_event_target.cpp new file mode 100644 index 00000000000..b2d4aea7ba8 --- /dev/null +++ b/native/tests/unit-test/src/core_event_target.cpp @@ -0,0 +1,270 @@ + +#include "core/event/EventTarget.h" +#include "utils.h" +namespace { +class TestNode : public cc::event::EventTarget { + IMPL_EVENT_TARGET(TestNode) + DECLARE_TARGET_EVENT_BEGIN(TestNode) + TARGET_EVENT_ARG0(Init) + TARGET_EVENT_ARG1(Update, float) + TARGET_EVENT_ARG0(Stop) + TARGET_EVENT_ARG4(Deinit, int, float, const std::string &, std::string &); + DECLARE_TARGET_EVENT_END() +public: + void onInit() { _init++; } + void onUpdate(float) { _update++; } + void onStop() { _stop++; } + void onDeinit(int, float, const std::string &, std::string &) { _deinit++; } + + static void onInitS(TestNode *emitter); + + int _init = 0; + int _update = 0; + int _stop = 0; + int _deinit = 0; +}; + +int TestNode_init = 0; + +void TestNode::onInitS(TestNode *emitter) { TestNode_init++; } + +class TestSubNode : public TestNode { +public: +}; + +struct LinkNode { + LinkNode *next{nullptr}; + LinkNode *prev{nullptr}; +}; + +class TestNodeWithParent : public cc::event::EventTarget { + IMPL_EVENT_TARGET_WITH_PARENT(TestNodeWithParent, getParent) + DECLARE_TARGET_EVENT_BEGIN(TestNodeWithParent) + TARGET_EVENT_ARG0(Init) + TARGET_EVENT_ARG1(Update, float) + TARGET_EVENT_ARG0(Stop) + TARGET_EVENT_ARG4(Deinit, int, float, const std::string &, std::string &); + DECLARE_TARGET_EVENT_END() +public: + void onInit() { _init++; } + void onUpdate(float) { _update++; } + void onStop() { _stop++; } + void onDeinit(int, float, const std::string &, std::string &) { _deinit++; } + + TestNodeWithParent *getParent() { + return parent; + } + + static void onInitS(TestNodeWithParent *emitter); + + int _init = 0; + int _update = 0; + int _stop = 0; + int _deinit = 0; + + TestNodeWithParent *parent{nullptr}; +}; +} // namespace + +TEST(eventTarget, test_basic_event_target) { + TestNode node; + auto idInit = node.on(&TestNode::onInit); + auto idUpdate = node.on(&TestNode::onUpdate); + auto idStop = node.on(&TestNode::onStop); + auto idDeinit = node.on(&TestNode::onDeinit); + + auto idInitS = node.on(&TestNode::onInitS); + + int TestNode_Init_Lambda = 0; + auto idInitLambda = node.on([&](TestNode *emitter) { + TestNode_Init_Lambda++; + }); + + node.emit(); + node.emit(0.1666); + node.emit(); + char message[6] = "hello"; + node.emit(3, 3.6F, "hello", message); + EXPECT_EQ(node._init, 1); + EXPECT_EQ(node._update, 1); + EXPECT_EQ(node._stop, 1); + EXPECT_EQ(node._deinit, 1); + EXPECT_EQ(TestNode_init, 1); + EXPECT_EQ(TestNode_Init_Lambda, 1); + + node.off(idInit); + node.emit(); + EXPECT_EQ(node._init, 1); // no change + EXPECT_EQ(TestNode_init, 2); + EXPECT_EQ(TestNode_Init_Lambda, 2); + node.off(); + node.emit(); + EXPECT_EQ(node._init, 1); // no change + EXPECT_EQ(TestNode_init, 2); // no change + EXPECT_EQ(TestNode_Init_Lambda, 2); + + node.off(); + node.emit(0.1666); + EXPECT_EQ(node._update, 1); // no change + + EXPECT_EQ(node._stop, 1); + EXPECT_EQ(node._deinit, 1); + node.offAll(); + node.emit(); + node.emit(3, 3.6F, "hello", message); + EXPECT_EQ(node._stop, 1); + EXPECT_EQ(node._deinit, 1); +} +TEST(eventTarget, test_double_link_list) { + LinkNode *list = nullptr; + LinkNode a; + LinkNode b; + LinkNode c; + cc::event::intl::listAppend(&list, &a); + int count = 0; + EVENT_LIST_LOOP_BEGIN(itr, list) + count++; + EVENT_LIST_LOOP_END(itr, list) + EXPECT_EQ(count, 1); + count = 0; + cc::event::intl::listAppend(&list, &b); + EVENT_LIST_LOOP_BEGIN(itr, list) + count++; + EVENT_LIST_LOOP_END(itr, list) + EXPECT_EQ(count, 2); + count = 0; + cc::event::intl::listAppend(&list, &c); + EVENT_LIST_LOOP_BEGIN(itr, list) + count++; + EVENT_LIST_LOOP_END(itr, list) + EXPECT_EQ(count, 3); + count = 0; + + cc::event::intl::detachFromList(&list, &b); + EVENT_LIST_LOOP_BEGIN(itr, list) + count++; + EVENT_LIST_LOOP_END(itr, list) + EXPECT_EQ(count, 2); + count = 0; + + cc::event::intl::detachFromList(&list, &c); + EVENT_LIST_LOOP_BEGIN(itr, list) + count++; + EVENT_LIST_LOOP_END(itr, list) + EXPECT_EQ(count, 1); + count = 0; + cc::event::intl::detachFromList(&list, &a); + EVENT_LIST_LOOP_BEGIN(itr, list) + count++; + EVENT_LIST_LOOP_END(itr, list) + EXPECT_EQ(count, 0); + EXPECT_EQ(list, nullptr); + count = 0; +} + +TEST(eventTarget, add_listener_within_callback) { + TestNode node; + int init_times = 0; + int init_times_inner = 0; + int update_times = 0; + auto idInit = node.on([&](TestNode *emitter) { + init_times++; + emitter->on([&](TestNode *emitter2) { + init_times++; + init_times_inner++; + }); + emitter->on([&](TestNode *emitter2, float dt) { + update_times++; + }); + }); + node.emit(); + node.off(idInit); + EXPECT_EQ(init_times, 1); + EXPECT_EQ(init_times_inner, 0); + node.emit(); + EXPECT_EQ(init_times, 2); + EXPECT_EQ(init_times_inner, 1); + node.emit(0.3); + EXPECT_EQ(update_times, 1); +} + +TEST(eventTarget, off_listener_within_callback) { + TestNode node; + int init_times = 0; + int update_times = 0; + auto idInit = node.on([&](TestNode *emitter) { + init_times++; + }); + auto updateId = node.on([&](TestNode *emitter, float dt) { + update_times++; + node.off(idInit); + }); + node.emit(); + EXPECT_EQ(init_times, 1); + EXPECT_EQ(update_times, 0); + node.emit(0.3); + EXPECT_EQ(init_times, 1); + EXPECT_EQ(update_times, 1); + node.emit(); + EXPECT_EQ(init_times, 1); + EXPECT_EQ(update_times, 1); +} +TEST(eventTarget, off_same_listener_within_callback) { + TestNode node; + int init_times = 0; + int update_times = 0; + auto idInit = node.on([&](TestNode *emitter) { + init_times++; + }); + auto idInit2 = node.on([&](TestNode *emitter) { + init_times++; + node.off(idInit); + }); + // node.emit(i); // should crash +} + +TEST(eventTarget, emitWithParent) { + TestNodeWithParent l0; + TestNodeWithParent l1; + TestNodeWithParent l2; + l1.parent = &l0; + l2.parent = &l1; + std::vector record; + l0.on([&](TestNodeWithParent *emitter) { + record.emplace_back(0); + }, + true); + l1.on([&](TestNodeWithParent *emitter) { + record.emplace_back(2); + }, + false); + l2.on([&](TestNodeWithParent *emitter) { + record.emplace_back(1); + }); + l2.dispatchEvent(); + EXPECT_EQ(record.size(), 3); + EXPECT_EQ(record[0], 0); + EXPECT_EQ(record[1], 1); + EXPECT_EQ(record[2], 2); + l0.offAll(); + l1.offAll(); + l2.offAll(); + record.clear(); + l0.on([&](TestNodeWithParent::Init::EventType *eventObj) { + record.emplace_back(0); + }, + true); + l1.on([&](TestNodeWithParent::Init::EventType *eventObj) { + record.emplace_back(2); + }, + false); + l2.on([&](TestNodeWithParent::Init::EventType *eventObj) { + record.emplace_back(1); + eventObj->stopPropagation(); + }); + TestNodeWithParent::Init::EventType evt; + l2.dispatchEvent(evt); + EXPECT_EQ(record.size(), 2); + EXPECT_EQ(record[0], 0); + EXPECT_EQ(record[1], 1); +} From 2e29bce9c33103cd1f173719ac87caa1dd136dac Mon Sep 17 00:00:00 2001 From: minggo Date: Tue, 1 Nov 2022 17:10:12 +0800 Subject: [PATCH 118/829] Adjust serialization (#13201) * move serialization related file into cocos/serialization --- cocos/animation/marionette/animation-graph.ts | 2 +- cocos/animation/marionette/state.ts | 2 +- cocos/asset/asset-manager/depend-util.ts | 4 +- cocos/asset/asset-manager/deserialize.ts | 2 +- cocos/asset/asset-manager/downloader.ts | 2 +- cocos/asset/asset-manager/pack-manager.ts | 2 +- cocos/asset/asset-manager/parser.ts | 2 +- cocos/core/data/class.ts | 9 ++++ cocos/core/data/custom-serializable.ts | 3 ++ cocos/core/data/editor-extendable.ts | 1 - cocos/core/data/index.ts | 19 +++++--- cocos/core/data/object.ts | 1 + cocos/core/data/utils/asserts.ts | 6 +++ cocos/core/data/utils/attribute.ts | 2 + cocos/core/data/utils/compiler.ts | 4 ++ cocos/core/utils/index.ts | 7 +++ cocos/particle/particle-utils.ts | 2 +- cocos/scene-graph/prefab/prefab.ts | 2 +- cocos/{core/data => serialization}/ccon.ts | 9 ++-- .../deserialize-dynamic-empty.ts | 0 .../deserialize-dynamic.ts | 44 +++++++---------- .../deserialize-symbols.ts | 0 .../data => serialization}/deserialize.ts | 19 ++++---- cocos/serialization/index.ts | 28 +++++++++++ .../data => serialization}/instantiate-jit.ts | 30 +++++------- .../data => serialization}/instantiate.ts | 47 ++++++++----------- .../report-missing-class.ts | 6 ++- exports/base.ts | 1 + tests/core/ccon.test.ts | 2 +- tests/core/deserialize.test.ts | 4 +- tests/core/editor-extendable.test.ts | 3 +- tests/core/instantiate.test.ts | 2 +- .../deserialize-capacity.test.ts | 2 +- .../deserialize-missing-class.test.ts | 2 +- .../serialization/deserialize-ref-0.test.ts | 2 +- tests/core/serialization/run-test.ts | 4 +- 36 files changed, 161 insertions(+), 116 deletions(-) rename cocos/{core/data => serialization}/ccon.ts (96%) rename cocos/{core/data => serialization}/deserialize-dynamic-empty.ts (100%) rename cocos/{core/data => serialization}/deserialize-dynamic.ts (95%) rename cocos/{core/data => serialization}/deserialize-symbols.ts (100%) rename cocos/{core/data => serialization}/deserialize.ts (98%) create mode 100644 cocos/serialization/index.ts rename cocos/{core/data => serialization}/instantiate-jit.ts (95%) rename cocos/{core/data => serialization}/instantiate.ts (88%) rename cocos/{core/data => serialization}/report-missing-class.ts (81%) diff --git a/cocos/animation/marionette/animation-graph.ts b/cocos/animation/marionette/animation-graph.ts index 4ebb070c19a..e6ee67209bf 100644 --- a/cocos/animation/marionette/animation-graph.ts +++ b/cocos/animation/marionette/animation-graph.ts @@ -14,7 +14,7 @@ import { State, outgoingsSymbol, incomingsSymbol, InteractiveState } from './sta import { AnimationMask } from './animation-mask'; import { EditorExtendable } from '../../core/data/editor-extendable'; import { move } from '../../core/algorithm/move'; -import { onAfterDeserializedTag } from '../../core/data/deserialize-symbols'; +import { onAfterDeserializedTag } from '../../serialization/deserialize-symbols'; import { CLASS_NAME_PREFIX_ANIM } from '../define'; export { State }; diff --git a/cocos/animation/marionette/state.ts b/cocos/animation/marionette/state.ts index 271d8b24e4b..45e991ae03c 100644 --- a/cocos/animation/marionette/state.ts +++ b/cocos/animation/marionette/state.ts @@ -5,7 +5,7 @@ import { EditorExtendable } from '../../core/data/editor-extendable'; import { CLASS_NAME_PREFIX_ANIM } from '../define'; import { StateMachineComponent } from './state-machine-component'; import { js } from '../../core'; -import { instantiate } from '../../core/data/instantiate'; +import { instantiate } from '../../serialization/instantiate'; import { editorExtrasTag } from '../../core/data'; import { cloneAnimationGraphEditorExtrasFrom } from './animation-graph-editor-extras-clone-helper'; diff --git a/cocos/asset/asset-manager/depend-util.ts b/cocos/asset/asset-manager/depend-util.ts index cc6824e67b3..5cafbe6764c 100644 --- a/cocos/asset/asset-manager/depend-util.ts +++ b/cocos/asset/asset-manager/depend-util.ts @@ -25,14 +25,14 @@ import { BUILD, EDITOR } from 'internal:constants'; import { Asset } from '../assets'; -import { hasNativeDep, isCompiledJson, parseUuidDependencies } from '../../core/data/deserialize'; +import { hasNativeDep, isCompiledJson, parseUuidDependencies } from '../../serialization/deserialize'; import Cache from './cache'; import deserialize from './deserialize'; import { decodeUuid } from './helper'; import { files, parsed } from './shared'; import { dependMap, nativeDependMap } from './depend-maps'; import { assertIsNonNullable } from '../../core/data/utils/asserts'; -import { CCON } from '../../core/data/ccon'; +import { CCON } from '../../serialization/ccon'; export interface IDependencies { nativeDep?: Record; diff --git a/cocos/asset/asset-manager/deserialize.ts b/cocos/asset/asset-manager/deserialize.ts index c67a08cd452..534664408e8 100644 --- a/cocos/asset/asset-manager/deserialize.ts +++ b/cocos/asset/asset-manager/deserialize.ts @@ -26,7 +26,7 @@ import { EDITOR } from 'internal:constants'; import { Asset } from '../assets/asset'; import { MissingScript } from '../../misc/missing-script'; -import { deserialize, Details } from '../../core/data/deserialize'; +import { deserialize, Details } from '../../serialization/deserialize'; import { error } from '../../core/platform/debug'; import { js } from '../../core/utils/js'; import { dependMap, nativeDependMap } from './depend-maps'; diff --git a/cocos/asset/asset-manager/downloader.ts b/cocos/asset/asset-manager/downloader.ts index c894f4cee10..2f00f882753 100644 --- a/cocos/asset/asset-manager/downloader.ts +++ b/cocos/asset/asset-manager/downloader.ts @@ -36,7 +36,7 @@ import { CompleteCallback, CompleteCallbackNoData, IBundleOptions, IDownloadPars import { retry, RetryFunction, urlAppendTimestamp } from './utilities'; import { legacyCC } from '../../core/global-exports'; import { IConfigOption } from './config'; -import { CCON, parseCCONJson, decodeCCONBinary } from '../../core/data/ccon'; +import { CCON, parseCCONJson, decodeCCONBinary } from '../../serialization/ccon'; export type DownloadHandler = (url: string, options: IDownloadParseOptions, onComplete: CompleteCallback) => void; diff --git a/cocos/asset/asset-manager/pack-manager.ts b/cocos/asset/asset-manager/pack-manager.ts index ac0ad41016f..b92caff93dc 100644 --- a/cocos/asset/asset-manager/pack-manager.ts +++ b/cocos/asset/asset-manager/pack-manager.ts @@ -25,7 +25,7 @@ import { ImageAsset } from '../assets/image-asset'; import { Texture2D } from '../assets/texture-2d'; -import { packCustomObjData, unpackJSONs } from '../../core/data/deserialize'; +import { packCustomObjData, unpackJSONs } from '../../serialization/deserialize'; import { error, errorID } from '../../core/platform/debug'; import { js } from '../../core/utils/js'; import Cache from './cache'; diff --git a/cocos/asset/asset-manager/parser.ts b/cocos/asset/asset-manager/parser.ts index 6715e5949f8..5f58dd6516d 100644 --- a/cocos/asset/asset-manager/parser.ts +++ b/cocos/asset/asset-manager/parser.ts @@ -32,7 +32,7 @@ import plistParser from './plist-parser'; import { CompleteCallback, IDownloadParseOptions, files, parsed } from './shared'; import { PixelFormat } from '../assets/asset-enum'; -import { CCON } from '../../core/data/ccon'; +import { CCON } from '../../serialization/ccon'; import { Asset } from '../assets'; // PVR constants // diff --git a/cocos/core/data/class.ts b/cocos/core/data/class.ts index 2c075994776..ee802d246e1 100644 --- a/cocos/core/data/class.ts +++ b/cocos/core/data/class.ts @@ -40,7 +40,15 @@ import { PropertyStash, PropertyStashInternalFlag } from './class-stash'; const DELIMETER = attributeUtils.DELIMETER; const CCCLASS_TAG = '__ctors__'; // Still use this historical name to avoid unsynchronized version issue + +/** + * @engineInternal + */ export const ENUM_TAG = 'Enum'; + +/** + * @engineInternal + */ export const BITMASK_TAG = 'BitMask'; function pushUnique (array, item) { @@ -354,6 +362,7 @@ CCClass.attr = attributeUtils.attr; * Returns if the class is a cc-class or is fast defined. * @param constructor The constructor of the class. * @returns Judge result. + * @engineInternal */ // eslint-disable-next-line @typescript-eslint/ban-types export function isCCClassOrFastDefined (constructor: Constructor) { diff --git a/cocos/core/data/custom-serializable.ts b/cocos/core/data/custom-serializable.ts index 3cf2e3f0532..121cd68bd04 100644 --- a/cocos/core/data/custom-serializable.ts +++ b/cocos/core/data/custom-serializable.ts @@ -67,6 +67,9 @@ export type SerializationContext = { customArguments: Record }; +/** + * @engineInternal + */ export type DeserializationContext = { /** * True if the deserialization procedure is deserializing from CCON. diff --git a/cocos/core/data/editor-extendable.ts b/cocos/core/data/editor-extendable.ts index 559b83aa556..c8326f78547 100644 --- a/cocos/core/data/editor-extendable.ts +++ b/cocos/core/data/editor-extendable.ts @@ -1,7 +1,6 @@ import { EDITOR } from 'internal:constants'; import { ccclass, editorOnly } from 'cc.decorator'; import { js } from '../utils/js'; -import { CCClass } from './class'; import { EditorExtendableObject, editorExtrasTag } from './editor-extras-tag'; import { assertIsTrue } from './utils/asserts'; diff --git a/cocos/core/data/index.ts b/cocos/core/data/index.ts index e348ce597f2..7f741d6ad42 100644 --- a/cocos/core/data/index.ts +++ b/cocos/core/data/index.ts @@ -24,24 +24,29 @@ */ import * as _decorator from './class-decorator'; +import * as Attr from './utils/attribute'; import { legacyCC } from '../global-exports'; legacyCC._decorator = _decorator; export { _decorator }; -export { CCClass } from './class'; -export { CCObject, isValid } from './object'; -export { deserialize } from './deserialize'; -export { Details } from './deserialize'; -export { getSerializationMetadata } from './serialization-metadata'; -export type { SerializationMetadata } from './serialization-metadata'; -export { instantiate } from './instantiate'; +export { CCClass, ENUM_TAG, BITMASK_TAG, isCCClassOrFastDefined } from './class'; +export { CCObject, isCCObject, isValid } from './object'; export { CCInteger, CCFloat, CCBoolean, CCString } from './utils/attribute'; +/** + * @engineInternal + */ +export { Attr }; export { CompactValueTypeArray } from './utils/compact-value-type-array'; export { editorExtrasTag } from './editor-extras-tag'; +export * from './utils/asserts'; +export * from './utils/compiler'; export { deserializeTag, serializeTag } from './custom-serializable'; export type { SerializationInput, SerializationOutput, SerializationContext, CustomSerializable, + DeserializationContext, } from './custom-serializable'; +export { getSerializationMetadata } from './serialization-metadata'; +export type { SerializationMetadata } from './serialization-metadata'; diff --git a/cocos/core/data/object.ts b/cocos/core/data/object.ts index 0d5293da16f..86421960e3b 100644 --- a/cocos/core/data/object.ts +++ b/cocos/core/data/object.ts @@ -636,6 +636,7 @@ declare namespace CCObject { * @method isCCObject * @param object * @return @en Whether it is a CCObject boolean value. @zh 是否为CCObject的布尔值。 + * @engineInternal */ export function isCCObject (object: any) { return object instanceof CCObject; diff --git a/cocos/core/data/utils/asserts.ts b/cocos/core/data/utils/asserts.ts index 57b5293a845..3f418f2ffcf 100644 --- a/cocos/core/data/utils/asserts.ts +++ b/cocos/core/data/utils/asserts.ts @@ -29,6 +29,7 @@ import { DEBUG } from 'internal:constants'; * Asserts that the expression is non-nullable, i.e. is neither `null` nor `undefined`. * @param expr Testing expression. * @param message Optional message. + * @engineInternal */ export function assertIsNonNullable (expr: T, message?: string): asserts expr is NonNullable { assertIsTrue(!(expr === null || expr === undefined), message); @@ -38,6 +39,7 @@ export function assertIsNonNullable (expr: T, message?: string): asserts expr * Asserts that the expression evaluated to `true`. * @param expr Testing expression. * @param message Optional message. + * @engineInternal */ export function assertIsTrue (expr: unknown, message?: string): asserts expr { if (DEBUG && !expr) { @@ -47,6 +49,10 @@ export function assertIsTrue (expr: unknown, message?: string): asserts expr { } } +/** + * Assets that the index is valid. + * @engineInternal + */ export function assertsArrayIndex (array: T[], index: number) { assertIsTrue(index >= 0 && index < array.length, `Array index ${index} out of bounds: [0, ${array.length})`); } diff --git a/cocos/core/data/utils/attribute.ts b/cocos/core/data/utils/attribute.ts index 2ece3db5812..e1cae330f7c 100644 --- a/cocos/core/data/utils/attribute.ts +++ b/cocos/core/data/utils/attribute.ts @@ -40,6 +40,7 @@ export function createAttrsSingle (owner: Object, superAttrs?: any) { /** * @param subclass Should not have '__attrs__'. + * @engineInternal */ export function createAttrs (subclass: any) { if (typeof subclass !== 'function') { @@ -86,6 +87,7 @@ export function attr (constructor: any, propertyName: string): { [attributeName: /** * Returns a readonly meta object. + * @engineInternal */ export function getClassAttrs (constructor: any) { return (constructor.hasOwnProperty('__attrs__') && constructor.__attrs__) || createAttrs(constructor); diff --git a/cocos/core/data/utils/compiler.ts b/cocos/core/data/utils/compiler.ts index 7ed108c40d5..a0781472f01 100644 --- a/cocos/core/data/utils/compiler.ts +++ b/cocos/core/data/utils/compiler.ts @@ -40,6 +40,10 @@ function deepFlatten (strList, array) { } } +/** + * + * @engineInternal + */ export function flattenCodeArray (array) { const separator = DEV ? '\n' : ''; const strList = []; diff --git a/cocos/core/utils/index.ts b/cocos/core/utils/index.ts index 27c19e7ab07..6721c1717f0 100644 --- a/cocos/core/utils/index.ts +++ b/cocos/core/utils/index.ts @@ -37,8 +37,15 @@ import * as misc from './misc'; */ import * as path from './path'; +import * as jsbUtils from './jsb-utils'; + export * from './x-deprecated'; +/** + * @engineInternal + */ +export { jsbUtils }; + export { js, misc, diff --git a/cocos/particle/particle-utils.ts b/cocos/particle/particle-utils.ts index c5685309d0d..71cc2cc0ecc 100644 --- a/cocos/particle/particle-utils.ts +++ b/cocos/particle/particle-utils.ts @@ -23,7 +23,7 @@ THE SOFTWARE. */ -import { instantiate } from '../core/data'; +import { instantiate } from '../serialization'; import { CCObject } from '../core/data/object'; import { Director, director } from '../game/director'; import { Pool } from '../core/memop'; diff --git a/cocos/scene-graph/prefab/prefab.ts b/cocos/scene-graph/prefab/prefab.ts index 985fd359f58..35688b9fd62 100644 --- a/cocos/scene-graph/prefab/prefab.ts +++ b/cocos/scene-graph/prefab/prefab.ts @@ -26,7 +26,7 @@ import { ccclass, serializable, editable } from 'cc.decorator'; import { SUPPORT_JIT, ALIPAY, RUNTIME_BASED } from 'internal:constants'; -import { compile } from '../../core/data/instantiate-jit'; +import { compile } from '../../serialization/instantiate-jit'; import { js, obsolete } from '../../core/utils/js'; import { Enum } from '../../core/value-types'; import { Asset } from '../../asset/assets/asset'; diff --git a/cocos/core/data/ccon.ts b/cocos/serialization/ccon.ts similarity index 96% rename from cocos/core/data/ccon.ts rename to cocos/serialization/ccon.ts index c0d5cff5c2b..3ca5d840ef8 100644 --- a/cocos/core/data/ccon.ts +++ b/cocos/serialization/ccon.ts @@ -1,5 +1,4 @@ -import legacyCC from '../../../predefine'; -import { getError } from '../platform/debug'; +import { getError, cclegacy } from '../core'; const VERSION = 1; @@ -230,6 +229,6 @@ export class BufferBuilder { } } -legacyCC.internal.parseCCONJson = parseCCONJson; -legacyCC.internal.decodeCCONBinary = decodeCCONBinary; -legacyCC.internal.CCON = CCON; +cclegacy.internal.parseCCONJson = parseCCONJson; +cclegacy.internal.decodeCCONBinary = decodeCCONBinary; +cclegacy.internal.CCON = CCON; diff --git a/cocos/core/data/deserialize-dynamic-empty.ts b/cocos/serialization/deserialize-dynamic-empty.ts similarity index 100% rename from cocos/core/data/deserialize-dynamic-empty.ts rename to cocos/serialization/deserialize-dynamic-empty.ts diff --git a/cocos/core/data/deserialize-dynamic.ts b/cocos/serialization/deserialize-dynamic.ts similarity index 95% rename from cocos/core/data/deserialize-dynamic.ts rename to cocos/serialization/deserialize-dynamic.ts index b22c09949cd..dcff1373f73 100644 --- a/cocos/core/data/deserialize-dynamic.ts +++ b/cocos/serialization/deserialize-dynamic.ts @@ -25,21 +25,13 @@ */ import { EDITOR, TEST, DEV, DEBUG, JSB, PREVIEW, SUPPORT_JIT } from 'internal:constants'; -import { legacyCC } from '../global-exports'; -import * as js from '../utils/js'; -import * as misc from '../utils/misc'; -import { CCClass, ENUM_TAG, BITMASK_TAG } from './class'; -import * as Attr from './utils/attribute'; -import { MissingScript } from '../../misc/missing-script'; +import { cclegacy, js, misc, CCClass, ENUM_TAG, BITMASK_TAG, sys, error, assertIsTrue, Attr, CustomSerializable, DeserializationContext, deserializeTag, SerializationInput } from '../core'; +import { MissingScript } from '../misc/missing-script'; import { Details } from './deserialize'; -import { Platform } from '../../../pal/system-info/enum-type'; -import { sys } from '../platform/sys'; -import { error } from '../platform/debug'; -import { CustomSerializable, DeserializationContext, deserializeTag, SerializationInput } from './custom-serializable'; +import { Platform } from '../../pal/system-info/enum-type'; import type { deserialize, CCClassConstructor } from './deserialize'; import { CCON } from './ccon'; -import { assertIsTrue } from './utils/asserts'; -import { Asset } from '../../asset/assets'; +import { Asset } from '../asset/assets'; function compileObjectTypeJit ( sources: string[], @@ -48,7 +40,7 @@ function compileObjectTypeJit ( propNameLiteralToSet: string, assumeHavePropIfIsValue: boolean, ) { - if (defaultValue instanceof legacyCC.ValueType) { + if (defaultValue instanceof cclegacy.ValueType) { // fast case if (!assumeHavePropIfIsValue) { sources.push('if(prop){'); @@ -170,10 +162,10 @@ function compileDeserializeJIT (self: _Deserializer, klass: CCClassConstructor): CompiledDeserializeFn { const fastMode = misc.BUILTIN_CLASSID_RE.test(js.getClassId(klass)); - const shouldCopyId = js.isChildClassOf(klass, legacyCC.Node) || js.isChildClassOf(klass, legacyCC.Component); + const shouldCopyId = js.isChildClassOf(klass, cclegacy.Node) || js.isChildClassOf(klass, cclegacy.Component); let shouldCopyRawData = false; const simpleProps: string[] = []; @@ -244,7 +236,7 @@ function compileDeserializeNative (_self: _Deserializer, klass: CCClassConstruct if (advancedPropsToRead !== advancedProps) { advancedPropsToRead.push(propNameToRead); } - advancedPropsValueType.push((defaultValue instanceof legacyCC.ValueType) && defaultValue.constructor); + advancedPropsValueType.push((defaultValue instanceof cclegacy.ValueType) && defaultValue.constructor); } } })(); @@ -560,7 +552,7 @@ class _Deserializer { return obj; }; - if (!(EDITOR && legacyCC.js.isChildClassOf(klass, legacyCC.Component))) { + if (!(EDITOR && js.isChildClassOf(klass, cclegacy.Component))) { const obj = createObject(klass); this._deserializeInto(value, obj, klass); return obj; @@ -604,7 +596,7 @@ class _Deserializer { return; } - if (legacyCC.Class._isCCClass(constructor)) { + if (cclegacy.Class._isCCClass(constructor)) { this._deserializeFireClass(object, value, constructor as CCClassConstructor); } else { this._deserializeFastDefinedObject(object, value, constructor); @@ -764,18 +756,18 @@ class _Deserializer { serialized: SerializedGeneralTypedObject, klass: SerializableClassConstructor, ) { - if (klass === legacyCC.Vec2) { + if (klass === cclegacy.Vec2) { type SerializedVec2 = { x?: number; y?: number; }; instance.x = (serialized as SerializedVec2).x || 0; instance.y = (serialized as SerializedVec2).y || 0; return; - } else if (klass === legacyCC.Vec3) { + } else if (klass === cclegacy.Vec3) { type SerializedVec3 = { x?: number; y?: number; z?: number; }; instance.x = (serialized as SerializedVec3).x || 0; instance.y = (serialized as SerializedVec3).y || 0; instance.z = (serialized as SerializedVec3).z || 0; return; - } else if (klass === legacyCC.Color) { + } else if (klass === cclegacy.Color) { type SerializedColor = { r?: number; g?: number; b?: number; a?: number; }; instance.r = (serialized as SerializedColor).r || 0; instance.g = (serialized as SerializedColor).g || 0; @@ -783,7 +775,7 @@ class _Deserializer { const a = (serialized as SerializedColor).a; instance.a = (a === undefined ? 255 : a); return; - } else if (klass === legacyCC.Size) { + } else if (klass === cclegacy.Size) { type SerializedSize = { width?: number; height?: number; }; instance.width = (serialized as SerializedSize).width || 0; instance.height = (serialized as SerializedSize).height || 0; @@ -833,7 +825,7 @@ export function deserializeDynamic (data: SerializedData | CCON, details: Detail const createAssetRefs = options.createAssetRefs || sys.platform === Platform.EDITOR_CORE; const customEnv = options.customEnv; const ignoreEditorOnly = options.ignoreEditorOnly; - const reportMissingClass = options.reportMissingClass ?? legacyCC.deserialize.reportMissingClass; + const reportMissingClass = options.reportMissingClass ?? cclegacy.deserialize.reportMissingClass; // var oldJson = JSON.stringify(data, null, 2); @@ -841,9 +833,9 @@ export function deserializeDynamic (data: SerializedData | CCON, details: Detail const deserializer = _Deserializer.pool.get(details, classFinder, reportMissingClass, customEnv, ignoreEditorOnly); - legacyCC.game._isCloning = true; + cclegacy.game._isCloning = true; const res = deserializer.deserialize(data); - legacyCC.game._isCloning = false; + cclegacy.game._isCloning = false; _Deserializer.pool.put(deserializer); if (createAssetRefs) { diff --git a/cocos/core/data/deserialize-symbols.ts b/cocos/serialization/deserialize-symbols.ts similarity index 100% rename from cocos/core/data/deserialize-symbols.ts rename to cocos/serialization/deserialize-symbols.ts diff --git a/cocos/core/data/deserialize.ts b/cocos/serialization/deserialize.ts similarity index 98% rename from cocos/core/data/deserialize.ts rename to cocos/serialization/deserialize.ts index bc96380fa27..6e4a2fcf7d8 100644 --- a/cocos/core/data/deserialize.ts +++ b/cocos/serialization/deserialize.ts @@ -24,19 +24,16 @@ */ import { EDITOR, TEST, PREVIEW, DEBUG, JSB, DEV } from 'internal:constants'; -import { legacyCC } from '../global-exports'; -import { ValueType } from '../value-types'; -import { Vec2, Vec3, Vec4, Color, Size, Rect, Quat, Mat4 } from '../math'; -import { errorID, getError } from '../platform/debug'; -import * as js from '../utils/js'; +import { cclegacy, ValueType, Vec2, Vec3, Vec4, Color, Size, Rect, Quat, Mat4, errorID, getError, js } from '../core'; import { deserializeDynamic, parseUuidDependenciesDynamic } from './deserialize-dynamic'; -import { Asset } from '../../asset/assets/asset'; +import { Asset } from '../asset/assets/asset'; import type { CCON } from './ccon'; -import { reportMissingClass as defaultReportMissingClass } from './report-missing-class'; import type { CompiledDeserializeFn } from './deserialize-dynamic'; +import { reportMissingClass as defaultReportMissingClass } from './report-missing-class'; + const FORCE_COMPILED = false; // TODO: BUILD; /** ************************************************************************** @@ -1063,10 +1060,10 @@ export function deserialize (data: IFileData | string | CCON | any, details: Det cacheMasks(data); } - legacyCC.game._isCloning = true; + cclegacy.game._isCloning = true; const instances = data[File.Instances]; const rootIndex = parseInstances(data); - legacyCC.game._isCloning = false; + cclegacy.game._isCloning = false; if (data[File.Refs]) { dereference(data[File.Refs] as IRefs, instances, data[File.SharedStrings]); @@ -1199,7 +1196,7 @@ if (EDITOR || TEST) { } if (TEST) { - legacyCC._Test.deserializeCompiled = { + cclegacy._Test.deserializeCompiled = { deserialize, dereference, deserializeCCObject, @@ -1243,4 +1240,4 @@ if (TEST) { }; } -legacyCC.deserialize = deserialize; +cclegacy.deserialize = deserialize; diff --git a/cocos/serialization/index.ts b/cocos/serialization/index.ts new file mode 100644 index 00000000000..99aa572c190 --- /dev/null +++ b/cocos/serialization/index.ts @@ -0,0 +1,28 @@ +/* + Copyright (c) 2018-2020 Xiamen Yaji Software Co., Ltd. + + http://www.cocos.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated engine source code (the "Software"), a limited, + worldwide, royalty-free, non-assignable, revocable and non-exclusive license + to use Cocos Creator solely to develop games on your target platforms. You shall + not use Cocos Creator software for developing other software or tools that's + used for developing games. You are not granted to publish, distribute, + sublicense, and/or sell copies of Cocos Creator. + + The software or tools in this License Agreement are licensed, not sold. + Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +export { deserialize } from './deserialize'; +export { Details } from './deserialize'; +export { instantiate } from './instantiate'; diff --git a/cocos/core/data/instantiate-jit.ts b/cocos/serialization/instantiate-jit.ts similarity index 95% rename from cocos/core/data/instantiate-jit.ts rename to cocos/serialization/instantiate-jit.ts index 7980ca87f09..bbf7e95dfa8 100644 --- a/cocos/core/data/instantiate-jit.ts +++ b/cocos/serialization/instantiate-jit.ts @@ -27,13 +27,7 @@ // Some helper methods for compile instantiation code import { TEST } from 'internal:constants'; -import * as js from '../utils/js'; -import { CCClass, isCCClassOrFastDefined } from './class'; -import { CCObject, isCCObject } from './object'; -import * as Attr from './utils/attribute'; -import { flattenCodeArray } from './utils/compiler'; -import { legacyCC } from '../global-exports'; - +import { CCClass, isCCClassOrFastDefined, js, Attr, CCObject, isCCObject, cclegacy, flattenCodeArray } from '../core'; const Destroyed = CCObject.Flags.Destroyed; const PersistentMask = CCObject.Flags.PersistentMask; const DEFAULT = `${Attr.DELIMETER}default`; @@ -312,7 +306,7 @@ class Parser { if (equalsToDefault(defaultValue, val)) { continue; } - if (typeof val === 'object' && val instanceof legacyCC.ValueType) { + if (typeof val === 'object' && val instanceof cclegacy.ValueType) { defaultValue = CCClass.getDefault(defaultValue); if (defaultValue && defaultValue.constructor === val.constructor) { // fast case @@ -444,10 +438,10 @@ class Parser { } public instantiateObj (obj) { - if (obj instanceof legacyCC.ValueType) { + if (obj instanceof cclegacy.ValueType) { return CCClass.getNewValueTypeCode(obj); } - if (obj instanceof legacyCC.Asset) { + if (obj instanceof cclegacy.Asset) { // register to asset list and just return the reference. return this.getObjRef(obj); } @@ -460,17 +454,17 @@ class Parser { const ctor = obj.constructor; if (isCCClassOrFastDefined(ctor)) { if (this.parent) { - if (this.parent instanceof legacyCC.Component) { - if (obj instanceof legacyCC.Node || obj instanceof legacyCC.Component) { + if (this.parent instanceof cclegacy.Component) { + if (obj instanceof cclegacy.Node || obj instanceof cclegacy.Component) { return this.getObjRef(obj); } - } else if (this.parent instanceof legacyCC.Node) { - if (obj instanceof legacyCC.Node) { + } else if (this.parent instanceof cclegacy.Node) { + if (obj instanceof cclegacy.Node) { if (!obj.isChildOf(this.parent)) { // should not clone other nodes if not descendant return this.getObjRef(obj); } - } else if (obj instanceof legacyCC.Component) { + } else if (obj instanceof cclegacy.Component) { if (!obj.node?.isChildOf(this.parent)) { // should not clone other component if not descendant return this.getObjRef(obj); @@ -521,7 +515,7 @@ export function equalsToDefault (def: any, value: any) { && typeof def === 'object' && typeof value === 'object' && def.constructor === value.constructor ) { - if (def instanceof legacyCC.ValueType) { + if (def instanceof cclegacy.ValueType) { if (def.equals(value)) { return true; } @@ -535,13 +529,13 @@ export function equalsToDefault (def: any, value: any) { } export function compile (node) { - const root = (node instanceof legacyCC.Node) && node; + const root = (node instanceof cclegacy.Node) && node; const parser = new Parser(node, root); return parser.result; } if (TEST) { - legacyCC._Test.IntantiateJit = { + cclegacy._Test.IntantiateJit = { equalsToDefault, compile, }; diff --git a/cocos/core/data/instantiate.ts b/cocos/serialization/instantiate.ts similarity index 88% rename from cocos/core/data/instantiate.ts rename to cocos/serialization/instantiate.ts index 78699a1b298..cf7b9ddb109 100644 --- a/cocos/core/data/instantiate.ts +++ b/cocos/serialization/instantiate.ts @@ -25,16 +25,9 @@ */ import { DEV, JSB } from 'internal:constants'; -import { isDomNode } from '../utils/misc'; -import { ValueType } from '../value-types'; -import { CCObject, isCCObject } from './object'; -import { js } from '../utils/js'; -import { getError, warn } from '../platform/debug'; -import { legacyCC } from '../global-exports'; -import { Prefab } from '../../scene-graph/prefab'; -import { Node } from '../../scene-graph/node'; -import { updateChildrenForDeserialize } from '../utils/jsb-utils'; -import { isCCClassOrFastDefined } from './class'; +import { CCObject, isCCObject, js, ValueType, jsbUtils, isCCClassOrFastDefined, getError, warn, misc, cclegacy } from '../core'; +import { Prefab } from '../scene-graph/prefab'; +import { Node } from '../scene-graph/node'; const Destroyed = CCObject.Flags.Destroyed; const PersistentMask = CCObject.Flags.PersistentMask; @@ -92,10 +85,10 @@ export function instantiate (original: any, internalForce?: boolean) { if (!original) { throw new TypeError(getError(6901)); } - if (!legacyCC.isValid(original)) { + if (!cclegacy.isValid(original)) { throw new TypeError(getError(6901)); } - if (original instanceof legacyCC.Component) { + if (original instanceof cclegacy.Component) { warn('Should not instantiate a single cc.Component directly, you must instantiate the entire node.'); } } @@ -105,24 +98,24 @@ export function instantiate (original: any, internalForce?: boolean) { if (isCCObject(original)) { if (original._instantiate) { - legacyCC.game._isCloning = true; + cclegacy.game._isCloning = true; clone = original._instantiate(null, true); - legacyCC.game._isCloning = false; + cclegacy.game._isCloning = false; if (JSB) { - updateChildrenForDeserialize(clone); + jsbUtils.updateChildrenForDeserialize(clone); } // eslint-disable-next-line @typescript-eslint/no-unsafe-return return clone; - } else if (original instanceof legacyCC.Asset) { + } else if (original instanceof cclegacy.Asset) { throw new TypeError(getError(6903)); } } - legacyCC.game._isCloning = true; + cclegacy.game._isCloning = true; clone = doInstantiate(original); - legacyCC.game._isCloning = false; + cclegacy.game._isCloning = false; if (JSB) { - updateChildrenForDeserialize(clone); + jsbUtils.updateChildrenForDeserialize(clone); } // eslint-disable-next-line @typescript-eslint/no-unsafe-return return clone; @@ -145,7 +138,7 @@ function doInstantiate (obj, parent?) { if (Array.isArray(obj)) { throw new TypeError(getError(6904)); } - if (isDomNode && isDomNode(obj)) { + if (misc.isDomNode(obj)) { throw new TypeError(getError(6905)); } } @@ -238,7 +231,7 @@ function instantiateObj (obj, parent) { if (obj instanceof ValueType) { return obj.clone(); } - if (obj instanceof legacyCC.Asset) { + if (obj instanceof cclegacy.Asset) { // 所有资源直接引用,不需要拷贝 // eslint-disable-next-line @typescript-eslint/no-unsafe-return return obj; @@ -280,19 +273,19 @@ function instantiateObj (obj, parent) { const ctor = obj.constructor; if (isCCClassOrFastDefined(ctor)) { if (parent) { - if (parent instanceof legacyCC.Component) { - if (obj instanceof legacyCC.Node || obj instanceof legacyCC.Component) { + if (parent instanceof cclegacy.Component) { + if (obj instanceof cclegacy.Node || obj instanceof cclegacy.Component) { // eslint-disable-next-line @typescript-eslint/no-unsafe-return return obj; } - } else if (parent instanceof legacyCC.Node) { - if (obj instanceof legacyCC.Node) { + } else if (parent instanceof cclegacy.Node) { + if (obj instanceof cclegacy.Node) { if (!obj.isChildOf(parent)) { // should not clone other nodes if not descendant // eslint-disable-next-line @typescript-eslint/no-unsafe-return return obj; } - } else if (obj instanceof legacyCC.Component) { + } else if (obj instanceof cclegacy.Component) { if (obj.node && !obj.node.isChildOf(parent)) { // should not clone other component if not descendant // eslint-disable-next-line @typescript-eslint/no-unsafe-return @@ -318,4 +311,4 @@ function instantiateObj (obj, parent) { } instantiate._clone = doInstantiate; -legacyCC.instantiate = instantiate; +cclegacy.instantiate = instantiate; diff --git a/cocos/core/data/report-missing-class.ts b/cocos/serialization/report-missing-class.ts similarity index 81% rename from cocos/core/data/report-missing-class.ts rename to cocos/serialization/report-missing-class.ts index 8de53b33214..e909fede752 100644 --- a/cocos/core/data/report-missing-class.ts +++ b/cocos/serialization/report-missing-class.ts @@ -1,6 +1,10 @@ import { EDITOR } from 'internal:constants'; -import { errorID } from '../platform/debug'; +import { errorID } from '../core'; +/** + * + * @engineInternal + */ export function reportMissingClass (id: string) { if (EDITOR && EditorExtends.UuidUtils.isUuid(id)) { id = EditorExtends.UuidUtils.decompressUuid(id); diff --git a/exports/base.ts b/exports/base.ts index e88e3b375ad..82338a6f59f 100644 --- a/exports/base.ts +++ b/exports/base.ts @@ -42,6 +42,7 @@ export * from '../cocos/scene-graph'; export * from '../cocos/misc'; export * from '../cocos/game'; export { Root } from '../cocos/root'; +export * from '../cocos/serialization'; export { gfx }; diff --git a/tests/core/ccon.test.ts b/tests/core/ccon.test.ts index efa997b3ba9..01b89705bfb 100644 --- a/tests/core/ccon.test.ts +++ b/tests/core/ccon.test.ts @@ -1,4 +1,4 @@ -import { BufferBuilder, CCON, decodeCCONBinary, parseCCONJson, encodeCCONBinary, encodeCCONJson, InvalidCCONError } from "../../cocos/core/data/ccon"; +import { BufferBuilder, CCON, decodeCCONBinary, parseCCONJson, encodeCCONBinary, encodeCCONJson, InvalidCCONError } from "../../cocos/serialization/ccon"; import { TextEncoder } from 'util'; describe(`CCON`, () => { diff --git a/tests/core/deserialize.test.ts b/tests/core/deserialize.test.ts index a105da754f1..e1c8abea181 100644 --- a/tests/core/deserialize.test.ts +++ b/tests/core/deserialize.test.ts @@ -1,8 +1,8 @@ import { CCClass, ccenum } from '../../cocos/core'; import { property } from '../../cocos/core/data/class-decorator'; import { ccclass, type } from '../../cocos/core/data/decorators'; -import { deserialize } from '../../cocos/core/data/deserialize'; -import { BitMask, ccbitmask } from '../../cocos/core/value-types/bitmask'; +import { deserialize } from '../../cocos/serialization/deserialize'; +import { BitMask } from '../../cocos/core/value-types/bitmask'; describe('Deserialize', () => { test('Object array element', () => { diff --git a/tests/core/editor-extendable.test.ts b/tests/core/editor-extendable.test.ts index 201037c8c5a..ad28a907e40 100644 --- a/tests/core/editor-extendable.test.ts +++ b/tests/core/editor-extendable.test.ts @@ -1,4 +1,5 @@ -import { EditorExtendable, editorExtrasTag } from "../../cocos/core/data/editor-extendable"; +import { EditorExtendable } from "../../cocos/core/data/editor-extendable"; +import { editorExtrasTag } from "../../cocos/core/data/editor-extras-tag"; describe('Editor extendable', () => { test('Serialize', () => { diff --git a/tests/core/instantiate.test.ts b/tests/core/instantiate.test.ts index 7130f07292d..0fae5a30cca 100644 --- a/tests/core/instantiate.test.ts +++ b/tests/core/instantiate.test.ts @@ -1,4 +1,4 @@ -import { instantiate } from "../../cocos/core"; +import { instantiate } from "../../cocos/serialization"; import { CurveRange } from "../../cocos/particle"; test('Bugfix cocos/3d-tasks#12248; Instantiate a property of fast defined type', () => { diff --git a/tests/core/serialization/deserialize-capacity.test.ts b/tests/core/serialization/deserialize-capacity.test.ts index f277b8244df..52bc6b149b9 100644 --- a/tests/core/serialization/deserialize-capacity.test.ts +++ b/tests/core/serialization/deserialize-capacity.test.ts @@ -1,7 +1,7 @@ import { ccclass } from '../../../cocos/core/data/decorators'; import { property } from '../../../cocos/core/data/decorators/property'; -import { deserialize } from '../../../cocos/core/data/deserialize'; +import { deserialize } from '../../../cocos/serialization/deserialize'; @ccclass('Foo') class Foo { @property foo!: Foo | null; } diff --git a/tests/core/serialization/deserialize-missing-class.test.ts b/tests/core/serialization/deserialize-missing-class.test.ts index 1d0c95abac4..4809ebe56eb 100644 --- a/tests/core/serialization/deserialize-missing-class.test.ts +++ b/tests/core/serialization/deserialize-missing-class.test.ts @@ -1,6 +1,6 @@ import { MissingScript } from '../../../cocos/misc'; -import { deserialize } from '../../../cocos/core/data/deserialize'; +import { deserialize } from '../../../cocos/serialization/deserialize'; import { js } from '../../../cocos/core/utils/js'; describe(`Missing class deserialization`, () => { diff --git a/tests/core/serialization/deserialize-ref-0.test.ts b/tests/core/serialization/deserialize-ref-0.test.ts index 849c480d6f4..f9bf6bbd358 100644 --- a/tests/core/serialization/deserialize-ref-0.test.ts +++ b/tests/core/serialization/deserialize-ref-0.test.ts @@ -1,6 +1,6 @@ import { property } from '../../../cocos/core/data/class-decorator'; -import { deserialize } from '../../../cocos/core/data/deserialize'; +import { deserialize } from '../../../cocos/serialization/deserialize'; import { js } from '../../../cocos/core/utils/js'; import { ccclassAutoNamed } from './shared/utils'; diff --git a/tests/core/serialization/run-test.ts b/tests/core/serialization/run-test.ts index 5ac958501ac..e507b908b92 100644 --- a/tests/core/serialization/run-test.ts +++ b/tests/core/serialization/run-test.ts @@ -1,7 +1,7 @@ import fs from 'fs-extra'; -import { CCON } from '../../../cocos/core/data/ccon'; -import { deserialize } from '../../../cocos/core/data/deserialize'; +import { CCON } from '../../../cocos/serialization/ccon'; +import { deserialize } from '../../../cocos/serialization/deserialize'; import { calculatePortSnapshotPath } from './shared/port'; import type { RunTest } from './shared/utils'; import { mockEnv } from '../../utils/mock-cc-env'; From 4ff48eb8da70bb2cea03b483b06d7bf13d0365d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E6=A3=AE=E6=96=8C?= Date: Tue, 1 Nov 2022 17:53:49 +0800 Subject: [PATCH 119/829] V3.7 before generate probe would close the edit area box (#13199) * when generate probe, close edit area box * scene-global add clearSHCoefficients --- cocos/scene-graph/scene-globals.ts | 12 ++++++++++++ .../inspector/components/light-probe-group-footer.js | 5 +++++ 2 files changed, 17 insertions(+) diff --git a/cocos/scene-graph/scene-globals.ts b/cocos/scene-graph/scene-globals.ts index 6c46e6a39a4..35b2400d981 100644 --- a/cocos/scene-graph/scene-globals.ts +++ b/cocos/scene-graph/scene-globals.ts @@ -1251,6 +1251,18 @@ export class LightProbeInfo { this._resource.initialize(this); } + public clearSHCoefficients () { + if (!this._data) { + return; + } + + const probes = this._data.probes; + for (let i = 0; i < probes.length; i++) { + const probe = probes[i]; + probe.coefficients.length = 0; + } + } + public addGroup (group: LightProbeGroup): boolean { if (!group) { return false; diff --git a/editor/inspector/components/light-probe-group-footer.js b/editor/inspector/components/light-probe-group-footer.js index ef564d47b9a..3d8d3516375 100644 --- a/editor/inspector/components/light-probe-group-footer.js +++ b/editor/inspector/components/light-probe-group-footer.js @@ -57,6 +57,11 @@ exports.ready = function() { }); if (result.response === 0) { + // 先关闭盒子模式 + if (panel.sceneProbeBoxMode) { + await Editor.Message.request('scene', 'toggle-light-probe-bounding-box-edit-mode', !panel.sceneProbeBoxMode); + } + const uuidObject = panel.dump.value.uuid; const uuids = uuidObject.values ? uuidObject.values : [uuidObject.value]; for (const uuid of uuids) { From 21e9f541929a9900bb0536c718d4ed1b28bd594e Mon Sep 17 00:00:00 2001 From: minggo Date: Tue, 1 Nov 2022 18:04:09 +0800 Subject: [PATCH 120/829] fix ccon path (#13206) --- editor/exports/serialization.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/editor/exports/serialization.ts b/editor/exports/serialization.ts index 144356819b1..cc3ac576bab 100644 --- a/editor/exports/serialization.ts +++ b/editor/exports/serialization.ts @@ -6,4 +6,4 @@ export { BufferBuilder, decodeCCONBinary, parseCCONJson, -} from '../../cocos/core/data/ccon'; +} from '../../cocos/serialization/ccon'; From 5461e5490c19399dc4a3ed266b85c90dd0562fc9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=90=89=E6=9E=97?= <798080536@qq.com> Date: Tue, 1 Nov 2022 19:03:17 +0800 Subject: [PATCH 121/829] fix jsb error & undo error (#13207) * fix jsb error & undo error --- cocos/gi/light-probe/light-probe.ts | 4 +- native/cocos/bindings/auto/jsb_gi_auto.cpp | 93 ++++++++++------ native/cocos/gi/light-probe/Delaunay.h | 2 +- native/cocos/gi/light-probe/LightProbe.cpp | 7 ++ native/cocos/gi/light-probe/LightProbe.h | 2 + native/tools/swig-config/gi.i | 2 + package-lock.json | 118 ++++++++++----------- 7 files changed, 133 insertions(+), 95 deletions(-) diff --git a/cocos/gi/light-probe/light-probe.ts b/cocos/gi/light-probe/light-probe.ts index a2c67f5c6af..7c1a8a0c3a5 100644 --- a/cocos/gi/light-probe/light-probe.ts +++ b/cocos/gi/light-probe/light-probe.ts @@ -23,7 +23,7 @@ THE SOFTWARE. */ -import { ccclass, serializable } from 'cc.decorator'; +import { ccclass, serializable, type } from 'cc.decorator'; import { Vertex, Tetrahedron, Delaunay } from './delaunay'; import { PolynomialSolver } from './polynomial-solver'; import { LightProbeInfo } from '../../scene-graph/scene-globals'; @@ -239,8 +239,10 @@ export class LightProbesData { } @serializable + @type([Vertex]) private _probes: Vertex[] = []; @serializable + @type([Tetrahedron]) private _tetrahedrons: Tetrahedron[] = []; } cclegacy.internal.LightProbesData = LightProbesData; diff --git a/native/cocos/bindings/auto/jsb_gi_auto.cpp b/native/cocos/bindings/auto/jsb_gi_auto.cpp index 50f9de6c442..0dfd047a593 100644 --- a/native/cocos/bindings/auto/jsb_gi_auto.cpp +++ b/native/cocos/bindings/auto/jsb_gi_auto.cpp @@ -61,6 +61,8 @@ #include "bindings/manual/jsb_global.h" +#include "bindings/auto/jsb_geometry_auto.h" +#include "bindings/auto/jsb_cocos_auto.h" #include "bindings/auto/jsb_gi_auto.h" using namespace cc; @@ -152,7 +154,7 @@ se::Class* __jsb_cc_gi_Vertex_class = nullptr; se::Object* __jsb_cc_gi_Vertex_proto = nullptr; SE_DECLARE_FINALIZE_FUNC(js_delete_cc_gi_Vertex) -static bool js_cc_gi_Vertex_position_set(se::State& s) +static bool js_cc_gi_Vertex_coefficients_set(se::State& s) { CC_UNUSED bool ok = true; const auto& args = s.args(); @@ -163,16 +165,16 @@ static bool js_cc_gi_Vertex_position_set(se::State& s) SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1->position, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vertex_position_set,2,SWIGTYPE_Vec3"); + ok &= sevalue_to_native(args[0], &arg1->coefficients, s.thisObject()); + SE_PRECONDITION2(ok, false, "Vertex_coefficients_set,2,SWIGTYPE_ccstd__vectorT_Vec3_t"); return true; } -SE_BIND_PROP_SET(js_cc_gi_Vertex_position_set) +SE_BIND_PROP_SET(js_cc_gi_Vertex_coefficients_set) -static bool js_cc_gi_Vertex_position_get(se::State& s) +static bool js_cc_gi_Vertex_coefficients_get(se::State& s) { CC_UNUSED bool ok = true; cc::gi::Vertex *arg1 = (cc::gi::Vertex *) NULL ; @@ -180,17 +182,17 @@ static bool js_cc_gi_Vertex_position_get(se::State& s) arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(arg1->position, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Vertex_position_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->position, s.thisObject(), s.rval()); + ok &= nativevalue_to_se(arg1->coefficients, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "Vertex_coefficients_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(arg1->coefficients, s.thisObject(), s.rval()); return true; } -SE_BIND_PROP_GET(js_cc_gi_Vertex_position_get) +SE_BIND_PROP_GET(js_cc_gi_Vertex_coefficients_get) -static bool js_cc_gi_Vertex_normal_set(se::State& s) +static bool js_cc_gi_Vertex_position_set(se::State& s) { CC_UNUSED bool ok = true; const auto& args = s.args(); @@ -201,16 +203,16 @@ static bool js_cc_gi_Vertex_normal_set(se::State& s) SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1->normal, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vertex_normal_set,2,SWIGTYPE_Vec3"); + ok &= sevalue_to_native(args[0], &arg1->position, s.thisObject()); + SE_PRECONDITION2(ok, false, "Vertex_position_set,2,SWIGTYPE_Vec3"); return true; } -SE_BIND_PROP_SET(js_cc_gi_Vertex_normal_set) +SE_BIND_PROP_SET(js_cc_gi_Vertex_position_set) -static bool js_cc_gi_Vertex_normal_get(se::State& s) +static bool js_cc_gi_Vertex_position_get(se::State& s) { CC_UNUSED bool ok = true; cc::gi::Vertex *arg1 = (cc::gi::Vertex *) NULL ; @@ -218,17 +220,17 @@ static bool js_cc_gi_Vertex_normal_get(se::State& s) arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(arg1->normal, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Vertex_normal_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->normal, s.thisObject(), s.rval()); + ok &= nativevalue_to_se(arg1->position, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "Vertex_position_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(arg1->position, s.thisObject(), s.rval()); return true; } -SE_BIND_PROP_GET(js_cc_gi_Vertex_normal_get) +SE_BIND_PROP_GET(js_cc_gi_Vertex_position_get) -static bool js_cc_gi_Vertex_coefficients_set(se::State& s) +static bool js_cc_gi_Vertex_normal_set(se::State& s) { CC_UNUSED bool ok = true; const auto& args = s.args(); @@ -239,16 +241,16 @@ static bool js_cc_gi_Vertex_coefficients_set(se::State& s) SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1->coefficients, s.thisObject()); - SE_PRECONDITION2(ok, false, "Vertex_coefficients_set,2,SWIGTYPE_ccstd__vectorT_Vec3_t"); + ok &= sevalue_to_native(args[0], &arg1->normal, s.thisObject()); + SE_PRECONDITION2(ok, false, "Vertex_normal_set,2,SWIGTYPE_Vec3"); return true; } -SE_BIND_PROP_SET(js_cc_gi_Vertex_coefficients_set) +SE_BIND_PROP_SET(js_cc_gi_Vertex_normal_set) -static bool js_cc_gi_Vertex_coefficients_get(se::State& s) +static bool js_cc_gi_Vertex_normal_get(se::State& s) { CC_UNUSED bool ok = true; cc::gi::Vertex *arg1 = (cc::gi::Vertex *) NULL ; @@ -256,15 +258,15 @@ static bool js_cc_gi_Vertex_coefficients_get(se::State& s) arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(arg1->coefficients, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "Vertex_coefficients_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->coefficients, s.thisObject(), s.rval()); + ok &= nativevalue_to_se(arg1->normal, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "Vertex_normal_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(arg1->normal, s.thisObject(), s.rval()); return true; } -SE_BIND_PROP_GET(js_cc_gi_Vertex_coefficients_get) +SE_BIND_PROP_GET(js_cc_gi_Vertex_normal_get) static bool js_new_cc_gi_Vertex__SWIG_0(se::State& s) // NOLINT(readability-identifier-naming) { @@ -354,21 +356,21 @@ bool sevalue_to_native(const se::Value &from, cc::gi::Vertex * to, se::Object *c se::Value field; bool ok = true; - json->getProperty("position", &field, true); + json->getProperty("coefficients", &field, true); if (!field.isNullOrUndefined()) { - ok &= sevalue_to_native(field, &(to->position), ctx); + ok &= sevalue_to_native(field, &(to->coefficients), ctx); } - json->getProperty("normal", &field, true); + json->getProperty("position", &field, true); if (!field.isNullOrUndefined()) { - ok &= sevalue_to_native(field, &(to->normal), ctx); + ok &= sevalue_to_native(field, &(to->position), ctx); } - json->getProperty("coefficients", &field, true); + json->getProperty("normal", &field, true); if (!field.isNullOrUndefined()) { - ok &= sevalue_to_native(field, &(to->coefficients), ctx); + ok &= sevalue_to_native(field, &(to->normal), ctx); } @@ -379,9 +381,9 @@ bool sevalue_to_native(const se::Value &from, cc::gi::Vertex * to, se::Object *c bool js_register_cc_gi_Vertex(se::Object* obj) { auto* cls = se::Class::create("Vertex", obj, nullptr, _SE(js_new_Vertex)); + cls->defineProperty("coefficients", _SE(js_cc_gi_Vertex_coefficients_get), _SE(js_cc_gi_Vertex_coefficients_set)); cls->defineProperty("position", _SE(js_cc_gi_Vertex_position_get), _SE(js_cc_gi_Vertex_position_set)); cls->defineProperty("normal", _SE(js_cc_gi_Vertex_normal_get), _SE(js_cc_gi_Vertex_normal_set)); - cls->defineProperty("coefficients", _SE(js_cc_gi_Vertex_coefficients_get), _SE(js_cc_gi_Vertex_coefficients_set)); @@ -2692,6 +2694,28 @@ static bool js_cc_gi_LightProbeInfo_activate(se::State& s) } SE_BIND_FUNC(js_cc_gi_LightProbeInfo_activate) +static bool js_cc_gi_LightProbeInfo_clearSHCoefficients(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::gi::LightProbeInfo *arg1 = (cc::gi::LightProbeInfo *) NULL ; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + (arg1)->clearSHCoefficients(); + + + return true; +} +SE_BIND_FUNC(js_cc_gi_LightProbeInfo_clearSHCoefficients) + static bool js_cc_gi_LightProbeInfo__enabled_set(se::State& s) { CC_UNUSED bool ok = true; @@ -3379,6 +3403,7 @@ bool js_register_cc_gi_LightProbeInfo(se::Object* obj) { cls->defineProperty("data", _SE(js_cc_gi_LightProbeInfo_data_get), _SE(js_cc_gi_LightProbeInfo_data_set)); cls->defineFunction("activate", _SE(js_cc_gi_LightProbeInfo_activate)); + cls->defineFunction("clearSHCoefficients", _SE(js_cc_gi_LightProbeInfo_clearSHCoefficients)); diff --git a/native/cocos/gi/light-probe/Delaunay.h b/native/cocos/gi/light-probe/Delaunay.h index b50178aae61..95a35d9dd3c 100644 --- a/native/cocos/gi/light-probe/Delaunay.h +++ b/native/cocos/gi/light-probe/Delaunay.h @@ -38,9 +38,9 @@ namespace gi { class Delaunay; struct Vertex { + ccstd::vector coefficients; Vec3 position; Vec3 normal; - ccstd::vector coefficients; Vertex() = default; explicit Vertex(const Vec3 &pos) diff --git a/native/cocos/gi/light-probe/LightProbe.cpp b/native/cocos/gi/light-probe/LightProbe.cpp index 31081edf199..3395ab142ba 100644 --- a/native/cocos/gi/light-probe/LightProbe.cpp +++ b/native/cocos/gi/light-probe/LightProbe.cpp @@ -215,5 +215,12 @@ void LightProbeInfo::activate(LightProbes *resource) { _resource->initialize(this); } +void LightProbeInfo::clearSHCoefficients() { + auto &probes = _data.getProbes(); + for (auto &probe : probes) { + probe.coefficients.clear(); + } +} + } // namespace gi } // namespace cc diff --git a/native/cocos/gi/light-probe/LightProbe.h b/native/cocos/gi/light-probe/LightProbe.h index c6b4eead3ac..b314310c4ae 100644 --- a/native/cocos/gi/light-probe/LightProbe.h +++ b/native/cocos/gi/light-probe/LightProbe.h @@ -141,6 +141,8 @@ class LightProbeInfo : public RefCounted { void activate(LightProbes *resource); + void clearSHCoefficients(); + inline void setEnabled(bool val) { if (_enabled == val) { return; diff --git a/native/tools/swig-config/gi.i b/native/tools/swig-config/gi.i index ef0f020f3dc..650049ec074 100644 --- a/native/tools/swig-config/gi.i +++ b/native/tools/swig-config/gi.i @@ -15,6 +15,8 @@ // Insert code at the beginning of generated source file (.cpp) %{ +#include "bindings/auto/jsb_geometry_auto.h" +#include "bindings/auto/jsb_cocos_auto.h" #include "bindings/auto/jsb_gi_auto.h" using namespace cc; diff --git a/package-lock.json b/package-lock.json index 6cffd50de4c..48dcd68af2d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1810,13 +1810,13 @@ "dependencies": { "ansi-regex": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { @@ -1825,7 +1825,7 @@ }, "cliui": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "resolved": "https://registry.npmmirror.com/cliui/-/cliui-6.0.0.tgz", "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, "requires": { @@ -1836,7 +1836,7 @@ }, "color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { @@ -1845,13 +1845,13 @@ }, "color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "find-up": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { @@ -1861,7 +1861,7 @@ }, "fs-extra": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-8.1.0.tgz", "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, "requires": { @@ -1872,7 +1872,7 @@ }, "get-caller-file": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "resolved": "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, @@ -1887,19 +1887,19 @@ }, "is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, "json5": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.1.tgz", "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", "dev": true }, "locate-path": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { @@ -1908,7 +1908,7 @@ }, "p-locate": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { @@ -1917,19 +1917,19 @@ }, "path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, "require-main-filename": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "resolved": "https://registry.npmmirror.com/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, "resolve": { "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.1.tgz", "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "dev": true, "requires": { @@ -1949,7 +1949,7 @@ }, "string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { @@ -1960,7 +1960,7 @@ }, "strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { @@ -1969,13 +1969,13 @@ }, "which-module": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "resolved": "https://registry.npmmirror.com/which-module/-/which-module-2.0.0.tgz", "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", "dev": true }, "wrap-ansi": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz", "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "requires": { @@ -1986,13 +1986,13 @@ }, "y18n": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "resolved": "https://registry.npmmirror.com/y18n/-/y18n-4.0.3.tgz", "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true }, "yargs": { "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "resolved": "https://registry.npmmirror.com/yargs/-/yargs-15.4.1.tgz", "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, "requires": { @@ -2011,7 +2011,7 @@ }, "yargs-parser": { "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-18.1.3.tgz", "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, "requires": { @@ -4924,7 +4924,7 @@ }, "abab": { "version": "2.0.6", - "resolved": "https://registry.npmmirror.com/abab/-/abab-2.0.6.tgz", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", "dev": true }, @@ -4936,7 +4936,7 @@ }, "acorn-globals": { "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/acorn-globals/-/acorn-globals-6.0.0.tgz", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", "dev": true, "requires": { @@ -5027,7 +5027,7 @@ }, "ansi-regex": { "version": "2.1.1", - "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, @@ -5338,7 +5338,7 @@ }, "asynckit": { "version": "0.4.0", - "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "dev": true }, @@ -5679,7 +5679,7 @@ }, "browser-process-hrtime": { "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", "dev": true }, @@ -6316,7 +6316,7 @@ }, "combined-stream": { "version": "1.0.8", - "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, "requires": { @@ -6530,7 +6530,7 @@ }, "cssstyle": { "version": "2.3.0", - "resolved": "https://registry.npmmirror.com/cssstyle/-/cssstyle-2.3.0.tgz", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", "dev": true, "requires": { @@ -6539,7 +6539,7 @@ "dependencies": { "cssom": { "version": "0.3.8", - "resolved": "https://registry.npmmirror.com/cssom/-/cssom-0.3.8.tgz", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", "dev": true } @@ -6584,7 +6584,7 @@ }, "decimal.js": { "version": "10.3.1", - "resolved": "https://registry.npmmirror.com/decimal.js/-/decimal.js-10.3.1.tgz", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", "dev": true }, @@ -6717,7 +6717,7 @@ }, "delayed-stream": { "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true }, @@ -7085,7 +7085,7 @@ }, "escodegen": { "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/escodegen/-/escodegen-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", "dev": true, "requires": { @@ -7098,13 +7098,13 @@ "dependencies": { "estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true }, "source-map": { "version": "0.6.1", - "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "optional": true @@ -10382,7 +10382,7 @@ }, "is-potential-custom-element-name": { "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true }, @@ -14953,7 +14953,7 @@ }, "jsdom": { "version": "19.0.0", - "resolved": "https://registry.npmmirror.com/jsdom/-/jsdom-19.0.0.tgz", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-19.0.0.tgz", "integrity": "sha512-RYAyjCbxy/vri/CfnjUWJQQtZ3LKlLnDqj+9XLNnJPgEGeirZs3hllKR20re8LUZ6o1b1X4Jat+Qd26zmP41+A==", "dev": true, "requires": { @@ -14994,7 +14994,7 @@ }, "acorn": { "version": "8.7.1", - "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.7.1.tgz", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", "dev": true }, @@ -15207,7 +15207,7 @@ }, "kind-of": { "version": "6.0.2", - "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz", "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=", "dev": true }, @@ -15281,7 +15281,7 @@ }, "levn": { "version": "0.3.0", - "resolved": "https://registry.npmmirror.com/levn/-/levn-0.3.0.tgz", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", "dev": true, "requires": { @@ -15589,13 +15589,13 @@ }, "mime-db": { "version": "1.52.0", - "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true }, "mime-types": { "version": "2.1.35", - "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, "requires": { @@ -15604,7 +15604,7 @@ }, "mimic-fn": { "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, @@ -15801,7 +15801,7 @@ }, "nwsapi": { "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/nwsapi/-/nwsapi-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", "dev": true }, @@ -15995,7 +15995,7 @@ }, "onetime": { "version": "5.1.2", - "resolved": "https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "requires": { @@ -16021,7 +16021,7 @@ }, "optionator": { "version": "0.8.3", - "resolved": "https://registry.npmmirror.com/optionator/-/optionator-0.8.3.tgz", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dev": true, "requires": { @@ -16179,7 +16179,7 @@ }, "parse5": { "version": "6.0.1", - "resolved": "https://registry.npmmirror.com/parse5/-/parse5-6.0.1.tgz", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true }, @@ -16213,7 +16213,7 @@ }, "path-exists": { "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true }, @@ -16469,7 +16469,7 @@ }, "prelude-ls": { "version": "1.1.2", - "resolved": "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.1.2.tgz", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", "dev": true }, @@ -16535,7 +16535,7 @@ }, "psl": { "version": "1.8.0", - "resolved": "https://registry.npmmirror.com/psl/-/psl-1.8.0.tgz", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", "dev": true }, @@ -16607,7 +16607,7 @@ }, "punycode": { "version": "2.1.1", - "resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.1.1.tgz", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, @@ -17281,7 +17281,7 @@ }, "saxes": { "version": "5.0.1", - "resolved": "https://registry.npmmirror.com/saxes/-/saxes-5.0.1.tgz", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", "dev": true, "requires": { @@ -18099,7 +18099,7 @@ }, "symbol-tree": { "version": "3.2.4", - "resolved": "https://registry.npmmirror.com/symbol-tree/-/symbol-tree-3.2.4.tgz", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, @@ -18214,13 +18214,13 @@ }, "source-map": { "version": "0.6.1", - "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, "source-map-support": { "version": "0.5.21", - "resolved": "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "requires": { @@ -18430,7 +18430,7 @@ }, "tmpl": { "version": "1.0.5", - "resolved": "https://registry.npmmirror.com/tmpl/-/tmpl-1.0.5.tgz", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", "dev": true }, @@ -18503,7 +18503,7 @@ }, "tough-cookie": { "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/tough-cookie/-/tough-cookie-4.0.0.tgz", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", "dev": true, "requires": { @@ -19222,7 +19222,7 @@ }, "w3c-hr-time": { "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", "dev": true, "requires": { @@ -19480,7 +19480,7 @@ }, "xmlchars": { "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/xmlchars/-/xmlchars-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", "dev": true }, From 6d0a32c7e98941175db1e67a794bd7d3cf89fbb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B1=9F=E6=88=98?= <40414978+PatriceJiang@users.noreply.github.com> Date: Wed, 2 Nov 2022 09:42:57 +0800 Subject: [PATCH 122/829] include jsb_cocos_auto.h (#13205) --- native/tools/swig-config/dragonbones.i | 1 + native/tools/swig-config/pipeline.i | 1 + native/tools/swig-config/spine.i | 1 + 3 files changed, 3 insertions(+) diff --git a/native/tools/swig-config/dragonbones.i b/native/tools/swig-config/dragonbones.i index a360419018c..f10272bba79 100644 --- a/native/tools/swig-config/dragonbones.i +++ b/native/tools/swig-config/dragonbones.i @@ -16,6 +16,7 @@ %{ #include "bindings/auto/jsb_2d_auto.h" #include "bindings/auto/jsb_assets_auto.h" +#include "bindings/auto/jsb_cocos_auto.h" #include "bindings/auto/jsb_dragonbones_auto.h" %} diff --git a/native/tools/swig-config/pipeline.i b/native/tools/swig-config/pipeline.i index 882fdf8ef12..bd56cfd21e3 100644 --- a/native/tools/swig-config/pipeline.i +++ b/native/tools/swig-config/pipeline.i @@ -33,6 +33,7 @@ #include "bindings/auto/jsb_pipeline_auto.h" #include "bindings/auto/jsb_scene_auto.h" #include "bindings/auto/jsb_gfx_auto.h" +#include "bindings/auto/jsb_cocos_auto.h" #include "renderer/pipeline/PipelineUBO.h" using namespace cc; diff --git a/native/tools/swig-config/spine.i b/native/tools/swig-config/spine.i index 9662d23c702..84a8ad0d6be 100644 --- a/native/tools/swig-config/spine.i +++ b/native/tools/swig-config/spine.i @@ -16,6 +16,7 @@ %{ #include "bindings/auto/jsb_2d_auto.h" #include "bindings/auto/jsb_assets_auto.h" +#include "bindings/auto/jsb_cocos_auto.h" #include "bindings/auto/jsb_spine_auto.h" using namespace spine; %} From f71dd9db7fb7d9bb2f0e51483a6ce7dfde60f69d Mon Sep 17 00:00:00 2001 From: Cocos Robot <48829427+cocos-robot@users.noreply.github.com> Date: Wed, 2 Nov 2022 09:48:56 +0800 Subject: [PATCH 123/829] [ci skip][AUTO]: Automated code generating update: 10e175cbcee9400cd6f76abc7ed947e625771130 (#13205) (#13210) Co-authored-by: cocos-robot --- native/cocos/bindings/auto/jsb_dragonbones_auto.cpp | 1 + native/cocos/bindings/auto/jsb_pipeline_auto.cpp | 1 + native/cocos/bindings/auto/jsb_spine_auto.cpp | 1 + 3 files changed, 3 insertions(+) diff --git a/native/cocos/bindings/auto/jsb_dragonbones_auto.cpp b/native/cocos/bindings/auto/jsb_dragonbones_auto.cpp index 082d6f882e7..78381620ab1 100644 --- a/native/cocos/bindings/auto/jsb_dragonbones_auto.cpp +++ b/native/cocos/bindings/auto/jsb_dragonbones_auto.cpp @@ -63,6 +63,7 @@ #include "bindings/auto/jsb_2d_auto.h" #include "bindings/auto/jsb_assets_auto.h" +#include "bindings/auto/jsb_cocos_auto.h" #include "bindings/auto/jsb_dragonbones_auto.h" diff --git a/native/cocos/bindings/auto/jsb_pipeline_auto.cpp b/native/cocos/bindings/auto/jsb_pipeline_auto.cpp index 532adeb7799..d134dbacbad 100644 --- a/native/cocos/bindings/auto/jsb_pipeline_auto.cpp +++ b/native/cocos/bindings/auto/jsb_pipeline_auto.cpp @@ -64,6 +64,7 @@ #include "bindings/auto/jsb_pipeline_auto.h" #include "bindings/auto/jsb_scene_auto.h" #include "bindings/auto/jsb_gfx_auto.h" +#include "bindings/auto/jsb_cocos_auto.h" #include "renderer/pipeline/PipelineUBO.h" using namespace cc; diff --git a/native/cocos/bindings/auto/jsb_spine_auto.cpp b/native/cocos/bindings/auto/jsb_spine_auto.cpp index 5d0e867e35d..35891337a3b 100644 --- a/native/cocos/bindings/auto/jsb_spine_auto.cpp +++ b/native/cocos/bindings/auto/jsb_spine_auto.cpp @@ -63,6 +63,7 @@ #include "bindings/auto/jsb_2d_auto.h" #include "bindings/auto/jsb_assets_auto.h" +#include "bindings/auto/jsb_cocos_auto.h" #include "bindings/auto/jsb_spine_auto.h" using namespace spine; From e67aa089849e66ac46096f83d1e257127133cb29 Mon Sep 17 00:00:00 2001 From: bofeng-song Date: Wed, 2 Nov 2022 11:06:32 +0800 Subject: [PATCH 124/829] remove unneed code & fix objectSize can not set to scene's LodGroup (#13211) * fix wrong Lod's wrong size, if user doesn't call recalculatedBounds * remove unneed code & fix objectSize can not set to scene's LodGroup --- cocos/misc/lodgroup-component.ts | 3 ++- cocos/render-scene/scene/lod-group.ts | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/cocos/misc/lodgroup-component.ts b/cocos/misc/lodgroup-component.ts index cbf2b87dd32..f8a54f7e268 100644 --- a/cocos/misc/lodgroup-component.ts +++ b/cocos/misc/lodgroup-component.ts @@ -491,6 +491,8 @@ export class LODGroup extends Component { onLoad () { this._lodGroup.node = this.node; + // objectSize maybe initialized from deserialize + this._lodGroup.objectSize = this._objectSize; if (!this._eventRegistered) { this.node.on(NodeEventType.COMPONENT_REMOVED, this._onRemove, this); this._eventRegistered = true; @@ -519,7 +521,6 @@ export class LODGroup extends Component { onEnable () { this._attachToScene(); - // this.recalculateBounds(this); // cache lod for scene if (this.lodCount > 0 && this._lodGroup.lodCount < 1) { diff --git a/cocos/render-scene/scene/lod-group.ts b/cocos/render-scene/scene/lod-group.ts index e40ae941bb0..dad1321776a 100644 --- a/cocos/render-scene/scene/lod-group.ts +++ b/cocos/render-scene/scene/lod-group.ts @@ -114,10 +114,10 @@ export class LODGroup { } lockLODLevels (lockLev: number[]) { - this._lockedLODLevelVec = lockLev; + this._lockedLODLevelVec = lockLev; } - getLockedLODLevels (): number[] { + getLockedLODLevels (): readonly number[] { return this._lockedLODLevelVec; } From 5334b73a7dd31abf7887668bf7a1c2201e27704d Mon Sep 17 00:00:00 2001 From: minggo Date: Wed, 2 Nov 2022 11:16:40 +0800 Subject: [PATCH 125/829] fix missing exports (#13212) --- cocos/core/data/index.ts | 5 ----- cocos/core/data/utils/attribute.ts | 2 -- cocos/serialization/deserialize-dynamic.ts | 14 +++++++------- cocos/serialization/instantiate-jit.ts | 7 ++++--- 4 files changed, 11 insertions(+), 17 deletions(-) diff --git a/cocos/core/data/index.ts b/cocos/core/data/index.ts index 7f741d6ad42..99271c5fbd6 100644 --- a/cocos/core/data/index.ts +++ b/cocos/core/data/index.ts @@ -24,7 +24,6 @@ */ import * as _decorator from './class-decorator'; -import * as Attr from './utils/attribute'; import { legacyCC } from '../global-exports'; legacyCC._decorator = _decorator; @@ -32,10 +31,6 @@ export { _decorator }; export { CCClass, ENUM_TAG, BITMASK_TAG, isCCClassOrFastDefined } from './class'; export { CCObject, isCCObject, isValid } from './object'; export { CCInteger, CCFloat, CCBoolean, CCString } from './utils/attribute'; -/** - * @engineInternal - */ -export { Attr }; export { CompactValueTypeArray } from './utils/compact-value-type-array'; export { editorExtrasTag } from './editor-extras-tag'; export * from './utils/asserts'; diff --git a/cocos/core/data/utils/attribute.ts b/cocos/core/data/utils/attribute.ts index e1cae330f7c..2ece3db5812 100644 --- a/cocos/core/data/utils/attribute.ts +++ b/cocos/core/data/utils/attribute.ts @@ -40,7 +40,6 @@ export function createAttrsSingle (owner: Object, superAttrs?: any) { /** * @param subclass Should not have '__attrs__'. - * @engineInternal */ export function createAttrs (subclass: any) { if (typeof subclass !== 'function') { @@ -87,7 +86,6 @@ export function attr (constructor: any, propertyName: string): { [attributeName: /** * Returns a readonly meta object. - * @engineInternal */ export function getClassAttrs (constructor: any) { return (constructor.hasOwnProperty('__attrs__') && constructor.__attrs__) || createAttrs(constructor); diff --git a/cocos/serialization/deserialize-dynamic.ts b/cocos/serialization/deserialize-dynamic.ts index dcff1373f73..227ac1e87e2 100644 --- a/cocos/serialization/deserialize-dynamic.ts +++ b/cocos/serialization/deserialize-dynamic.ts @@ -25,7 +25,7 @@ */ import { EDITOR, TEST, DEV, DEBUG, JSB, PREVIEW, SUPPORT_JIT } from 'internal:constants'; -import { cclegacy, js, misc, CCClass, ENUM_TAG, BITMASK_TAG, sys, error, assertIsTrue, Attr, CustomSerializable, DeserializationContext, deserializeTag, SerializationInput } from '../core'; +import { cclegacy, js, misc, CCClass, ENUM_TAG, BITMASK_TAG, sys, error, assertIsTrue, CustomSerializable, DeserializationContext, deserializeTag, SerializationInput } from '../core'; import { MissingScript } from '../misc/missing-script'; import { Details } from './deserialize'; import { Platform } from '../../pal/system-info/enum-type'; @@ -76,7 +76,7 @@ export type CompiledDeserializeFn = ( const compileDeserialize = SUPPORT_JIT ? compileDeserializeJIT : compileDeserializeNative; -const DELIMITER = Attr.DELIMETER; +const DELIMITER = CCClass.Attr.DELIMETER; const POSTFIX_TYPE: `${typeof DELIMITER}type` = `${DELIMITER}type`; const POSTFIX_EDITOR_ONLY: `${typeof DELIMITER}editorOnly` = `${DELIMITER}editorOnly`; const POSTFIX_DEFAULT: `${typeof DELIMITER}default` = `${DELIMITER}default`; @@ -94,7 +94,7 @@ type AttrResult = { }; function compileDeserializeJIT (self: _Deserializer, klass: CCClassConstructor): CompiledDeserializeFn { - const attrs: AttrResult = Attr.getClassAttrs(klass); + const attrs: AttrResult = CCClass.Attr.getClassAttrs(klass); const props = klass.__values__; // self, obj, serializedData, klass @@ -140,7 +140,7 @@ function compileDeserializeJIT (self: _Deserializer, klass: CCClassConstructor Date: Wed, 2 Nov 2022 14:21:25 +0800 Subject: [PATCH 126/829] [fix] compile error in cocos runtime and optimize bake probe cubemap (#13208) --- cocos/misc/reflection-probe-component.ts | 38 ++++++++++++--- cocos/render-scene/scene/reflection-probe.ts | 46 ++++++------------- cocos/rendering/reflection-probe-manager.ts | 17 ++++--- .../reflection-probe/reflection-probe-flow.ts | 11 ++--- .../chunks/legacy/shading-standard-base.chunk | 2 +- .../light/Reflection Probe.prefab | 4 +- 6 files changed, 64 insertions(+), 54 deletions(-) diff --git a/cocos/misc/reflection-probe-component.ts b/cocos/misc/reflection-probe-component.ts index 470128e8f0c..8e1133d03e4 100644 --- a/cocos/misc/reflection-probe-component.ts +++ b/cocos/misc/reflection-probe-component.ts @@ -76,7 +76,7 @@ export enum ProbeResolution { @playOnFocus export class ReflectionProbe extends Component { @serializable - protected _resolution = 512; + protected _resolution = 256; @serializable protected _clearFlag = ProbeClearFlag.SKYBOX; @@ -253,7 +253,7 @@ export class ReflectionProbe extends Component { this.probe.initBakedTextures(); } if (this._sourceCamera && this.probeType === ProbeType.PLANAR) { - this.probe.switchProbeType(this.probeType, this.sourceCamera.camera); + this.probe.renderPlanarReflection(this.sourceCamera.camera); } } @@ -262,15 +262,41 @@ export class ReflectionProbe extends Component { } public update (dt: number) { - if (!EDITOR && this.probeType === ProbeType.CUBE) return; - if (this.node.hasChangedFlags) { - this.probe.updateBoundingBox(); + if (this.probeType === ProbeType.CUBE) { + if (EDITOR) { + if (this.node.hasChangedFlags) { + this.probe.updateBoundingBox(); + ReflectionProbeManager.probeManager.updateModes(this.probe); + } + } + } else { + if (EDITOR) { + const cameraLst: scene.Camera[]|undefined = this.node.scene.renderScene?.cameras; + if (cameraLst !== undefined) { + for (let i = 0; i < cameraLst.length; ++i) { + const camera:scene.Camera = cameraLst[i]; + if (camera.name === 'Editor Camera') { + this.probe.renderPlanarReflection(camera); + break; + } + } + } + } + if (this.node.hasChangedFlags) { + this.probe.updateBoundingBox(); + ReflectionProbeManager.probeManager.updateModes(this.probe); + } + } + } + + public onFocusInEditor () { + if (this.probeType === ProbeType.CUBE) { ReflectionProbeManager.probeManager.updateModes(this.probe); } } private _createProbe () { - if (this._probeId < 0 || ReflectionProbeManager.probeManager.exists(this._probeId)) { + if (this._probeId === -1 || ReflectionProbeManager.probeManager.exists(this._probeId)) { this._probeId = this.node.scene.getNewReflectionProbeId(); } this._probe = new scene.ReflectionProbe(this._probeId); diff --git a/cocos/render-scene/scene/reflection-probe.ts b/cocos/render-scene/scene/reflection-probe.ts index 1c5aeb28ce2..808dc794eff 100644 --- a/cocos/render-scene/scene/reflection-probe.ts +++ b/cocos/render-scene/scene/reflection-probe.ts @@ -43,26 +43,19 @@ export enum ProbeType { CUBE= 0, PLANAR= 1, } +// left right up down front back const cameraDir: Vec3[] = [ - new Vec3(0, -90, 0), new Vec3(0, 90, 0), - new Vec3(90, 0, 0), - new Vec3(-90, 0, 0), - new Vec3(0, 0, 0), + new Vec3(0, -90, 0), + + new Vec3(90, 180, 0), + new Vec3(-90, 180, 0), + new Vec3(0, 180, 0), + new Vec3(0, 0, 0), ]; -enum ProbeFaceIndex { - right = 0, - left = 1, - top = 2, - bottom = 3, - front = 4, - back = 5, -} export class ReflectionProbe { - public static probeFaceIndex = ProbeFaceIndex; - public bakedCubeTextures: RenderTexture[] = []; public realtimePlanarTexture: RenderTexture | null = null; @@ -286,10 +279,15 @@ export class ReflectionProbe { } } - public async captureCubemap () { + public captureCubemap () { this._renderObjects = []; this._resetCameraParams(); - await this._renderCubemap(); + this._attachCameraToScene(); + this._needRender = true; + legacyCC.director.once(legacyCC.Director.EVENT_END_FRAME, () => { + this._needRender = false; + this._detachCameraFromScene(); + }); } /** @@ -335,14 +333,6 @@ export class ReflectionProbe { return this._probeId; } - public async waitForNextFrame () { - return new Promise((resolve, reject) => { - legacyCC.director.once(legacyCC.Director.EVENT_END_FRAME, () => { - resolve(); - }); - }); - } - public renderArea (): Vec2 { if (this._probeType === ProbeType.PLANAR) { return new Vec2(this.realtimePlanarTexture!.width, this.realtimePlanarTexture!.height); @@ -399,14 +389,6 @@ export class ReflectionProbe { } } - private async _renderCubemap () { - this._attachCameraToScene(); - this._needRender = true; - await this.waitForNextFrame(); - this._needRender = false; - this._detachCameraFromScene(); - } - private _createCamera () { const root = legacyCC.director.root; if (!this._camera) { diff --git a/cocos/rendering/reflection-probe-manager.ts b/cocos/rendering/reflection-probe-manager.ts index ec44c1d9703..a184c0ce788 100644 --- a/cocos/rendering/reflection-probe-manager.ts +++ b/cocos/rendering/reflection-probe-manager.ts @@ -61,6 +61,7 @@ export class ReflectionProbeManager { } public exists (probeId: number): boolean { + if (this._probes.length === 0) return false; for (let i = 0; i < this._probes.length; i++) { if (this._probes[i].getProbeId() === probeId) { return true; @@ -122,13 +123,17 @@ export class ReflectionProbeManager { * @param probe update the texture for this probe */ public updateBakedCubemap (probe: ReflectionProbe) { - const models = this._getModelsByProbe(probe); if (!probe.cubemap) return; - for (let i = 0; i < models.length; i++) { - const model = models[i]; - const meshRender = model.node.getComponent(MeshRenderer); - if (meshRender) { - meshRender.updateProbeCubemap(probe.cubemap); + const scene = probe.node.scene.renderScene; + if (!scene) return; + for (let i = 0; i < scene.models.length; i++) { + const model = scene.models[i]; + if (model.node && model.worldBounds && intersect.aabbWithAABB(model.worldBounds, probe.boundingBox)) { + this._models.set(model, probe); + const meshRender = model.node.getComponent(MeshRenderer); + if (meshRender) { + meshRender.updateProbeCubemap(probe.cubemap); + } } } probe.needRefresh = false; diff --git a/cocos/rendering/reflection-probe/reflection-probe-flow.ts b/cocos/rendering/reflection-probe/reflection-probe-flow.ts index 150f92c8983..1309fe97445 100644 --- a/cocos/rendering/reflection-probe/reflection-probe-flow.ts +++ b/cocos/rendering/reflection-probe/reflection-probe-flow.ts @@ -62,13 +62,10 @@ export class ReflectionProbeFlow extends RenderFlow { if (camera.cameraType !== CameraType.REFLECTION_PROBE) { return; } - const probes = ReflectionProbeManager.probeManager.getProbes(); - for (let i = 0; i < probes.length; i++) { - const probe = probes[i]; - if (probe.needRender) { - if (EDITOR || probe.probeType === ProbeType.PLANAR) { - this._renderStage(probe); - } + const probe = ReflectionProbeManager.probeManager.getProbeByCamera(camera); + if (probe && probe.needRender) { + if (EDITOR || probe.probeType === ProbeType.PLANAR) { + this._renderStage(probe); } } } diff --git a/editor/assets/chunks/legacy/shading-standard-base.chunk b/editor/assets/chunks/legacy/shading-standard-base.chunk index f246806ecc1..b57c883c1a7 100644 --- a/editor/assets/chunks/legacy/shading-standard-base.chunk +++ b/editor/assets/chunks/legacy/shading-standard-base.chunk @@ -5,12 +5,12 @@ #include #include #include +#include #if CC_USE_IBL #include #include #include - #include #if CC_USE_DIFFUSEMAP #include diff --git a/editor/assets/default_prefab/light/Reflection Probe.prefab b/editor/assets/default_prefab/light/Reflection Probe.prefab index 81abe43e4a1..f8f47c404aa 100644 --- a/editor/assets/default_prefab/light/Reflection Probe.prefab +++ b/editor/assets/default_prefab/light/Reflection Probe.prefab @@ -67,7 +67,7 @@ "__prefab": { "__id__": 3 }, - "_resolution": 512, + "_resolution": 256, "_clearFlag": 14, "_backgroundColor": { "__type__": "cc.Color", @@ -86,7 +86,7 @@ "z": 1 }, "_sourceCamera": null, - "_probeId": 8, + "_probeId": -1, "_id": "" }, { From e3fcd288b8b65925dac62afe4b4b706289d9eea5 Mon Sep 17 00:00:00 2001 From: kaxifakl <63728902+kaxifakl@users.noreply.github.com> Date: Wed, 2 Nov 2022 15:54:49 +0800 Subject: [PATCH 127/829] fix toggle err function name (#13178) --- cocos/ui/toggle.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cocos/ui/toggle.ts b/cocos/ui/toggle.ts index 952ba3d292d..555c65c3462 100644 --- a/cocos/ui/toggle.ts +++ b/cocos/ui/toggle.ts @@ -185,7 +185,7 @@ export class Toggle extends Button { } } - public OnDestroy () { + public onDestroy () { const group = this._toggleContainer; if (group) { group.ensureValidState(); From ac4a090b334a52ef99e734067a037db0515cc9fa Mon Sep 17 00:00:00 2001 From: Gin Date: Wed, 2 Nov 2022 18:21:28 +0800 Subject: [PATCH 128/829] [Optimize] inspector property style in material dump (#13141) - related issue: https://github.com/cocos/3d-tasks/issues/14221 --- editor/inspector/assets/material.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/editor/inspector/assets/material.js b/editor/inspector/assets/material.js index 480297b155e..e778c237a5f 100644 --- a/editor/inspector/assets/material.js +++ b/editor/inspector/assets/material.js @@ -225,8 +225,12 @@ exports.methods = { const $section = $container.$children[i].querySelector('ui-section'); $section.appendChild($checkbox); - const $label = $section.querySelector('ui-label'); - $label.style.width = 'calc(var(--left-width) - 10px)'; + // header and switch element appear in `header` slot at the same time, keep the middle distance 12px + const $header = $section.querySelector('div[slot=header]'); + $header.style.width = 'auto'; + $header.style.flex = '1'; + $header.style.minWidth = '0'; + $header.style.marginRight = '12px'; } $container.$children[i].querySelectorAll('ui-prop').forEach(($prop) => { From a3092a4bf43760e068fcefc0e88d34b3a3325f04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A2=A8=E6=8A=92=E9=A2=96?= <37231523+moshuying@users.noreply.github.com> Date: Wed, 2 Nov 2022 18:29:27 +0800 Subject: [PATCH 129/829] [Bug] Fix all mini preview buffer alpha bug (#13143) --- editor/inspector/assets/material-header.js | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/editor/inspector/assets/material-header.js b/editor/inspector/assets/material-header.js index 0cedc584b9e..c1f55b52cb8 100644 --- a/editor/inspector/assets/material-header.js +++ b/editor/inspector/assets/material-header.js @@ -95,7 +95,7 @@ exports.methods = { * @param assetList * @param metaList */ -exports.update = async function(assetList, metaList) { +exports.update = async function (assetList, metaList) { const panel = this; panel.assetList = assetList; @@ -120,7 +120,7 @@ exports.update = async function(assetList, metaList) { /** * Method of initializing the panel */ -exports.ready = async function() { +exports.ready = async function () { const panel = this; callMaterialPreviewFunction('setLightEnable', true); @@ -179,12 +179,11 @@ exports.ready = async function() { Editor.Message.addBroadcastListener('material-inspector:change-dump', this.updatePreviewDataDirtyBind); }; -exports.close = function() { +exports.close = function () { const panel = this; callMaterialPreviewFunction('hide'); panel.resizeObserver.unobserve(panel.$.container); Editor.Message.removeBroadcastListener('material-inspector:change-dump', this.updatePreviewDataDirtyBind); // clear the canvas on close hook - const context = panel.$.canvas.getContext('2d'); - context.clearRect(0, 0, panel.$.canvas.width, panel.$.canvas.height); + panel.glPreview.destroyGL() }; From 392980a909e0f8753c740fcaf9616089de8b2ec9 Mon Sep 17 00:00:00 2001 From: changhua <39176194+changhua0118@users.noreply.github.com> Date: Wed, 2 Nov 2022 21:33:30 +0800 Subject: [PATCH 130/829] [Optimize] update lod inspector panel (#13216) * update lod inspector panel to fix screen size and optimization panel tips * update * if default object size is 0,run recalculateBounds --- cocos/misc/lodgroup-component.ts | 5 +- editor/i18n/en/components.js | 6 ++ editor/i18n/zh/components.js | 6 ++ editor/inspector/components.js | 2 +- .../{lodGroup => lod-group}/index.js | 27 +-------- .../{lodGroup => lod-group}/lod-item.js | 59 ++++++++++++++++--- .../multi-lod-group.js | 0 7 files changed, 70 insertions(+), 35 deletions(-) rename editor/inspector/components/{lodGroup => lod-group}/index.js (82%) rename editor/inspector/components/{lodGroup => lod-group}/lod-item.js (62%) rename editor/inspector/components/{lodGroup => lod-group}/multi-lod-group.js (100%) diff --git a/cocos/misc/lodgroup-component.ts b/cocos/misc/lodgroup-component.ts index f8a54f7e268..5fa40858648 100644 --- a/cocos/misc/lodgroup-component.ts +++ b/cocos/misc/lodgroup-component.ts @@ -201,7 +201,7 @@ export class LODGroup extends Component { * @en Object Size in local space, may be auto-calculated value from object bounding box or value from user input. */ @serializable - protected _objectSize = 1; + protected _objectSize = 0; /** *@en The array of LODs @@ -521,6 +521,9 @@ export class LODGroup extends Component { onEnable () { this._attachToScene(); + if (this.objectSize === 0) { + this.recalculateBounds(); + } // cache lod for scene if (this.lodCount > 0 && this._lodGroup.lodCount < 1) { diff --git a/editor/i18n/en/components.js b/editor/i18n/en/components.js index 875bb060027..3703f0c9c58 100644 --- a/editor/i18n/en/components.js +++ b/editor/i18n/en/components.js @@ -35,5 +35,11 @@ module.exports = { }, missScriptTip: 'Script compilation fails, please check the error message and correct it, the component will be automatically restored after correction.', + + lod: { + applyCameraSizeTip: 'Apply current node’s screen size on this LOD level. If it is less than the next level, it will apply the next level’s screen size percentage instead, as it is the minimum value for this level.If it is greater than the previous level, it will apply the previous level’s screen size percentage instead, as it is the maximum value for this level.', + applyCameraSizeLessThanMinimum: 'Current Camera size is less than its limit, applying current minimum instead. Please reduce lower LOD levels screen size and try again later.', + applyCameraSizeGreaterThanMaximum: 'Current Camera size is greater than its limit, applying current maximum instead. Please Increase higher LOD levels screen size and try again later.', + }, }, }; diff --git a/editor/i18n/zh/components.js b/editor/i18n/zh/components.js index c1326431ff6..8a28b50e32a 100644 --- a/editor/i18n/zh/components.js +++ b/editor/i18n/zh/components.js @@ -31,5 +31,11 @@ module.exports = { }, missScriptTip: "脚本编译失败,请检查报错信息并进行修正,该组件将在修正后自动还原。", + + lod: { + applyCameraSizeTip: '应用当前场景中此节点的屏幕比例于此 LOD 层级,如果当前屏占比小于下一层 LOD 比例,将应用为可以应用的最小值(下一层级比例),如果当前屏占比大于上一层 LOD 比例,将应用为可以应用的最大值(上一层级比例)', + applyCameraSizeLessThanMinimum: '当前屏占比小于目前层级能使用的最小值,无法设置,设置为目前层级能使用的最小值。请更新更低 LOD 层级的屏幕尺寸之后再次尝试。', + applyCameraSizeGreaterThanMaximum: '当前屏占比大于目前层级能使用的最大值,无法设置,设置为目前层级能使用的最大值。请更新更高 LOD 层级的屏幕尺寸之后再次尝试。', + }, }, }; diff --git a/editor/inspector/components.js b/editor/inspector/components.js index 0ac285836d1..4eb1b06d554 100644 --- a/editor/inspector/components.js +++ b/editor/inspector/components.js @@ -20,5 +20,5 @@ module.exports = { 'cc.WebView': join(__dirname, './components/webview.js'), 'cc.Widget': join(__dirname, './components/widget.js'), 'cc.Class': join(__dirname, './components/class.js'), - 'cc.LODGroup': join(__dirname, './components/lodGroup/index.js'), + 'cc.LODGroup': join(__dirname, './components/lod-group/index.js'), }; diff --git a/editor/inspector/components/lodGroup/index.js b/editor/inspector/components/lod-group/index.js similarity index 82% rename from editor/inspector/components/lodGroup/index.js rename to editor/inspector/components/lod-group/index.js index 9a8590961fd..0c54031e280 100644 --- a/editor/inspector/components/lodGroup/index.js +++ b/editor/inspector/components/lod-group/index.js @@ -160,12 +160,9 @@ exports.template = ` @@ -249,28 +246,6 @@ exports.ready = function() { Editor.Message.request('scene', 'lod-erase', that.dump.value.uuid.value, index); } }, - calculateRange(range, index) { - const that = this; - const LODs = that.dump.value.LODs.value; - if (range === 'min') { - const min = LODs[index + 1] ? LODs[index + 1].value.screenUsagePercentage.value : 0; - // If value < min, set the value to min, avoid affecting other lod - if (LODs[index].value.screenUsagePercentage.value < min) { - LODs[index].value.screenUsagePercentage.value = min; - that.updateDump(LODs[index].value.screenUsagePercentage); - } - return min * 100; - } else if (range === 'max') { - const max = LODs[index - 1] ? LODs[index - 1].value.screenUsagePercentage.values : 1; - // If value > max, set the value to max, avoid affecting other lod - if (LODs[index].value.screenUsagePercentage.value > max) { - LODs[index].value.screenUsagePercentage.value = max; - that.updateDump(LODs[index].value.screenUsagePercentage); - } - return max * 100; - } - return null; - }, }, }); }; diff --git a/editor/inspector/components/lodGroup/lod-item.js b/editor/inspector/components/lod-group/lod-item.js similarity index 62% rename from editor/inspector/components/lodGroup/lod-item.js rename to editor/inspector/components/lod-group/lod-item.js index 27630458920..4193e86d204 100644 --- a/editor/inspector/components/lodGroup/lod-item.js +++ b/editor/inspector/components/lod-group/lod-item.js @@ -21,12 +21,13 @@ exports.template = `
- Apply Current Camera Size + Apply Current Camera Size
@@ -59,11 +60,16 @@ exports.template = ` `; -exports.props = ['data', 'index', 'min', 'max', 'lodGroupId']; +exports.props = ['dump', 'index']; exports.data = function() { + const that = this; return { totalTriangles: 0, + data: that.dump.value.LODs.value[that.index], + minScreenUsagePercentage: null, + maxScreenUsagePercentage: null, + enableUpdateScreenUsagePercentage: false, }; }; @@ -78,18 +84,44 @@ exports.watch = { that.totalTriangles = res; }, }, + dump:{ + immediate: true, + deep: true, + handler(obj) { + const that = this; + that.enableUpdateScreenUsagePercentage = false; + if (obj.value.LODs.value[that.index].value.screenUsagePercentage.value) { + const LODs = obj.value.LODs.value; + const min = LODs[that.index + 1] ? LODs[that.index + 1].value.screenUsagePercentage.value : 0; + const max = LODs[that.index - 1] ? LODs[that.index - 1].value.screenUsagePercentage.value : null; + that.minScreenUsagePercentage = min * 100; + that.maxScreenUsagePercentage = max ? max * 100 : null; + } + that.$nextTick(() => { + that.data = obj.value.LODs.value[that.index]; + that.enableUpdateScreenUsagePercentage = true; + }); + }, + }, }; exports.computed = { cacheExpandId() { const that = this; - return `${that.lodGroupId}-lod-${that.index}`; + return `${that.dump.value.uuid.value}-lod-${that.index}`; + }, + screenUsagePercentageRef() { + const that = this; + return `screenUsagePercentage-${that.index}`; }, }; exports.methods = { onScreenSizeConfirm(event) { const that = this; + if (!that.enableUpdateScreenUsagePercentage) { + return; + } that.data.value.screenUsagePercentage.value = event.target.value / 100; that.updateDump(that.data.value.screenUsagePercentage); }, @@ -117,9 +149,22 @@ exports.methods = { // emit method is recommended to all lowercase, camel case may be automatically converted to lowercase resulting in failure to match that.$emit('update-lods', operator, that.index); }, - applyCameraSize() { + async applyCameraSize() { const that = this; - Editor.Message.send('scene', 'lod-apply-current-camera-size', that.lodGroupId, that.index); + let size = await Editor.Message.request('scene', 'lod-apply-current-camera-size', that.dump.value.uuid.value); + if (that.$refs[that.screenUsagePercentageRef]) { + const min = that.$refs[that.screenUsagePercentageRef].min / 100 || 0; + const max = that.$refs[that.screenUsagePercentageRef].max / 100 || null; + if (size < min) { + size = min; + console.log(Editor.I18n.t('ENGINE.components.lod.applyCameraSizeLessThanMinimum')); + } else if (size > max) { + size = max; + console.log(Editor.I18n.t('ENGINE.components.lod.applyCameraSizeGreaterThanMaximum')); + } + } + that.data.value.screenUsagePercentage.value = size; + that.updateDump(that.data.value.screenUsagePercentage); }, handleTriangleLabel(meshIndex) { const that = this; diff --git a/editor/inspector/components/lodGroup/multi-lod-group.js b/editor/inspector/components/lod-group/multi-lod-group.js similarity index 100% rename from editor/inspector/components/lodGroup/multi-lod-group.js rename to editor/inspector/components/lod-group/multi-lod-group.js From d848935a0758ac8372b897f951e8dc891beb8f23 Mon Sep 17 00:00:00 2001 From: Yiwen <15225434259xue@gmail.com> Date: Wed, 2 Nov 2022 21:50:54 +0800 Subject: [PATCH 131/829] Fix physics js binding configuration (#13227) --- .../cocos/bindings/auto/jsb_physics_auto.cpp | 6918 ++++++++++------- native/cocos/bindings/auto/jsb_physics_auto.h | 147 - native/tools/swig-config/physics.i | 12 +- 3 files changed, 3979 insertions(+), 3098 deletions(-) diff --git a/native/cocos/bindings/auto/jsb_physics_auto.cpp b/native/cocos/bindings/auto/jsb_physics_auto.cpp index 1b84b3fa0b7..1c47b192c66 100644 --- a/native/cocos/bindings/auto/jsb_physics_auto.cpp +++ b/native/cocos/bindings/auto/jsb_physics_auto.cpp @@ -65,2003 +65,2788 @@ -se::Class* __jsb_cc_physics_ILifecycle_class = nullptr; -se::Object* __jsb_cc_physics_ILifecycle_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_physics_ILifecycle) +se::Class* __jsb_cc_physics_World_class = nullptr; +se::Object* __jsb_cc_physics_World_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_physics_World) + +// js_ctor +static bool js_new_cc_physics_World(se::State& s) // NOLINT(readability-identifier-naming) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + + cc::physics::World *result; + result = (cc::physics::World *)new cc::physics::World(); + + + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); + return true; +} +SE_BIND_CTOR(js_new_cc_physics_World, __jsb_cc_physics_World_class, js_delete_cc_physics_World) -static bool js_delete_cc_physics_ILifecycle(se::State& s) +static bool js_delete_cc_physics_World(se::State& s) { // js_dtoroverride return true; } -SE_BIND_FINALIZE_FUNC(js_delete_cc_physics_ILifecycle) +SE_BIND_FINALIZE_FUNC(js_delete_cc_physics_World) -static bool js_cc_physics_ILifecycle_onEnable(se::State& s) +static bool js_cc_physics_World_setGravity(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::ILifecycle *arg1 = (cc::physics::ILifecycle *) NULL ; + cc::physics::World *arg1 = (cc::physics::World *) NULL ; + float arg2 ; + float arg3 ; + float arg4 ; - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + if(argc != 3) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - (arg1)->onEnable(); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "World_setGravity,2,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "World_setGravity,3,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[2], &arg4, nullptr); + SE_PRECONDITION2(ok, false, "World_setGravity,4,SWIGTYPE_float"); + (arg1)->setGravity(arg2,arg3,arg4); return true; } -SE_BIND_FUNC(js_cc_physics_ILifecycle_onEnable) +SE_BIND_FUNC(js_cc_physics_World_setGravity) -static bool js_cc_physics_ILifecycle_onDisable(se::State& s) +static bool js_cc_physics_World_setAllowSleep(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::ILifecycle *arg1 = (cc::physics::ILifecycle *) NULL ; + cc::physics::World *arg1 = (cc::physics::World *) NULL ; + bool arg2 ; - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - (arg1)->onDisable(); + // %typemap(in) bool + ok &= sevalue_to_native(args[0], &arg2); + SE_PRECONDITION2(ok, false, "World_setAllowSleep,2,SWIGTYPE_bool"); + (arg1)->setAllowSleep(arg2); return true; } -SE_BIND_FUNC(js_cc_physics_ILifecycle_onDisable) +SE_BIND_FUNC(js_cc_physics_World_setAllowSleep) -static bool js_cc_physics_ILifecycle_onDestroy(se::State& s) +static bool js_cc_physics_World_step(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::ILifecycle *arg1 = (cc::physics::ILifecycle *) NULL ; + cc::physics::World *arg1 = (cc::physics::World *) NULL ; + float arg2 ; - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - (arg1)->onDestroy(); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "World_step,2,SWIGTYPE_float"); + (arg1)->step(arg2); return true; } -SE_BIND_FUNC(js_cc_physics_ILifecycle_onDestroy) +SE_BIND_FUNC(js_cc_physics_World_step) -bool js_register_cc_physics_ILifecycle(se::Object* obj) { - auto* cls = se::Class::create("ILifecycle", obj, nullptr, nullptr); - - - cls->defineFunction("onEnable", _SE(js_cc_physics_ILifecycle_onEnable)); - cls->defineFunction("onDisable", _SE(js_cc_physics_ILifecycle_onDisable)); - cls->defineFunction("onDestroy", _SE(js_cc_physics_ILifecycle_onDestroy)); - - - +static bool js_cc_physics_World_emitEvents(se::State& s) +{ + // js_function - cls->defineFinalizeFunction(_SE(js_delete_cc_physics_ILifecycle)); + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::World *arg1 = (cc::physics::World *) NULL ; + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + (arg1)->emitEvents(); - cls->install(); - JSBClassType::registerClass(cls); - __jsb_cc_physics_ILifecycle_proto = cls->getProto(); - __jsb_cc_physics_ILifecycle_class = cls; - se::ScriptEngine::getInstance()->clearException(); return true; } +SE_BIND_FUNC(js_cc_physics_World_emitEvents) - -se::Class* __jsb_cc_physics_TriggerEventPair_class = nullptr; -se::Object* __jsb_cc_physics_TriggerEventPair_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_physics_TriggerEventPair) - -static bool js_cc_physics_TriggerEventPair_shapeA_set(se::State& s) +static bool js_cc_physics_World_syncSceneToPhysics(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::TriggerEventPair *arg1 = (cc::physics::TriggerEventPair *) NULL ; + cc::physics::World *arg1 = (cc::physics::World *) NULL ; - arg1 = SE_THIS_OBJECT(s); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1->shapeA, s.thisObject()); - SE_PRECONDITION2(ok, false, "TriggerEventPair_shapeA_set,2,SWIGTYPE_uint32_t"); - + (arg1)->syncSceneToPhysics(); return true; } -SE_BIND_PROP_SET(js_cc_physics_TriggerEventPair_shapeA_set) +SE_BIND_FUNC(js_cc_physics_World_syncSceneToPhysics) -static bool js_cc_physics_TriggerEventPair_shapeA_get(se::State& s) +static bool js_cc_physics_World_syncSceneWithCheck(se::State& s) { + // js_function + CC_UNUSED bool ok = true; - cc::physics::TriggerEventPair *arg1 = (cc::physics::TriggerEventPair *) NULL ; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::World *arg1 = (cc::physics::World *) NULL ; - arg1 = SE_THIS_OBJECT(s); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(arg1->shapeA, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "TriggerEventPair_shapeA_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->shapeA, s.thisObject(), s.rval()); - + (arg1)->syncSceneWithCheck(); return true; } -SE_BIND_PROP_GET(js_cc_physics_TriggerEventPair_shapeA_get) +SE_BIND_FUNC(js_cc_physics_World_syncSceneWithCheck) -static bool js_cc_physics_TriggerEventPair_shapeB_set(se::State& s) +static bool js_cc_physics_World_setCollisionMatrix(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::TriggerEventPair *arg1 = (cc::physics::TriggerEventPair *) NULL ; + cc::physics::World *arg1 = (cc::physics::World *) NULL ; + uint32_t arg2 ; + uint32_t arg3 ; - arg1 = SE_THIS_OBJECT(s); + if(argc != 2) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1->shapeB, s.thisObject()); - SE_PRECONDITION2(ok, false, "TriggerEventPair_shapeB_set,2,SWIGTYPE_uint32_t"); - - + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "World_setCollisionMatrix,2,SWIGTYPE_uint32_t"); - return true; -} -SE_BIND_PROP_SET(js_cc_physics_TriggerEventPair_shapeB_set) - -static bool js_cc_physics_TriggerEventPair_shapeB_get(se::State& s) -{ - CC_UNUSED bool ok = true; - cc::physics::TriggerEventPair *arg1 = (cc::physics::TriggerEventPair *) NULL ; - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(arg1->shapeB, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "TriggerEventPair_shapeB_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->shapeB, s.thisObject(), s.rval()); + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[1], &arg3, s.thisObject()); + SE_PRECONDITION2(ok, false, "World_setCollisionMatrix,3,SWIGTYPE_uint32_t"); + (arg1)->setCollisionMatrix(arg2,arg3); return true; } -SE_BIND_PROP_GET(js_cc_physics_TriggerEventPair_shapeB_get) +SE_BIND_FUNC(js_cc_physics_World_setCollisionMatrix) -static bool js_cc_physics_TriggerEventPair_state_set(se::State& s) +static bool js_cc_physics_World_getTriggerEventPairs(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::TriggerEventPair *arg1 = (cc::physics::TriggerEventPair *) NULL ; - int32_t temp2 ; + cc::physics::World *arg1 = (cc::physics::World *) NULL ; + ccstd::vector< std::shared_ptr< cc::physics::TriggerEventPair > > *result = 0 ; - arg1 = SE_THIS_OBJECT(s); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) enum SWIGTYPE (int32_t temp2) - ok &= sevalue_to_native(args[0], &temp2); - SE_PRECONDITION2(ok, false, "TriggerEventPair_state_set,2,SWIGTYPE_cc__physics__ETouchState"); - arg1->state = (cc::physics::ETouchState)temp2; + result = (ccstd::vector< std::shared_ptr< cc::physics::TriggerEventPair > > *) &(arg1)->getTriggerEventPairs(); + // %typemap(out) SWIGTYPE& + ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "World_getTriggerEventPairs, Error processing arguments"); + SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); return true; } -SE_BIND_PROP_SET(js_cc_physics_TriggerEventPair_state_set) +SE_BIND_FUNC(js_cc_physics_World_getTriggerEventPairs) -static bool js_cc_physics_TriggerEventPair_state_get(se::State& s) +static bool js_cc_physics_World_getContactEventPairs(se::State& s) { + // js_function + CC_UNUSED bool ok = true; - cc::physics::TriggerEventPair *arg1 = (cc::physics::TriggerEventPair *) NULL ; - int32_t temp ; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::World *arg1 = (cc::physics::World *) NULL ; + ccstd::vector< std::shared_ptr< cc::physics::ContactEventPair > > *result = 0 ; - arg1 = SE_THIS_OBJECT(s); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // out 4 - s.rval().setInt32(static_cast(arg1->state)); + result = (ccstd::vector< std::shared_ptr< cc::physics::ContactEventPair > > *) &(arg1)->getContactEventPairs(); + // %typemap(out) SWIGTYPE& + ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "World_getContactEventPairs, Error processing arguments"); + SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); return true; } -SE_BIND_PROP_GET(js_cc_physics_TriggerEventPair_state_get) +SE_BIND_FUNC(js_cc_physics_World_getContactEventPairs) -// js_ctor -static bool js_new_cc_physics_TriggerEventPair(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_physics_World_raycast(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); + cc::physics::World *arg1 = (cc::physics::World *) NULL ; + cc::physics::RaycastOptions *arg2 = 0 ; + cc::physics::RaycastOptions temp2 ; + bool result; - if (argc != 2) { - SE_REPORT_ERROR("js_new_cc_physics_TriggerEventPair: wrong number of arguments: %d, was expecting %d", (int)argc, 2); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "World_raycast,2,SWIGTYPE_p_cc__physics__RaycastOptions"); + arg2 = &temp2; - uint32_t arg1 ; - uint32_t arg2 ; - cc::physics::TriggerEventPair *result; - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1, s.thisObject()); - SE_PRECONDITION2(ok, false, "new_TriggerEventPair,1,SWIGTYPE_uint32_t"); - - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[1], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "new_TriggerEventPair,2,SWIGTYPE_uint32_t"); - - result = (cc::physics::TriggerEventPair *)new cc::physics::TriggerEventPair(arg1,arg2); + result = (bool)(arg1)->raycast(*arg2); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); - s.thisObject()->setPrivateObject(ptr); return true; } -SE_BIND_CTOR(js_new_cc_physics_TriggerEventPair, __jsb_cc_physics_TriggerEventPair_class, js_delete_cc_physics_TriggerEventPair) +SE_BIND_FUNC(js_cc_physics_World_raycast) -static bool js_delete_cc_physics_TriggerEventPair(se::State& s) +static bool js_cc_physics_World_raycastClosest(se::State& s) { - // js_dtoroverride - return true; -} -SE_BIND_FINALIZE_FUNC(js_delete_cc_physics_TriggerEventPair) - -template<> -bool sevalue_to_native(const se::Value &from, cc::physics::TriggerEventPair * to, se::Object *ctx) -{ - assert(from.isObject()); - se::Object *json = from.toObject(); - auto* data = reinterpret_cast(json->getPrivateData()); - if (data) { - *to = *data; - return true; - } - se::Value field; - bool ok = true; - - json->getProperty("shapeA", &field, true); - if (!field.isNullOrUndefined()) { - ok &= sevalue_to_native(field, &(to->shapeA), ctx); - } + // js_function + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::World *arg1 = (cc::physics::World *) NULL ; + cc::physics::RaycastOptions *arg2 = 0 ; + cc::physics::RaycastOptions temp2 ; + bool result; - json->getProperty("shapeB", &field, true); - if (!field.isNullOrUndefined()) { - ok &= sevalue_to_native(field, &(to->shapeB), ctx); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "World_raycastClosest,2,SWIGTYPE_p_cc__physics__RaycastOptions"); + arg2 = &temp2; - - json->getProperty("state", &field, true); - if (!field.isNullOrUndefined()) { - ok &= sevalue_to_native(field, &(to->state), ctx); - } + result = (bool)(arg1)->raycastClosest(*arg2); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - return ok; + return true; } +SE_BIND_FUNC(js_cc_physics_World_raycastClosest) - -bool js_register_cc_physics_TriggerEventPair(se::Object* obj) { - auto* cls = se::Class::create("TriggerEventPair", obj, nullptr, _SE(js_new_cc_physics_TriggerEventPair)); - - cls->defineProperty("shapeA", _SE(js_cc_physics_TriggerEventPair_shapeA_get), _SE(js_cc_physics_TriggerEventPair_shapeA_set)); - cls->defineProperty("shapeB", _SE(js_cc_physics_TriggerEventPair_shapeB_get), _SE(js_cc_physics_TriggerEventPair_shapeB_set)); - cls->defineProperty("state", _SE(js_cc_physics_TriggerEventPair_state_get), _SE(js_cc_physics_TriggerEventPair_state_set)); - - - cls->defineStaticProperty("COUNT", nullptr, nullptr); - - +static bool js_cc_physics_World_raycastResult(se::State& s) +{ + // js_function - cls->defineFinalizeFunction(_SE(js_delete_cc_physics_TriggerEventPair)); + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::World *arg1 = (cc::physics::World *) NULL ; + ccstd::vector< cc::physics::RaycastResult > *result = 0 ; + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (ccstd::vector< cc::physics::RaycastResult > *) &(arg1)->raycastResult(); + // %typemap(out) SWIGTYPE& + ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "World_raycastResult, Error processing arguments"); + SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); - cls->install(); - JSBClassType::registerClass(cls); - __jsb_cc_physics_TriggerEventPair_proto = cls->getProto(); - __jsb_cc_physics_TriggerEventPair_class = cls; - se::ScriptEngine::getInstance()->clearException(); return true; } +SE_BIND_FUNC(js_cc_physics_World_raycastResult) - -se::Class* __jsb_cc_physics_ContactPoint_class = nullptr; -se::Object* __jsb_cc_physics_ContactPoint_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_physics_ContactPoint) - -static bool js_cc_physics_ContactPoint_position_set(se::State& s) +static bool js_cc_physics_World_raycastClosestResult(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::ContactPoint *arg1 = (cc::physics::ContactPoint *) NULL ; + cc::physics::World *arg1 = (cc::physics::World *) NULL ; + cc::physics::RaycastResult *result = 0 ; - arg1 = SE_THIS_OBJECT(s); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1->position, s.thisObject()); - SE_PRECONDITION2(ok, false, "ContactPoint_position_set,2,SWIGTYPE_Vec3"); - + result = (cc::physics::RaycastResult *) &(arg1)->raycastClosestResult(); + // %typemap(out) SWIGTYPE& + ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "World_raycastClosestResult, Error processing arguments"); + SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); return true; } -SE_BIND_PROP_SET(js_cc_physics_ContactPoint_position_set) +SE_BIND_FUNC(js_cc_physics_World_raycastClosestResult) -static bool js_cc_physics_ContactPoint_position_get(se::State& s) +static bool js_cc_physics_World_createConvex(se::State& s) { + // js_function + CC_UNUSED bool ok = true; - cc::physics::ContactPoint *arg1 = (cc::physics::ContactPoint *) NULL ; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::World *arg1 = (cc::physics::World *) NULL ; + cc::physics::ConvexDesc *arg2 = 0 ; + cc::physics::ConvexDesc temp2 ; + uint32_t result; - arg1 = SE_THIS_OBJECT(s); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "World_createConvex,2,SWIGTYPE_p_cc__physics__ConvexDesc"); + arg2 = &temp2; + + result = (arg1)->createConvex(*arg2); // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(arg1->position, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "ContactPoint_position_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->position, s.thisObject(), s.rval()); + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "World_createConvex, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); return true; } -SE_BIND_PROP_GET(js_cc_physics_ContactPoint_position_get) +SE_BIND_FUNC(js_cc_physics_World_createConvex) -static bool js_cc_physics_ContactPoint_separation_set(se::State& s) +static bool js_cc_physics_World_createTrimesh(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::ContactPoint *arg1 = (cc::physics::ContactPoint *) NULL ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg1->separation, nullptr); - SE_PRECONDITION2(ok, false, "ContactPoint_separation_set,2,SWIGTYPE_float"); - - - return true; -} -SE_BIND_PROP_SET(js_cc_physics_ContactPoint_separation_set) - -static bool js_cc_physics_ContactPoint_separation_get(se::State& s) -{ - CC_UNUSED bool ok = true; - cc::physics::ContactPoint *arg1 = (cc::physics::ContactPoint *) NULL ; + cc::physics::World *arg1 = (cc::physics::World *) NULL ; + cc::physics::TrimeshDesc *arg2 = 0 ; + cc::physics::TrimeshDesc temp2 ; + uint32_t result; - arg1 = SE_THIS_OBJECT(s); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "World_createTrimesh,2,SWIGTYPE_p_cc__physics__TrimeshDesc"); + arg2 = &temp2; + + result = (arg1)->createTrimesh(*arg2); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "World_createTrimesh, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - // out 1 - ok &= nativevalue_to_se(arg1->separation, s.rval(), s.thisObject() /*ctx*/); return true; } -SE_BIND_PROP_GET(js_cc_physics_ContactPoint_separation_get) +SE_BIND_FUNC(js_cc_physics_World_createTrimesh) -static bool js_cc_physics_ContactPoint_normal_set(se::State& s) +static bool js_cc_physics_World_createHeightField(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::ContactPoint *arg1 = (cc::physics::ContactPoint *) NULL ; + cc::physics::World *arg1 = (cc::physics::World *) NULL ; + cc::physics::HeightFieldDesc *arg2 = 0 ; + cc::physics::HeightFieldDesc temp2 ; + uint32_t result; - arg1 = SE_THIS_OBJECT(s); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE& + ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); + SE_PRECONDITION2(ok, false, "World_createHeightField,2,SWIGTYPE_p_cc__physics__HeightFieldDesc"); + arg2 = &temp2; - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1->normal, s.thisObject()); - SE_PRECONDITION2(ok, false, "ContactPoint_normal_set,2,SWIGTYPE_Vec3"); - - - - return true; -} -SE_BIND_PROP_SET(js_cc_physics_ContactPoint_normal_set) - -static bool js_cc_physics_ContactPoint_normal_get(se::State& s) -{ - CC_UNUSED bool ok = true; - cc::physics::ContactPoint *arg1 = (cc::physics::ContactPoint *) NULL ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (arg1)->createHeightField(*arg2); // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(arg1->normal, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "ContactPoint_normal_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->normal, s.thisObject(), s.rval()); + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "World_createHeightField, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); return true; } -SE_BIND_PROP_GET(js_cc_physics_ContactPoint_normal_get) +SE_BIND_FUNC(js_cc_physics_World_createHeightField) -static bool js_cc_physics_ContactPoint_internalFaceIndex0_set(se::State& s) +static bool js_cc_physics_World_createMaterial(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::ContactPoint *arg1 = (cc::physics::ContactPoint *) NULL ; + cc::physics::World *arg1 = (cc::physics::World *) NULL ; + uint16_t arg2 ; + float arg3 ; + float arg4 ; + float arg5 ; + uint8_t arg6 ; + uint8_t arg7 ; + bool result; - arg1 = SE_THIS_OBJECT(s); + if(argc != 6) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 6); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1->internalFaceIndex0, s.thisObject()); - SE_PRECONDITION2(ok, false, "ContactPoint_internalFaceIndex0_set,2,SWIGTYPE_uint32_t"); + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "World_createMaterial,2,SWIGTYPE_uint16_t"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "World_createMaterial,3,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[2], &arg4, nullptr); + SE_PRECONDITION2(ok, false, "World_createMaterial,4,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[3], &arg5, nullptr); + SE_PRECONDITION2(ok, false, "World_createMaterial,5,SWIGTYPE_float"); + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[4], &arg6, s.thisObject()); + SE_PRECONDITION2(ok, false, "World_createMaterial,6,SWIGTYPE_uint8_t"); - return true; -} -SE_BIND_PROP_SET(js_cc_physics_ContactPoint_internalFaceIndex0_set) - -static bool js_cc_physics_ContactPoint_internalFaceIndex0_get(se::State& s) -{ - CC_UNUSED bool ok = true; - cc::physics::ContactPoint *arg1 = (cc::physics::ContactPoint *) NULL ; - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(arg1->internalFaceIndex0, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "ContactPoint_internalFaceIndex0_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->internalFaceIndex0, s.thisObject(), s.rval()); + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[5], &arg7, s.thisObject()); + SE_PRECONDITION2(ok, false, "World_createMaterial,7,SWIGTYPE_uint8_t"); + result = (bool)(arg1)->createMaterial(arg2,arg3,arg4,arg5,arg6,arg7); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); return true; } -SE_BIND_PROP_GET(js_cc_physics_ContactPoint_internalFaceIndex0_get) +SE_BIND_FUNC(js_cc_physics_World_createMaterial) -static bool js_cc_physics_ContactPoint_impulse_set(se::State& s) +static bool js_cc_physics_World_destroy(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::ContactPoint *arg1 = (cc::physics::ContactPoint *) NULL ; + cc::physics::World *arg1 = (cc::physics::World *) NULL ; - arg1 = SE_THIS_OBJECT(s); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1->impulse, s.thisObject()); - SE_PRECONDITION2(ok, false, "ContactPoint_impulse_set,2,SWIGTYPE_Vec3"); - + (arg1)->destroy(); return true; } -SE_BIND_PROP_SET(js_cc_physics_ContactPoint_impulse_set) +SE_BIND_FUNC(js_cc_physics_World_destroy) -static bool js_cc_physics_ContactPoint_impulse_get(se::State& s) -{ - CC_UNUSED bool ok = true; - cc::physics::ContactPoint *arg1 = (cc::physics::ContactPoint *) NULL ; +bool js_register_cc_physics_World(se::Object* obj) { + auto* cls = se::Class::create("World", obj, nullptr, _SE(js_new_cc_physics_World)); - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(arg1->impulse, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "ContactPoint_impulse_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->impulse, s.thisObject(), s.rval()); + cls->defineFunction("setGravity", _SE(js_cc_physics_World_setGravity)); + cls->defineFunction("setAllowSleep", _SE(js_cc_physics_World_setAllowSleep)); + cls->defineFunction("step", _SE(js_cc_physics_World_step)); + cls->defineFunction("emitEvents", _SE(js_cc_physics_World_emitEvents)); + cls->defineFunction("syncSceneToPhysics", _SE(js_cc_physics_World_syncSceneToPhysics)); + cls->defineFunction("syncSceneWithCheck", _SE(js_cc_physics_World_syncSceneWithCheck)); + cls->defineFunction("setCollisionMatrix", _SE(js_cc_physics_World_setCollisionMatrix)); + cls->defineFunction("getTriggerEventPairs", _SE(js_cc_physics_World_getTriggerEventPairs)); + cls->defineFunction("getContactEventPairs", _SE(js_cc_physics_World_getContactEventPairs)); + cls->defineFunction("raycast", _SE(js_cc_physics_World_raycast)); + cls->defineFunction("raycastClosest", _SE(js_cc_physics_World_raycastClosest)); + cls->defineFunction("raycastResult", _SE(js_cc_physics_World_raycastResult)); + cls->defineFunction("raycastClosestResult", _SE(js_cc_physics_World_raycastClosestResult)); + cls->defineFunction("createConvex", _SE(js_cc_physics_World_createConvex)); + cls->defineFunction("createTrimesh", _SE(js_cc_physics_World_createTrimesh)); + cls->defineFunction("createHeightField", _SE(js_cc_physics_World_createHeightField)); + cls->defineFunction("createMaterial", _SE(js_cc_physics_World_createMaterial)); + cls->defineFunction("destroy", _SE(js_cc_physics_World_destroy)); - return true; -} -SE_BIND_PROP_GET(js_cc_physics_ContactPoint_impulse_get) - -static bool js_cc_physics_ContactPoint_internalFaceIndex1_set(se::State& s) -{ - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::physics::ContactPoint *arg1 = (cc::physics::ContactPoint *) NULL ; - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1->internalFaceIndex1, s.thisObject()); - SE_PRECONDITION2(ok, false, "ContactPoint_internalFaceIndex1_set,2,SWIGTYPE_uint32_t"); + cls->defineFinalizeFunction(_SE(js_delete_cc_physics_World)); + cls->install(); + JSBClassType::registerClass(cls); + __jsb_cc_physics_World_proto = cls->getProto(); + __jsb_cc_physics_World_class = cls; + se::ScriptEngine::getInstance()->clearException(); return true; } -SE_BIND_PROP_SET(js_cc_physics_ContactPoint_internalFaceIndex1_set) -static bool js_cc_physics_ContactPoint_internalFaceIndex1_get(se::State& s) -{ - CC_UNUSED bool ok = true; - cc::physics::ContactPoint *arg1 = (cc::physics::ContactPoint *) NULL ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(arg1->internalFaceIndex1, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "ContactPoint_internalFaceIndex1_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->internalFaceIndex1, s.thisObject(), s.rval()); - - - - return true; -} -SE_BIND_PROP_GET(js_cc_physics_ContactPoint_internalFaceIndex1_get) + +se::Class* __jsb_cc_physics_RigidBody_class = nullptr; +se::Object* __jsb_cc_physics_RigidBody_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_physics_RigidBody) // js_ctor -static bool js_new_cc_physics_ContactPoint(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_new_cc_physics_RigidBody(se::State& s) // NOLINT(readability-identifier-naming) { CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::ContactPoint *result; - result = (cc::physics::ContactPoint *)new cc::physics::ContactPoint(); + cc::physics::RigidBody *result; + result = (cc::physics::RigidBody *)new cc::physics::RigidBody(); auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); s.thisObject()->setPrivateObject(ptr); return true; } -SE_BIND_CTOR(js_new_cc_physics_ContactPoint, __jsb_cc_physics_ContactPoint_class, js_delete_cc_physics_ContactPoint) +SE_BIND_CTOR(js_new_cc_physics_RigidBody, __jsb_cc_physics_RigidBody_class, js_delete_cc_physics_RigidBody) -static bool js_delete_cc_physics_ContactPoint(se::State& s) +static bool js_delete_cc_physics_RigidBody(se::State& s) { // js_dtoroverride return true; } -SE_BIND_FINALIZE_FUNC(js_delete_cc_physics_ContactPoint) +SE_BIND_FINALIZE_FUNC(js_delete_cc_physics_RigidBody) -template<> -bool sevalue_to_native(const se::Value &from, cc::physics::ContactPoint * to, se::Object *ctx) +static bool js_cc_physics_RigidBody_initialize(se::State& s) { - assert(from.isObject()); - se::Object *json = from.toObject(); - auto* data = reinterpret_cast(json->getPrivateData()); - if (data) { - *to = *data; - return true; - } - se::Value field; - bool ok = true; - - json->getProperty("position", &field, true); - if (!field.isNullOrUndefined()) { - ok &= sevalue_to_native(field, &(to->position), ctx); - } - - - json->getProperty("separation", &field, true); - if (!field.isNullOrUndefined()) { - ok &= sevalue_to_native(field, &(to->separation), ctx); - } - - - json->getProperty("normal", &field, true); - if (!field.isNullOrUndefined()) { - ok &= sevalue_to_native(field, &(to->normal), ctx); - } - - - json->getProperty("internalFaceIndex0", &field, true); - if (!field.isNullOrUndefined()) { - ok &= sevalue_to_native(field, &(to->internalFaceIndex0), ctx); - } - - - json->getProperty("impulse", &field, true); - if (!field.isNullOrUndefined()) { - ok &= sevalue_to_native(field, &(to->impulse), ctx); - } + // js_function + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::RigidBody *arg1 = (cc::physics::RigidBody *) NULL ; + cc::Node *arg2 = (cc::Node *) NULL ; + cc::physics::ERigidBodyType arg3 ; + uint32_t arg4 ; + int32_t temp3 ; - json->getProperty("internalFaceIndex1", &field, true); - if (!field.isNullOrUndefined()) { - ok &= sevalue_to_native(field, &(to->internalFaceIndex1), ctx); + if(argc != 3) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); + return false; } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "RigidBody_initialize,2,SWIGTYPE_p_cc__Node"); + // %typemap(in) enum SWIGTYPE (int32_t temp3) + ok &= sevalue_to_native(args[1], &temp3); + SE_PRECONDITION2(ok, false, "RigidBody_initialize,3,SWIGTYPE_cc__physics__ERigidBodyType"); + arg3 = (cc::physics::ERigidBodyType)temp3; + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[2], &arg4, s.thisObject()); + SE_PRECONDITION2(ok, false, "RigidBody_initialize,4,SWIGTYPE_uint32_t"); - return ok; -} - - -bool js_register_cc_physics_ContactPoint(se::Object* obj) { - auto* cls = se::Class::create("ContactPoint", obj, nullptr, _SE(js_new_cc_physics_ContactPoint)); - - cls->defineProperty("position", _SE(js_cc_physics_ContactPoint_position_get), _SE(js_cc_physics_ContactPoint_position_set)); - cls->defineProperty("separation", _SE(js_cc_physics_ContactPoint_separation_get), _SE(js_cc_physics_ContactPoint_separation_set)); - cls->defineProperty("normal", _SE(js_cc_physics_ContactPoint_normal_get), _SE(js_cc_physics_ContactPoint_normal_set)); - cls->defineProperty("internalFaceIndex0", _SE(js_cc_physics_ContactPoint_internalFaceIndex0_get), _SE(js_cc_physics_ContactPoint_internalFaceIndex0_set)); - cls->defineProperty("impulse", _SE(js_cc_physics_ContactPoint_impulse_get), _SE(js_cc_physics_ContactPoint_impulse_set)); - cls->defineProperty("internalFaceIndex1", _SE(js_cc_physics_ContactPoint_internalFaceIndex1_get), _SE(js_cc_physics_ContactPoint_internalFaceIndex1_set)); - - - cls->defineStaticProperty("COUNT", nullptr, nullptr); - - - - cls->defineFinalizeFunction(_SE(js_delete_cc_physics_ContactPoint)); - + (arg1)->initialize(arg2,arg3,arg4); - cls->install(); - JSBClassType::registerClass(cls); - __jsb_cc_physics_ContactPoint_proto = cls->getProto(); - __jsb_cc_physics_ContactPoint_class = cls; - se::ScriptEngine::getInstance()->clearException(); return true; } +SE_BIND_FUNC(js_cc_physics_RigidBody_initialize) - -se::Class* __jsb_cc_physics_ContactEventPair_class = nullptr; -se::Object* __jsb_cc_physics_ContactEventPair_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_physics_ContactEventPair) - -static bool js_cc_physics_ContactEventPair_shapeA_set(se::State& s) +static bool js_cc_physics_RigidBody_onEnable(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::ContactEventPair *arg1 = (cc::physics::ContactEventPair *) NULL ; + cc::physics::RigidBody *arg1 = (cc::physics::RigidBody *) NULL ; - arg1 = SE_THIS_OBJECT(s); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1->shapeA, s.thisObject()); - SE_PRECONDITION2(ok, false, "ContactEventPair_shapeA_set,2,SWIGTYPE_uint32_t"); - + (arg1)->onEnable(); return true; } -SE_BIND_PROP_SET(js_cc_physics_ContactEventPair_shapeA_set) +SE_BIND_FUNC(js_cc_physics_RigidBody_onEnable) -static bool js_cc_physics_ContactEventPair_shapeA_get(se::State& s) +static bool js_cc_physics_RigidBody_onDisable(se::State& s) { + // js_function + CC_UNUSED bool ok = true; - cc::physics::ContactEventPair *arg1 = (cc::physics::ContactEventPair *) NULL ; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::RigidBody *arg1 = (cc::physics::RigidBody *) NULL ; - arg1 = SE_THIS_OBJECT(s); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(arg1->shapeA, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "ContactEventPair_shapeA_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->shapeA, s.thisObject(), s.rval()); - + (arg1)->onDisable(); return true; } -SE_BIND_PROP_GET(js_cc_physics_ContactEventPair_shapeA_get) +SE_BIND_FUNC(js_cc_physics_RigidBody_onDisable) -static bool js_cc_physics_ContactEventPair_shapeB_set(se::State& s) +static bool js_cc_physics_RigidBody_onDestroy(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::ContactEventPair *arg1 = (cc::physics::ContactEventPair *) NULL ; + cc::physics::RigidBody *arg1 = (cc::physics::RigidBody *) NULL ; - arg1 = SE_THIS_OBJECT(s); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1->shapeB, s.thisObject()); - SE_PRECONDITION2(ok, false, "ContactEventPair_shapeB_set,2,SWIGTYPE_uint32_t"); - + (arg1)->onDestroy(); return true; } -SE_BIND_PROP_SET(js_cc_physics_ContactEventPair_shapeB_set) +SE_BIND_FUNC(js_cc_physics_RigidBody_onDestroy) -static bool js_cc_physics_ContactEventPair_shapeB_get(se::State& s) +static bool js_cc_physics_RigidBody_isAwake(se::State& s) { + // js_function + CC_UNUSED bool ok = true; - cc::physics::ContactEventPair *arg1 = (cc::physics::ContactEventPair *) NULL ; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::RigidBody *arg1 = (cc::physics::RigidBody *) NULL ; + bool result; - arg1 = SE_THIS_OBJECT(s); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(arg1->shapeB, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "ContactEventPair_shapeB_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->shapeB, s.thisObject(), s.rval()); - + result = (bool)(arg1)->isAwake(); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); return true; } -SE_BIND_PROP_GET(js_cc_physics_ContactEventPair_shapeB_get) +SE_BIND_FUNC(js_cc_physics_RigidBody_isAwake) -static bool js_cc_physics_ContactEventPair_state_set(se::State& s) +static bool js_cc_physics_RigidBody_isSleepy(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::ContactEventPair *arg1 = (cc::physics::ContactEventPair *) NULL ; - int32_t temp2 ; + cc::physics::RigidBody *arg1 = (cc::physics::RigidBody *) NULL ; + bool result; - arg1 = SE_THIS_OBJECT(s); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) enum SWIGTYPE (int32_t temp2) - ok &= sevalue_to_native(args[0], &temp2); - SE_PRECONDITION2(ok, false, "ContactEventPair_state_set,2,SWIGTYPE_cc__physics__ETouchState"); - arg1->state = (cc::physics::ETouchState)temp2; + result = (bool)(arg1)->isSleepy(); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); return true; } -SE_BIND_PROP_SET(js_cc_physics_ContactEventPair_state_set) +SE_BIND_FUNC(js_cc_physics_RigidBody_isSleepy) -static bool js_cc_physics_ContactEventPair_state_get(se::State& s) +static bool js_cc_physics_RigidBody_isSleeping(se::State& s) { + // js_function + CC_UNUSED bool ok = true; - cc::physics::ContactEventPair *arg1 = (cc::physics::ContactEventPair *) NULL ; - int32_t temp ; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::RigidBody *arg1 = (cc::physics::RigidBody *) NULL ; + bool result; - arg1 = SE_THIS_OBJECT(s); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // out 4 - s.rval().setInt32(static_cast(arg1->state)); + result = (bool)(arg1)->isSleeping(); + // out 5 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); return true; } -SE_BIND_PROP_GET(js_cc_physics_ContactEventPair_state_get) +SE_BIND_FUNC(js_cc_physics_RigidBody_isSleeping) -static bool js_cc_physics_ContactEventPair_contacts_set(se::State& s) +static bool js_cc_physics_RigidBody_setType(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::ContactEventPair *arg1 = (cc::physics::ContactEventPair *) NULL ; + cc::physics::RigidBody *arg1 = (cc::physics::RigidBody *) NULL ; + cc::physics::ERigidBodyType arg2 ; + int32_t temp2 ; - arg1 = SE_THIS_OBJECT(s); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1->contacts, s.thisObject()); - SE_PRECONDITION2(ok, false, "ContactEventPair_contacts_set,2,SWIGTYPE_ccstd__vectorT_cc__physics__ContactPoint_t"); - + // %typemap(in) enum SWIGTYPE (int32_t temp2) + ok &= sevalue_to_native(args[0], &temp2); + SE_PRECONDITION2(ok, false, "RigidBody_setType,2,SWIGTYPE_cc__physics__ERigidBodyType"); + arg2 = (cc::physics::ERigidBodyType)temp2; + (arg1)->setType(arg2); return true; } -SE_BIND_PROP_SET(js_cc_physics_ContactEventPair_contacts_set) +SE_BIND_FUNC(js_cc_physics_RigidBody_setType) -static bool js_cc_physics_ContactEventPair_contacts_get(se::State& s) +static bool js_cc_physics_RigidBody_setMass(se::State& s) { + // js_function + CC_UNUSED bool ok = true; - cc::physics::ContactEventPair *arg1 = (cc::physics::ContactEventPair *) NULL ; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::RigidBody *arg1 = (cc::physics::RigidBody *) NULL ; + float arg2 ; - arg1 = SE_THIS_OBJECT(s); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(arg1->contacts, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "ContactEventPair_contacts_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->contacts, s.thisObject(), s.rval()); - + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "RigidBody_setMass,2,SWIGTYPE_float"); + (arg1)->setMass(arg2); return true; } -SE_BIND_PROP_GET(js_cc_physics_ContactEventPair_contacts_get) +SE_BIND_FUNC(js_cc_physics_RigidBody_setMass) -// js_ctor -static bool js_new_cc_physics_ContactEventPair(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_physics_RigidBody_setLinearDamping(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); + cc::physics::RigidBody *arg1 = (cc::physics::RigidBody *) NULL ; + float arg2 ; - if (argc != 2) { - SE_REPORT_ERROR("js_new_cc_physics_ContactEventPair: wrong number of arguments: %d, was expecting %d", (int)argc, 2); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } - - uint32_t arg1 ; - uint32_t arg2 ; - cc::physics::ContactEventPair *result; - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1, s.thisObject()); - SE_PRECONDITION2(ok, false, "new_ContactEventPair,1,SWIGTYPE_uint32_t"); - - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[1], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "new_ContactEventPair,2,SWIGTYPE_uint32_t"); - - result = (cc::physics::ContactEventPair *)new cc::physics::ContactEventPair(arg1,arg2); + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "RigidBody_setLinearDamping,2,SWIGTYPE_float"); + (arg1)->setLinearDamping(arg2); - auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); - s.thisObject()->setPrivateObject(ptr); - return true; -} -SE_BIND_CTOR(js_new_cc_physics_ContactEventPair, __jsb_cc_physics_ContactEventPair_class, js_delete_cc_physics_ContactEventPair) - -static bool js_delete_cc_physics_ContactEventPair(se::State& s) -{ - // js_dtoroverride return true; } -SE_BIND_FINALIZE_FUNC(js_delete_cc_physics_ContactEventPair) +SE_BIND_FUNC(js_cc_physics_RigidBody_setLinearDamping) -template<> -bool sevalue_to_native(const se::Value &from, cc::physics::ContactEventPair * to, se::Object *ctx) +static bool js_cc_physics_RigidBody_setAngularDamping(se::State& s) { - assert(from.isObject()); - se::Object *json = from.toObject(); - auto* data = reinterpret_cast(json->getPrivateData()); - if (data) { - *to = *data; - return true; - } - se::Value field; - bool ok = true; - - json->getProperty("shapeA", &field, true); - if (!field.isNullOrUndefined()) { - ok &= sevalue_to_native(field, &(to->shapeA), ctx); - } - - - json->getProperty("shapeB", &field, true); - if (!field.isNullOrUndefined()) { - ok &= sevalue_to_native(field, &(to->shapeB), ctx); - } - - - json->getProperty("state", &field, true); - if (!field.isNullOrUndefined()) { - ok &= sevalue_to_native(field, &(to->state), ctx); - } + // js_function + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::RigidBody *arg1 = (cc::physics::RigidBody *) NULL ; + float arg2 ; - json->getProperty("contacts", &field, true); - if (!field.isNullOrUndefined()) { - ok &= sevalue_to_native(field, &(to->contacts), ctx); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "RigidBody_setAngularDamping,2,SWIGTYPE_float"); + (arg1)->setAngularDamping(arg2); - return ok; -} - - -bool js_register_cc_physics_ContactEventPair(se::Object* obj) { - auto* cls = se::Class::create("ContactEventPair", obj, nullptr, _SE(js_new_cc_physics_ContactEventPair)); - - cls->defineProperty("shapeA", _SE(js_cc_physics_ContactEventPair_shapeA_get), _SE(js_cc_physics_ContactEventPair_shapeA_set)); - cls->defineProperty("shapeB", _SE(js_cc_physics_ContactEventPair_shapeB_get), _SE(js_cc_physics_ContactEventPair_shapeB_set)); - cls->defineProperty("state", _SE(js_cc_physics_ContactEventPair_state_get), _SE(js_cc_physics_ContactEventPair_state_set)); - cls->defineProperty("contacts", _SE(js_cc_physics_ContactEventPair_contacts_get), _SE(js_cc_physics_ContactEventPair_contacts_set)); - - - cls->defineStaticProperty("COUNT", nullptr, nullptr); - - - - cls->defineFinalizeFunction(_SE(js_delete_cc_physics_ContactEventPair)); - - - cls->install(); - JSBClassType::registerClass(cls); - - __jsb_cc_physics_ContactEventPair_proto = cls->getProto(); - __jsb_cc_physics_ContactEventPair_class = cls; - se::ScriptEngine::getInstance()->clearException(); return true; } +SE_BIND_FUNC(js_cc_physics_RigidBody_setAngularDamping) - -se::Class* __jsb_cc_physics_ConvexDesc_class = nullptr; -se::Object* __jsb_cc_physics_ConvexDesc_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_physics_ConvexDesc) - -static bool js_cc_physics_ConvexDesc_positions_set(se::State& s) +static bool js_cc_physics_RigidBody_useGravity(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::ConvexDesc *arg1 = (cc::physics::ConvexDesc *) NULL ; + cc::physics::RigidBody *arg1 = (cc::physics::RigidBody *) NULL ; + bool arg2 ; - arg1 = SE_THIS_OBJECT(s); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - ok &= sevalue_to_native(args[0], &arg1->positions); - SE_PRECONDITION2(ok, false, "ConvexDesc_positions_set,2,SWIGTYPE_p_void"); + // %typemap(in) bool + ok &= sevalue_to_native(args[0], &arg2); + SE_PRECONDITION2(ok, false, "RigidBody_useGravity,2,SWIGTYPE_bool"); + (arg1)->useGravity(arg2); return true; } -SE_BIND_PROP_SET(js_cc_physics_ConvexDesc_positions_set) +SE_BIND_FUNC(js_cc_physics_RigidBody_useGravity) -static bool js_cc_physics_ConvexDesc_positions_get(se::State& s) +static bool js_cc_physics_RigidBody_useCCD(se::State& s) { + // js_function + CC_UNUSED bool ok = true; - cc::physics::ConvexDesc *arg1 = (cc::physics::ConvexDesc *) NULL ; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::RigidBody *arg1 = (cc::physics::RigidBody *) NULL ; + bool arg2 ; - arg1 = SE_THIS_OBJECT(s); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(out) SWIGTYPE* - ok &= nativevalue_to_se(arg1->positions, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "ConvexDesc_positions_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->positions, s.thisObject(), s.rval()); + // %typemap(in) bool + ok &= sevalue_to_native(args[0], &arg2); + SE_PRECONDITION2(ok, false, "RigidBody_useCCD,2,SWIGTYPE_bool"); + (arg1)->useCCD(arg2); return true; } -SE_BIND_PROP_GET(js_cc_physics_ConvexDesc_positions_get) +SE_BIND_FUNC(js_cc_physics_RigidBody_useCCD) -static bool js_cc_physics_ConvexDesc_positionLength_set(se::State& s) +static bool js_cc_physics_RigidBody_setLinearFactor(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::ConvexDesc *arg1 = (cc::physics::ConvexDesc *) NULL ; + cc::physics::RigidBody *arg1 = (cc::physics::RigidBody *) NULL ; + float arg2 ; + float arg3 ; + float arg4 ; - arg1 = SE_THIS_OBJECT(s); + if(argc != 3) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1->positionLength, s.thisObject()); - SE_PRECONDITION2(ok, false, "ConvexDesc_positionLength_set,2,SWIGTYPE_uint32_t"); - + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "RigidBody_setLinearFactor,2,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "RigidBody_setLinearFactor,3,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[2], &arg4, nullptr); + SE_PRECONDITION2(ok, false, "RigidBody_setLinearFactor,4,SWIGTYPE_float"); + (arg1)->setLinearFactor(arg2,arg3,arg4); return true; } -SE_BIND_PROP_SET(js_cc_physics_ConvexDesc_positionLength_set) +SE_BIND_FUNC(js_cc_physics_RigidBody_setLinearFactor) -static bool js_cc_physics_ConvexDesc_positionLength_get(se::State& s) +static bool js_cc_physics_RigidBody_setAngularFactor(se::State& s) { + // js_function + CC_UNUSED bool ok = true; - cc::physics::ConvexDesc *arg1 = (cc::physics::ConvexDesc *) NULL ; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::RigidBody *arg1 = (cc::physics::RigidBody *) NULL ; + float arg2 ; + float arg3 ; + float arg4 ; - arg1 = SE_THIS_OBJECT(s); + if(argc != 3) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(arg1->positionLength, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "ConvexDesc_positionLength_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->positionLength, s.thisObject(), s.rval()); - + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "RigidBody_setAngularFactor,2,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "RigidBody_setAngularFactor,3,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[2], &arg4, nullptr); + SE_PRECONDITION2(ok, false, "RigidBody_setAngularFactor,4,SWIGTYPE_float"); + (arg1)->setAngularFactor(arg2,arg3,arg4); return true; } -SE_BIND_PROP_GET(js_cc_physics_ConvexDesc_positionLength_get) +SE_BIND_FUNC(js_cc_physics_RigidBody_setAngularFactor) -// js_ctor -static bool js_new_cc_physics_ConvexDesc(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_physics_RigidBody_setAllowSleep(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); + cc::physics::RigidBody *arg1 = (cc::physics::RigidBody *) NULL ; + bool arg2 ; - cc::physics::ConvexDesc *result; - result = (cc::physics::ConvexDesc *)new cc::physics::ConvexDesc(); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) bool + ok &= sevalue_to_native(args[0], &arg2); + SE_PRECONDITION2(ok, false, "RigidBody_setAllowSleep,2,SWIGTYPE_bool"); + (arg1)->setAllowSleep(arg2); - auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); - s.thisObject()->setPrivateObject(ptr); - return true; -} -SE_BIND_CTOR(js_new_cc_physics_ConvexDesc, __jsb_cc_physics_ConvexDesc_class, js_delete_cc_physics_ConvexDesc) - -static bool js_delete_cc_physics_ConvexDesc(se::State& s) -{ - // js_dtoroverride return true; } -SE_BIND_FINALIZE_FUNC(js_delete_cc_physics_ConvexDesc) +SE_BIND_FUNC(js_cc_physics_RigidBody_setAllowSleep) -template<> -bool sevalue_to_native(const se::Value &from, cc::physics::ConvexDesc * to, se::Object *ctx) +static bool js_cc_physics_RigidBody_wakeUp(se::State& s) { - assert(from.isObject()); - se::Object *json = from.toObject(); - auto* data = reinterpret_cast(json->getPrivateData()); - if (data) { - *to = *data; - return true; - } - se::Value field; - bool ok = true; - - json->getProperty("positions", &field, true); - if (!field.isNullOrUndefined()) { - ok &= sevalue_to_native(field, &(to->positions), ctx); - } + // js_function + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::RigidBody *arg1 = (cc::physics::RigidBody *) NULL ; - json->getProperty("positionLength", &field, true); - if (!field.isNullOrUndefined()) { - ok &= sevalue_to_native(field, &(to->positionLength), ctx); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + (arg1)->wakeUp(); - return ok; + return true; } +SE_BIND_FUNC(js_cc_physics_RigidBody_wakeUp) - -bool js_register_cc_physics_ConvexDesc(se::Object* obj) { - auto* cls = se::Class::create("ConvexDesc", obj, nullptr, _SE(js_new_cc_physics_ConvexDesc)); - - cls->defineProperty("positions", _SE(js_cc_physics_ConvexDesc_positions_get), _SE(js_cc_physics_ConvexDesc_positions_set)); - cls->defineProperty("positionLength", _SE(js_cc_physics_ConvexDesc_positionLength_get), _SE(js_cc_physics_ConvexDesc_positionLength_set)); - - - - +static bool js_cc_physics_RigidBody_sleep(se::State& s) +{ + // js_function - cls->defineFinalizeFunction(_SE(js_delete_cc_physics_ConvexDesc)); + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::RigidBody *arg1 = (cc::physics::RigidBody *) NULL ; + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + (arg1)->sleep(); - cls->install(); - JSBClassType::registerClass(cls); - __jsb_cc_physics_ConvexDesc_proto = cls->getProto(); - __jsb_cc_physics_ConvexDesc_class = cls; - se::ScriptEngine::getInstance()->clearException(); return true; } +SE_BIND_FUNC(js_cc_physics_RigidBody_sleep) - -se::Class* __jsb_cc_physics_TrimeshDesc_class = nullptr; -se::Object* __jsb_cc_physics_TrimeshDesc_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_physics_TrimeshDesc) - -static bool js_cc_physics_TrimeshDesc_triangles_set(se::State& s) +static bool js_cc_physics_RigidBody_clearState(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::TrimeshDesc *arg1 = (cc::physics::TrimeshDesc *) NULL ; + cc::physics::RigidBody *arg1 = (cc::physics::RigidBody *) NULL ; - arg1 = SE_THIS_OBJECT(s); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - ok &= sevalue_to_native(args[0], &arg1->triangles); - SE_PRECONDITION2(ok, false, "TrimeshDesc_triangles_set,2,SWIGTYPE_p_void"); + (arg1)->clearState(); return true; } -SE_BIND_PROP_SET(js_cc_physics_TrimeshDesc_triangles_set) +SE_BIND_FUNC(js_cc_physics_RigidBody_clearState) -static bool js_cc_physics_TrimeshDesc_triangles_get(se::State& s) +static bool js_cc_physics_RigidBody_clearForces(se::State& s) { + // js_function + CC_UNUSED bool ok = true; - cc::physics::TrimeshDesc *arg1 = (cc::physics::TrimeshDesc *) NULL ; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::RigidBody *arg1 = (cc::physics::RigidBody *) NULL ; - arg1 = SE_THIS_OBJECT(s); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(out) SWIGTYPE* - ok &= nativevalue_to_se(arg1->triangles, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "TrimeshDesc_triangles_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->triangles, s.thisObject(), s.rval()); + (arg1)->clearForces(); return true; } -SE_BIND_PROP_GET(js_cc_physics_TrimeshDesc_triangles_get) +SE_BIND_FUNC(js_cc_physics_RigidBody_clearForces) -static bool js_cc_physics_TrimeshDesc_triangleLength_set(se::State& s) +static bool js_cc_physics_RigidBody_clearVelocity(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::TrimeshDesc *arg1 = (cc::physics::TrimeshDesc *) NULL ; + cc::physics::RigidBody *arg1 = (cc::physics::RigidBody *) NULL ; - arg1 = SE_THIS_OBJECT(s); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1->triangleLength, s.thisObject()); - SE_PRECONDITION2(ok, false, "TrimeshDesc_triangleLength_set,2,SWIGTYPE_uint32_t"); - + (arg1)->clearVelocity(); return true; } -SE_BIND_PROP_SET(js_cc_physics_TrimeshDesc_triangleLength_set) +SE_BIND_FUNC(js_cc_physics_RigidBody_clearVelocity) -static bool js_cc_physics_TrimeshDesc_triangleLength_get(se::State& s) +static bool js_cc_physics_RigidBody_setSleepThreshold(se::State& s) { + // js_function + CC_UNUSED bool ok = true; - cc::physics::TrimeshDesc *arg1 = (cc::physics::TrimeshDesc *) NULL ; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::RigidBody *arg1 = (cc::physics::RigidBody *) NULL ; + float arg2 ; - arg1 = SE_THIS_OBJECT(s); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(arg1->triangleLength, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "TrimeshDesc_triangleLength_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->triangleLength, s.thisObject(), s.rval()); - + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "RigidBody_setSleepThreshold,2,SWIGTYPE_float"); + (arg1)->setSleepThreshold(arg2); return true; } -SE_BIND_PROP_GET(js_cc_physics_TrimeshDesc_triangleLength_get) +SE_BIND_FUNC(js_cc_physics_RigidBody_setSleepThreshold) -static bool js_cc_physics_TrimeshDesc_isU16_set(se::State& s) +static bool js_cc_physics_RigidBody_getSleepThreshold(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::TrimeshDesc *arg1 = (cc::physics::TrimeshDesc *) NULL ; + cc::physics::RigidBody *arg1 = (cc::physics::RigidBody *) NULL ; + float result; - arg1 = SE_THIS_OBJECT(s); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) bool - ok &= sevalue_to_native(args[0], &arg1->isU16); - SE_PRECONDITION2(ok, false, "TrimeshDesc_isU16_set,2,SWIGTYPE_bool"); + result = (float)(arg1)->getSleepThreshold(); + + // out 1 + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); return true; } -SE_BIND_PROP_SET(js_cc_physics_TrimeshDesc_isU16_set) +SE_BIND_FUNC(js_cc_physics_RigidBody_getSleepThreshold) -static bool js_cc_physics_TrimeshDesc_isU16_get(se::State& s) +static bool js_cc_physics_RigidBody_getLinearVelocity(se::State& s) { - CC_UNUSED bool ok = true; - cc::physics::TrimeshDesc *arg1 = (cc::physics::TrimeshDesc *) NULL ; + // js_function - arg1 = SE_THIS_OBJECT(s); + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::RigidBody *arg1 = (cc::physics::RigidBody *) NULL ; + cc::Vec3 result; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // out 5 - ok &= nativevalue_to_se(arg1->isU16, s.rval(), s.thisObject() /*ctx*/); + result = (arg1)->getLinearVelocity(); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "RigidBody_getLinearVelocity, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + return true; } -SE_BIND_PROP_GET(js_cc_physics_TrimeshDesc_isU16_get) +SE_BIND_FUNC(js_cc_physics_RigidBody_getLinearVelocity) -// js_ctor -static bool js_new_cc_physics_TrimeshDesc(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_physics_RigidBody_setLinearVelocity(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); + cc::physics::RigidBody *arg1 = (cc::physics::RigidBody *) NULL ; + float arg2 ; + float arg3 ; + float arg4 ; - cc::physics::TrimeshDesc *result; - result = (cc::physics::TrimeshDesc *)new cc::physics::TrimeshDesc(); + if(argc != 3) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "RigidBody_setLinearVelocity,2,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "RigidBody_setLinearVelocity,3,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[2], &arg4, nullptr); + SE_PRECONDITION2(ok, false, "RigidBody_setLinearVelocity,4,SWIGTYPE_float"); + (arg1)->setLinearVelocity(arg2,arg3,arg4); - auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); - s.thisObject()->setPrivateObject(ptr); return true; } -SE_BIND_CTOR(js_new_cc_physics_TrimeshDesc, __jsb_cc_physics_TrimeshDesc_class, js_delete_cc_physics_TrimeshDesc) +SE_BIND_FUNC(js_cc_physics_RigidBody_setLinearVelocity) -static bool js_delete_cc_physics_TrimeshDesc(se::State& s) +static bool js_cc_physics_RigidBody_getAngularVelocity(se::State& s) { - // js_dtoroverride + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::RigidBody *arg1 = (cc::physics::RigidBody *) NULL ; + cc::Vec3 result; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (arg1)->getAngularVelocity(); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "RigidBody_getAngularVelocity, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + return true; } -SE_BIND_FINALIZE_FUNC(js_delete_cc_physics_TrimeshDesc) +SE_BIND_FUNC(js_cc_physics_RigidBody_getAngularVelocity) -template<> -bool sevalue_to_native(const se::Value &from, cc::physics::TrimeshDesc * to, se::Object *ctx) +static bool js_cc_physics_RigidBody_setAngularVelocity(se::State& s) { - assert(from.isObject()); - se::Object *json = from.toObject(); - auto* data = reinterpret_cast(json->getPrivateData()); - if (data) { - *to = *data; - return true; + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::RigidBody *arg1 = (cc::physics::RigidBody *) NULL ; + float arg2 ; + float arg3 ; + float arg4 ; + + if(argc != 3) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); + return false; } - se::Value field; - bool ok = true; + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "RigidBody_setAngularVelocity,2,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "RigidBody_setAngularVelocity,3,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[2], &arg4, nullptr); + SE_PRECONDITION2(ok, false, "RigidBody_setAngularVelocity,4,SWIGTYPE_float"); + (arg1)->setAngularVelocity(arg2,arg3,arg4); + + + return true; +} +SE_BIND_FUNC(js_cc_physics_RigidBody_setAngularVelocity) + +static bool js_cc_physics_RigidBody_applyForce(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::RigidBody *arg1 = (cc::physics::RigidBody *) NULL ; + float arg2 ; + float arg3 ; + float arg4 ; + float arg5 ; + float arg6 ; + float arg7 ; - json->getProperty("triangles", &field, true); - if (!field.isNullOrUndefined()) { - ok &= sevalue_to_native(field, &(to->triangles), ctx); + if(argc != 6) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 6); + return false; } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "RigidBody_applyForce,2,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "RigidBody_applyForce,3,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[2], &arg4, nullptr); + SE_PRECONDITION2(ok, false, "RigidBody_applyForce,4,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[3], &arg5, nullptr); + SE_PRECONDITION2(ok, false, "RigidBody_applyForce,5,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[4], &arg6, nullptr); + SE_PRECONDITION2(ok, false, "RigidBody_applyForce,6,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[5], &arg7, nullptr); + SE_PRECONDITION2(ok, false, "RigidBody_applyForce,7,SWIGTYPE_float"); + (arg1)->applyForce(arg2,arg3,arg4,arg5,arg6,arg7); - json->getProperty("triangleLength", &field, true); - if (!field.isNullOrUndefined()) { - ok &= sevalue_to_native(field, &(to->triangleLength), ctx); + return true; +} +SE_BIND_FUNC(js_cc_physics_RigidBody_applyForce) + +static bool js_cc_physics_RigidBody_applyLocalForce(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::RigidBody *arg1 = (cc::physics::RigidBody *) NULL ; + float arg2 ; + float arg3 ; + float arg4 ; + float arg5 ; + float arg6 ; + float arg7 ; + + if(argc != 6) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 6); + return false; } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "RigidBody_applyLocalForce,2,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "RigidBody_applyLocalForce,3,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[2], &arg4, nullptr); + SE_PRECONDITION2(ok, false, "RigidBody_applyLocalForce,4,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[3], &arg5, nullptr); + SE_PRECONDITION2(ok, false, "RigidBody_applyLocalForce,5,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[4], &arg6, nullptr); + SE_PRECONDITION2(ok, false, "RigidBody_applyLocalForce,6,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[5], &arg7, nullptr); + SE_PRECONDITION2(ok, false, "RigidBody_applyLocalForce,7,SWIGTYPE_float"); + (arg1)->applyLocalForce(arg2,arg3,arg4,arg5,arg6,arg7); + + + return true; +} +SE_BIND_FUNC(js_cc_physics_RigidBody_applyLocalForce) + +static bool js_cc_physics_RigidBody_applyImpulse(se::State& s) +{ + // js_function + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::RigidBody *arg1 = (cc::physics::RigidBody *) NULL ; + float arg2 ; + float arg3 ; + float arg4 ; + float arg5 ; + float arg6 ; + float arg7 ; - json->getProperty("isU16", &field, true); - if (!field.isNullOrUndefined()) { - ok &= sevalue_to_native(field, &(to->isU16), ctx); + if(argc != 6) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 6); + return false; } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "RigidBody_applyImpulse,2,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "RigidBody_applyImpulse,3,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[2], &arg4, nullptr); + SE_PRECONDITION2(ok, false, "RigidBody_applyImpulse,4,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[3], &arg5, nullptr); + SE_PRECONDITION2(ok, false, "RigidBody_applyImpulse,5,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[4], &arg6, nullptr); + SE_PRECONDITION2(ok, false, "RigidBody_applyImpulse,6,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[5], &arg7, nullptr); + SE_PRECONDITION2(ok, false, "RigidBody_applyImpulse,7,SWIGTYPE_float"); + (arg1)->applyImpulse(arg2,arg3,arg4,arg5,arg6,arg7); + + + return true; +} +SE_BIND_FUNC(js_cc_physics_RigidBody_applyImpulse) + +static bool js_cc_physics_RigidBody_applyLocalImpulse(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::RigidBody *arg1 = (cc::physics::RigidBody *) NULL ; + float arg2 ; + float arg3 ; + float arg4 ; + float arg5 ; + float arg6 ; + float arg7 ; + + if(argc != 6) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 6); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "RigidBody_applyLocalImpulse,2,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "RigidBody_applyLocalImpulse,3,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[2], &arg4, nullptr); + SE_PRECONDITION2(ok, false, "RigidBody_applyLocalImpulse,4,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[3], &arg5, nullptr); + SE_PRECONDITION2(ok, false, "RigidBody_applyLocalImpulse,5,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[4], &arg6, nullptr); + SE_PRECONDITION2(ok, false, "RigidBody_applyLocalImpulse,6,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[5], &arg7, nullptr); + SE_PRECONDITION2(ok, false, "RigidBody_applyLocalImpulse,7,SWIGTYPE_float"); + (arg1)->applyLocalImpulse(arg2,arg3,arg4,arg5,arg6,arg7); + + + return true; +} +SE_BIND_FUNC(js_cc_physics_RigidBody_applyLocalImpulse) + +static bool js_cc_physics_RigidBody_applyTorque(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::RigidBody *arg1 = (cc::physics::RigidBody *) NULL ; + float arg2 ; + float arg3 ; + float arg4 ; + + if(argc != 3) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "RigidBody_applyTorque,2,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "RigidBody_applyTorque,3,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[2], &arg4, nullptr); + SE_PRECONDITION2(ok, false, "RigidBody_applyTorque,4,SWIGTYPE_float"); + (arg1)->applyTorque(arg2,arg3,arg4); + + + return true; +} +SE_BIND_FUNC(js_cc_physics_RigidBody_applyTorque) + +static bool js_cc_physics_RigidBody_applyLocalTorque(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::RigidBody *arg1 = (cc::physics::RigidBody *) NULL ; + float arg2 ; + float arg3 ; + float arg4 ; + + if(argc != 3) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "RigidBody_applyLocalTorque,2,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "RigidBody_applyLocalTorque,3,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[2], &arg4, nullptr); + SE_PRECONDITION2(ok, false, "RigidBody_applyLocalTorque,4,SWIGTYPE_float"); + (arg1)->applyLocalTorque(arg2,arg3,arg4); + + + return true; +} +SE_BIND_FUNC(js_cc_physics_RigidBody_applyLocalTorque) + +static bool js_cc_physics_RigidBody_getGroup(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::RigidBody *arg1 = (cc::physics::RigidBody *) NULL ; + uint32_t result; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (arg1)->getGroup(); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "RigidBody_getGroup, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_FUNC(js_cc_physics_RigidBody_getGroup) + +static bool js_cc_physics_RigidBody_setGroup(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::RigidBody *arg1 = (cc::physics::RigidBody *) NULL ; + uint32_t arg2 ; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "RigidBody_setGroup,2,SWIGTYPE_uint32_t"); + + (arg1)->setGroup(arg2); + + + return true; +} +SE_BIND_FUNC(js_cc_physics_RigidBody_setGroup) + +static bool js_cc_physics_RigidBody_getMask(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::RigidBody *arg1 = (cc::physics::RigidBody *) NULL ; + uint32_t result; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (arg1)->getMask(); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "RigidBody_getMask, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_FUNC(js_cc_physics_RigidBody_getMask) + +static bool js_cc_physics_RigidBody_setMask(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::RigidBody *arg1 = (cc::physics::RigidBody *) NULL ; + uint32_t arg2 ; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "RigidBody_setMask,2,SWIGTYPE_uint32_t"); + + (arg1)->setMask(arg2); + + + return true; +} +SE_BIND_FUNC(js_cc_physics_RigidBody_setMask) + +static bool js_cc_physics_RigidBody_getObjectID(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::RigidBody *arg1 = (cc::physics::RigidBody *) NULL ; + uint32_t result; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = ((cc::physics::RigidBody const *)arg1)->getObjectID(); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "RigidBody_getObjectID, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + + return true; +} +SE_BIND_FUNC(js_cc_physics_RigidBody_getObjectID) + +bool js_register_cc_physics_RigidBody(se::Object* obj) { + auto* cls = se::Class::create("RigidBody", obj, nullptr, _SE(js_new_cc_physics_RigidBody)); + + + cls->defineFunction("initialize", _SE(js_cc_physics_RigidBody_initialize)); + cls->defineFunction("onEnable", _SE(js_cc_physics_RigidBody_onEnable)); + cls->defineFunction("onDisable", _SE(js_cc_physics_RigidBody_onDisable)); + cls->defineFunction("onDestroy", _SE(js_cc_physics_RigidBody_onDestroy)); + cls->defineFunction("isAwake", _SE(js_cc_physics_RigidBody_isAwake)); + cls->defineFunction("isSleepy", _SE(js_cc_physics_RigidBody_isSleepy)); + cls->defineFunction("isSleeping", _SE(js_cc_physics_RigidBody_isSleeping)); + cls->defineFunction("setType", _SE(js_cc_physics_RigidBody_setType)); + cls->defineFunction("setMass", _SE(js_cc_physics_RigidBody_setMass)); + cls->defineFunction("setLinearDamping", _SE(js_cc_physics_RigidBody_setLinearDamping)); + cls->defineFunction("setAngularDamping", _SE(js_cc_physics_RigidBody_setAngularDamping)); + cls->defineFunction("useGravity", _SE(js_cc_physics_RigidBody_useGravity)); + cls->defineFunction("useCCD", _SE(js_cc_physics_RigidBody_useCCD)); + cls->defineFunction("setLinearFactor", _SE(js_cc_physics_RigidBody_setLinearFactor)); + cls->defineFunction("setAngularFactor", _SE(js_cc_physics_RigidBody_setAngularFactor)); + cls->defineFunction("setAllowSleep", _SE(js_cc_physics_RigidBody_setAllowSleep)); + cls->defineFunction("wakeUp", _SE(js_cc_physics_RigidBody_wakeUp)); + cls->defineFunction("sleep", _SE(js_cc_physics_RigidBody_sleep)); + cls->defineFunction("clearState", _SE(js_cc_physics_RigidBody_clearState)); + cls->defineFunction("clearForces", _SE(js_cc_physics_RigidBody_clearForces)); + cls->defineFunction("clearVelocity", _SE(js_cc_physics_RigidBody_clearVelocity)); + cls->defineFunction("setSleepThreshold", _SE(js_cc_physics_RigidBody_setSleepThreshold)); + cls->defineFunction("getSleepThreshold", _SE(js_cc_physics_RigidBody_getSleepThreshold)); + cls->defineFunction("getLinearVelocity", _SE(js_cc_physics_RigidBody_getLinearVelocity)); + cls->defineFunction("setLinearVelocity", _SE(js_cc_physics_RigidBody_setLinearVelocity)); + cls->defineFunction("getAngularVelocity", _SE(js_cc_physics_RigidBody_getAngularVelocity)); + cls->defineFunction("setAngularVelocity", _SE(js_cc_physics_RigidBody_setAngularVelocity)); + cls->defineFunction("applyForce", _SE(js_cc_physics_RigidBody_applyForce)); + cls->defineFunction("applyLocalForce", _SE(js_cc_physics_RigidBody_applyLocalForce)); + cls->defineFunction("applyImpulse", _SE(js_cc_physics_RigidBody_applyImpulse)); + cls->defineFunction("applyLocalImpulse", _SE(js_cc_physics_RigidBody_applyLocalImpulse)); + cls->defineFunction("applyTorque", _SE(js_cc_physics_RigidBody_applyTorque)); + cls->defineFunction("applyLocalTorque", _SE(js_cc_physics_RigidBody_applyLocalTorque)); + cls->defineFunction("getGroup", _SE(js_cc_physics_RigidBody_getGroup)); + cls->defineFunction("setGroup", _SE(js_cc_physics_RigidBody_setGroup)); + cls->defineFunction("getMask", _SE(js_cc_physics_RigidBody_getMask)); + cls->defineFunction("setMask", _SE(js_cc_physics_RigidBody_setMask)); + cls->defineFunction("getObjectID", _SE(js_cc_physics_RigidBody_getObjectID)); + + + + + cls->defineFinalizeFunction(_SE(js_delete_cc_physics_RigidBody)); + + + cls->install(); + JSBClassType::registerClass(cls); + + __jsb_cc_physics_RigidBody_proto = cls->getProto(); + __jsb_cc_physics_RigidBody_class = cls; + se::ScriptEngine::getInstance()->clearException(); + return true; +} + + +se::Class* __jsb_cc_physics_SphereShape_class = nullptr; +se::Object* __jsb_cc_physics_SphereShape_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_physics_SphereShape) + +// js_ctor +static bool js_new_cc_physics_SphereShape(se::State& s) // NOLINT(readability-identifier-naming) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + + cc::physics::SphereShape *result; + result = (cc::physics::SphereShape *)new cc::physics::SphereShape(); + + + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); + return true; +} +SE_BIND_CTOR(js_new_cc_physics_SphereShape, __jsb_cc_physics_SphereShape_class, js_delete_cc_physics_SphereShape) + +static bool js_delete_cc_physics_SphereShape(se::State& s) +{ + // js_dtoroverride + return true; +} +SE_BIND_FINALIZE_FUNC(js_delete_cc_physics_SphereShape) + +static bool js_cc_physics_SphereShape_initialize(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::SphereShape *arg1 = (cc::physics::SphereShape *) NULL ; + cc::Node *arg2 = (cc::Node *) NULL ; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "SphereShape_initialize,2,SWIGTYPE_p_cc__Node"); + (arg1)->initialize(arg2); - return ok; + return true; } +SE_BIND_FUNC(js_cc_physics_SphereShape_initialize) - -bool js_register_cc_physics_TrimeshDesc(se::Object* obj) { - auto* cls = se::Class::create("TrimeshDesc", obj, __jsb_cc_physics_ConvexDesc_proto, _SE(js_new_cc_physics_TrimeshDesc)); - - cls->defineProperty("triangles", _SE(js_cc_physics_TrimeshDesc_triangles_get), _SE(js_cc_physics_TrimeshDesc_triangles_set)); - cls->defineProperty("triangleLength", _SE(js_cc_physics_TrimeshDesc_triangleLength_get), _SE(js_cc_physics_TrimeshDesc_triangleLength_set)); - cls->defineProperty("isU16", _SE(js_cc_physics_TrimeshDesc_isU16_get), _SE(js_cc_physics_TrimeshDesc_isU16_set)); - - - - +static bool js_cc_physics_SphereShape_onEnable(se::State& s) +{ + // js_function - cls->defineFinalizeFunction(_SE(js_delete_cc_physics_TrimeshDesc)); + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::SphereShape *arg1 = (cc::physics::SphereShape *) NULL ; + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + (arg1)->onEnable(); - cls->install(); - JSBClassType::registerClass(cls); - __jsb_cc_physics_TrimeshDesc_proto = cls->getProto(); - __jsb_cc_physics_TrimeshDesc_class = cls; - se::ScriptEngine::getInstance()->clearException(); return true; } +SE_BIND_FUNC(js_cc_physics_SphereShape_onEnable) - -se::Class* __jsb_cc_physics_HeightFieldDesc_class = nullptr; -se::Object* __jsb_cc_physics_HeightFieldDesc_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_physics_HeightFieldDesc) - -static bool js_cc_physics_HeightFieldDesc_rows_set(se::State& s) +static bool js_cc_physics_SphereShape_onDisable(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::HeightFieldDesc *arg1 = (cc::physics::HeightFieldDesc *) NULL ; + cc::physics::SphereShape *arg1 = (cc::physics::SphereShape *) NULL ; - arg1 = SE_THIS_OBJECT(s); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1->rows, s.thisObject()); - SE_PRECONDITION2(ok, false, "HeightFieldDesc_rows_set,2,SWIGTYPE_uint32_t"); - + (arg1)->onDisable(); return true; } -SE_BIND_PROP_SET(js_cc_physics_HeightFieldDesc_rows_set) +SE_BIND_FUNC(js_cc_physics_SphereShape_onDisable) -static bool js_cc_physics_HeightFieldDesc_rows_get(se::State& s) +static bool js_cc_physics_SphereShape_onDestroy(se::State& s) { + // js_function + CC_UNUSED bool ok = true; - cc::physics::HeightFieldDesc *arg1 = (cc::physics::HeightFieldDesc *) NULL ; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::SphereShape *arg1 = (cc::physics::SphereShape *) NULL ; - arg1 = SE_THIS_OBJECT(s); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(arg1->rows, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "HeightFieldDesc_rows_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->rows, s.thisObject(), s.rval()); - + (arg1)->onDestroy(); return true; } -SE_BIND_PROP_GET(js_cc_physics_HeightFieldDesc_rows_get) +SE_BIND_FUNC(js_cc_physics_SphereShape_onDestroy) -static bool js_cc_physics_HeightFieldDesc_columns_set(se::State& s) +static bool js_cc_physics_SphereShape_setMaterial(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::HeightFieldDesc *arg1 = (cc::physics::HeightFieldDesc *) NULL ; + cc::physics::SphereShape *arg1 = (cc::physics::SphereShape *) NULL ; + uint16_t arg2 ; + float arg3 ; + float arg4 ; + float arg5 ; + uint8_t arg6 ; + uint8_t arg7 ; - arg1 = SE_THIS_OBJECT(s); + if(argc != 6) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 6); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1->columns, s.thisObject()); - SE_PRECONDITION2(ok, false, "HeightFieldDesc_columns_set,2,SWIGTYPE_uint32_t"); + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "SphereShape_setMaterial,2,SWIGTYPE_uint16_t"); + + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "SphereShape_setMaterial,3,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[2], &arg4, nullptr); + SE_PRECONDITION2(ok, false, "SphereShape_setMaterial,4,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[3], &arg5, nullptr); + SE_PRECONDITION2(ok, false, "SphereShape_setMaterial,5,SWIGTYPE_float"); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[4], &arg6, s.thisObject()); + SE_PRECONDITION2(ok, false, "SphereShape_setMaterial,6,SWIGTYPE_uint8_t"); + + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[5], &arg7, s.thisObject()); + SE_PRECONDITION2(ok, false, "SphereShape_setMaterial,7,SWIGTYPE_uint8_t"); + (arg1)->setMaterial(arg2,arg3,arg4,arg5,arg6,arg7); return true; } -SE_BIND_PROP_SET(js_cc_physics_HeightFieldDesc_columns_set) +SE_BIND_FUNC(js_cc_physics_SphereShape_setMaterial) -static bool js_cc_physics_HeightFieldDesc_columns_get(se::State& s) +static bool js_cc_physics_SphereShape_setAsTrigger(se::State& s) { + // js_function + CC_UNUSED bool ok = true; - cc::physics::HeightFieldDesc *arg1 = (cc::physics::HeightFieldDesc *) NULL ; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::SphereShape *arg1 = (cc::physics::SphereShape *) NULL ; + bool arg2 ; - arg1 = SE_THIS_OBJECT(s); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(arg1->columns, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "HeightFieldDesc_columns_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->columns, s.thisObject(), s.rval()); - + // %typemap(in) bool + ok &= sevalue_to_native(args[0], &arg2); + SE_PRECONDITION2(ok, false, "SphereShape_setAsTrigger,2,SWIGTYPE_bool"); + (arg1)->setAsTrigger(arg2); return true; } -SE_BIND_PROP_GET(js_cc_physics_HeightFieldDesc_columns_get) +SE_BIND_FUNC(js_cc_physics_SphereShape_setAsTrigger) -static bool js_cc_physics_HeightFieldDesc_samples_set(se::State& s) +static bool js_cc_physics_SphereShape_setCenter(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::HeightFieldDesc *arg1 = (cc::physics::HeightFieldDesc *) NULL ; + cc::physics::SphereShape *arg1 = (cc::physics::SphereShape *) NULL ; + float arg2 ; + float arg3 ; + float arg4 ; - arg1 = SE_THIS_OBJECT(s); + if(argc != 3) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - ok &= sevalue_to_native(args[0], &arg1->samples); - SE_PRECONDITION2(ok, false, "HeightFieldDesc_samples_set,2,SWIGTYPE_p_void"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "SphereShape_setCenter,2,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "SphereShape_setCenter,3,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[2], &arg4, nullptr); + SE_PRECONDITION2(ok, false, "SphereShape_setCenter,4,SWIGTYPE_float"); + (arg1)->setCenter(arg2,arg3,arg4); return true; } -SE_BIND_PROP_SET(js_cc_physics_HeightFieldDesc_samples_set) +SE_BIND_FUNC(js_cc_physics_SphereShape_setCenter) -static bool js_cc_physics_HeightFieldDesc_samples_get(se::State& s) +static bool js_cc_physics_SphereShape_updateEventListener(se::State& s) { + // js_function + CC_UNUSED bool ok = true; - cc::physics::HeightFieldDesc *arg1 = (cc::physics::HeightFieldDesc *) NULL ; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::SphereShape *arg1 = (cc::physics::SphereShape *) NULL ; + cc::physics::EShapeFilterFlag arg2 ; + int32_t temp2 ; - arg1 = SE_THIS_OBJECT(s); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(out) SWIGTYPE* - ok &= nativevalue_to_se(arg1->samples, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "HeightFieldDesc_samples_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->samples, s.thisObject(), s.rval()); + // %typemap(in) enum SWIGTYPE (int32_t temp2) + ok &= sevalue_to_native(args[0], &temp2); + SE_PRECONDITION2(ok, false, "SphereShape_updateEventListener,2,SWIGTYPE_cc__physics__EShapeFilterFlag"); + arg2 = (cc::physics::EShapeFilterFlag)temp2; + (arg1)->updateEventListener(arg2); return true; } -SE_BIND_PROP_GET(js_cc_physics_HeightFieldDesc_samples_get) +SE_BIND_FUNC(js_cc_physics_SphereShape_updateEventListener) -// js_ctor -static bool js_new_cc_physics_HeightFieldDesc(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_physics_SphereShape_getAABB(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); + cc::physics::SphereShape *arg1 = (cc::physics::SphereShape *) NULL ; + cc::geometry::AABB *result = 0 ; - cc::physics::HeightFieldDesc *result; - result = (cc::physics::HeightFieldDesc *)new cc::physics::HeightFieldDesc(); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (cc::geometry::AABB *) &(arg1)->getAABB(); + // %typemap(out) SWIGTYPE& + ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "SphereShape_getAABB, Error processing arguments"); + SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); - auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); - s.thisObject()->setPrivateObject(ptr); - return true; -} -SE_BIND_CTOR(js_new_cc_physics_HeightFieldDesc, __jsb_cc_physics_HeightFieldDesc_class, js_delete_cc_physics_HeightFieldDesc) - -static bool js_delete_cc_physics_HeightFieldDesc(se::State& s) -{ - // js_dtoroverride return true; } -SE_BIND_FINALIZE_FUNC(js_delete_cc_physics_HeightFieldDesc) +SE_BIND_FUNC(js_cc_physics_SphereShape_getAABB) -template<> -bool sevalue_to_native(const se::Value &from, cc::physics::HeightFieldDesc * to, se::Object *ctx) +static bool js_cc_physics_SphereShape_getBoundingSphere(se::State& s) { - assert(from.isObject()); - se::Object *json = from.toObject(); - auto* data = reinterpret_cast(json->getPrivateData()); - if (data) { - *to = *data; - return true; - } - se::Value field; - bool ok = true; - - json->getProperty("rows", &field, true); - if (!field.isNullOrUndefined()) { - ok &= sevalue_to_native(field, &(to->rows), ctx); - } - - - json->getProperty("columns", &field, true); - if (!field.isNullOrUndefined()) { - ok &= sevalue_to_native(field, &(to->columns), ctx); - } + // js_function + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::SphereShape *arg1 = (cc::physics::SphereShape *) NULL ; + cc::geometry::Sphere *result = 0 ; - json->getProperty("samples", &field, true); - if (!field.isNullOrUndefined()) { - ok &= sevalue_to_native(field, &(to->samples), ctx); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (cc::geometry::Sphere *) &(arg1)->getBoundingSphere(); + // %typemap(out) SWIGTYPE& + ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "SphereShape_getBoundingSphere, Error processing arguments"); + SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); - return ok; + return true; } +SE_BIND_FUNC(js_cc_physics_SphereShape_getBoundingSphere) - -bool js_register_cc_physics_HeightFieldDesc(se::Object* obj) { - auto* cls = se::Class::create("HeightFieldDesc", obj, nullptr, _SE(js_new_cc_physics_HeightFieldDesc)); - - cls->defineProperty("rows", _SE(js_cc_physics_HeightFieldDesc_rows_get), _SE(js_cc_physics_HeightFieldDesc_rows_set)); - cls->defineProperty("columns", _SE(js_cc_physics_HeightFieldDesc_columns_get), _SE(js_cc_physics_HeightFieldDesc_columns_set)); - cls->defineProperty("samples", _SE(js_cc_physics_HeightFieldDesc_samples_get), _SE(js_cc_physics_HeightFieldDesc_samples_set)); - - - +static bool js_cc_physics_SphereShape_getGroup(se::State& s) +{ + // js_function + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::SphereShape *arg1 = (cc::physics::SphereShape *) NULL ; + uint32_t result; - cls->defineFinalizeFunction(_SE(js_delete_cc_physics_HeightFieldDesc)); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (arg1)->getGroup(); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "SphereShape_getGroup, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - cls->install(); - JSBClassType::registerClass(cls); - __jsb_cc_physics_HeightFieldDesc_proto = cls->getProto(); - __jsb_cc_physics_HeightFieldDesc_class = cls; - se::ScriptEngine::getInstance()->clearException(); return true; } +SE_BIND_FUNC(js_cc_physics_SphereShape_getGroup) - -se::Class* __jsb_cc_physics_RaycastOptions_class = nullptr; -se::Object* __jsb_cc_physics_RaycastOptions_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_physics_RaycastOptions) - -static bool js_cc_physics_RaycastOptions_origin_set(se::State& s) +static bool js_cc_physics_SphereShape_setGroup(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::RaycastOptions *arg1 = (cc::physics::RaycastOptions *) NULL ; + cc::physics::SphereShape *arg1 = (cc::physics::SphereShape *) NULL ; + uint32_t arg2 ; - arg1 = SE_THIS_OBJECT(s); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1->origin, s.thisObject()); - SE_PRECONDITION2(ok, false, "RaycastOptions_origin_set,2,SWIGTYPE_Vec3"); + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "SphereShape_setGroup,2,SWIGTYPE_uint32_t"); + (arg1)->setGroup(arg2); return true; } -SE_BIND_PROP_SET(js_cc_physics_RaycastOptions_origin_set) +SE_BIND_FUNC(js_cc_physics_SphereShape_setGroup) -static bool js_cc_physics_RaycastOptions_origin_get(se::State& s) +static bool js_cc_physics_SphereShape_getMask(se::State& s) { + // js_function + CC_UNUSED bool ok = true; - cc::physics::RaycastOptions *arg1 = (cc::physics::RaycastOptions *) NULL ; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::SphereShape *arg1 = (cc::physics::SphereShape *) NULL ; + uint32_t result; - arg1 = SE_THIS_OBJECT(s); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (arg1)->getMask(); // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(arg1->origin, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "RaycastOptions_origin_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->origin, s.thisObject(), s.rval()); + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "SphereShape_getMask, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); return true; } -SE_BIND_PROP_GET(js_cc_physics_RaycastOptions_origin_get) +SE_BIND_FUNC(js_cc_physics_SphereShape_getMask) -static bool js_cc_physics_RaycastOptions_distance_set(se::State& s) +static bool js_cc_physics_SphereShape_setMask(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::RaycastOptions *arg1 = (cc::physics::RaycastOptions *) NULL ; + cc::physics::SphereShape *arg1 = (cc::physics::SphereShape *) NULL ; + uint32_t arg2 ; - arg1 = SE_THIS_OBJECT(s); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg1->distance, nullptr); - SE_PRECONDITION2(ok, false, "RaycastOptions_distance_set,2,SWIGTYPE_float"); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "SphereShape_setMask,2,SWIGTYPE_uint32_t"); + + (arg1)->setMask(arg2); return true; } -SE_BIND_PROP_SET(js_cc_physics_RaycastOptions_distance_set) +SE_BIND_FUNC(js_cc_physics_SphereShape_setMask) -static bool js_cc_physics_RaycastOptions_distance_get(se::State& s) +static bool js_cc_physics_SphereShape_getObjectID(se::State& s) { + // js_function + CC_UNUSED bool ok = true; - cc::physics::RaycastOptions *arg1 = (cc::physics::RaycastOptions *) NULL ; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::SphereShape *arg1 = (cc::physics::SphereShape *) NULL ; + uint32_t result; - arg1 = SE_THIS_OBJECT(s); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = ((cc::physics::SphereShape const *)arg1)->getObjectID(); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "SphereShape_getObjectID, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - // out 1 - ok &= nativevalue_to_se(arg1->distance, s.rval(), s.thisObject() /*ctx*/); return true; } -SE_BIND_PROP_GET(js_cc_physics_RaycastOptions_distance_get) +SE_BIND_FUNC(js_cc_physics_SphereShape_getObjectID) -static bool js_cc_physics_RaycastOptions_unitDir_set(se::State& s) +static bool js_cc_physics_SphereShape_setRadius(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::RaycastOptions *arg1 = (cc::physics::RaycastOptions *) NULL ; + cc::physics::SphereShape *arg1 = (cc::physics::SphereShape *) NULL ; + float arg2 ; - arg1 = SE_THIS_OBJECT(s); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1->unitDir, s.thisObject()); - SE_PRECONDITION2(ok, false, "RaycastOptions_unitDir_set,2,SWIGTYPE_Vec3"); - + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "SphereShape_setRadius,2,SWIGTYPE_float"); + (arg1)->setRadius(arg2); return true; } -SE_BIND_PROP_SET(js_cc_physics_RaycastOptions_unitDir_set) +SE_BIND_FUNC(js_cc_physics_SphereShape_setRadius) -static bool js_cc_physics_RaycastOptions_unitDir_get(se::State& s) -{ - CC_UNUSED bool ok = true; - cc::physics::RaycastOptions *arg1 = (cc::physics::RaycastOptions *) NULL ; +bool js_register_cc_physics_SphereShape(se::Object* obj) { + auto* cls = se::Class::create("SphereShape", obj, nullptr, _SE(js_new_cc_physics_SphereShape)); + + + cls->defineFunction("initialize", _SE(js_cc_physics_SphereShape_initialize)); + cls->defineFunction("onEnable", _SE(js_cc_physics_SphereShape_onEnable)); + cls->defineFunction("onDisable", _SE(js_cc_physics_SphereShape_onDisable)); + cls->defineFunction("onDestroy", _SE(js_cc_physics_SphereShape_onDestroy)); + cls->defineFunction("setMaterial", _SE(js_cc_physics_SphereShape_setMaterial)); + cls->defineFunction("setAsTrigger", _SE(js_cc_physics_SphereShape_setAsTrigger)); + cls->defineFunction("setCenter", _SE(js_cc_physics_SphereShape_setCenter)); + cls->defineFunction("updateEventListener", _SE(js_cc_physics_SphereShape_updateEventListener)); + cls->defineFunction("getAABB", _SE(js_cc_physics_SphereShape_getAABB)); + cls->defineFunction("getBoundingSphere", _SE(js_cc_physics_SphereShape_getBoundingSphere)); + cls->defineFunction("getGroup", _SE(js_cc_physics_SphereShape_getGroup)); + cls->defineFunction("setGroup", _SE(js_cc_physics_SphereShape_setGroup)); + cls->defineFunction("getMask", _SE(js_cc_physics_SphereShape_getMask)); + cls->defineFunction("setMask", _SE(js_cc_physics_SphereShape_setMask)); + cls->defineFunction("getObjectID", _SE(js_cc_physics_SphereShape_getObjectID)); + cls->defineFunction("setRadius", _SE(js_cc_physics_SphereShape_setRadius)); - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(arg1->unitDir, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "RaycastOptions_unitDir_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->unitDir, s.thisObject(), s.rval()); + cls->defineFinalizeFunction(_SE(js_delete_cc_physics_SphereShape)); + + + cls->install(); + JSBClassType::registerClass(cls); + + __jsb_cc_physics_SphereShape_proto = cls->getProto(); + __jsb_cc_physics_SphereShape_class = cls; + se::ScriptEngine::getInstance()->clearException(); return true; } -SE_BIND_PROP_GET(js_cc_physics_RaycastOptions_unitDir_get) -static bool js_cc_physics_RaycastOptions_mask_set(se::State& s) + +se::Class* __jsb_cc_physics_BoxShape_class = nullptr; +se::Object* __jsb_cc_physics_BoxShape_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_physics_BoxShape) + +// js_ctor +static bool js_new_cc_physics_BoxShape(se::State& s) // NOLINT(readability-identifier-naming) { CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::RaycastOptions *arg1 = (cc::physics::RaycastOptions *) NULL ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1->mask, s.thisObject()); - SE_PRECONDITION2(ok, false, "RaycastOptions_mask_set,2,SWIGTYPE_uint32_t"); + cc::physics::BoxShape *result; + result = (cc::physics::BoxShape *)new cc::physics::BoxShape(); + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); return true; } -SE_BIND_PROP_SET(js_cc_physics_RaycastOptions_mask_set) +SE_BIND_CTOR(js_new_cc_physics_BoxShape, __jsb_cc_physics_BoxShape_class, js_delete_cc_physics_BoxShape) -static bool js_cc_physics_RaycastOptions_mask_get(se::State& s) +static bool js_delete_cc_physics_BoxShape(se::State& s) { - CC_UNUSED bool ok = true; - cc::physics::RaycastOptions *arg1 = (cc::physics::RaycastOptions *) NULL ; - - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(arg1->mask, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "RaycastOptions_mask_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->mask, s.thisObject(), s.rval()); - - - + // js_dtoroverride return true; } -SE_BIND_PROP_GET(js_cc_physics_RaycastOptions_mask_get) +SE_BIND_FINALIZE_FUNC(js_delete_cc_physics_BoxShape) -static bool js_cc_physics_RaycastOptions_queryTrigger_set(se::State& s) +static bool js_cc_physics_BoxShape_initialize(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::RaycastOptions *arg1 = (cc::physics::RaycastOptions *) NULL ; + cc::physics::BoxShape *arg1 = (cc::physics::BoxShape *) NULL ; + cc::Node *arg2 = (cc::Node *) NULL ; - arg1 = SE_THIS_OBJECT(s); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) bool - ok &= sevalue_to_native(args[0], &arg1->queryTrigger); - SE_PRECONDITION2(ok, false, "RaycastOptions_queryTrigger_set,2,SWIGTYPE_bool"); + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "BoxShape_initialize,2,SWIGTYPE_p_cc__Node"); + (arg1)->initialize(arg2); return true; } -SE_BIND_PROP_SET(js_cc_physics_RaycastOptions_queryTrigger_set) +SE_BIND_FUNC(js_cc_physics_BoxShape_initialize) -static bool js_cc_physics_RaycastOptions_queryTrigger_get(se::State& s) +static bool js_cc_physics_BoxShape_onEnable(se::State& s) { + // js_function + CC_UNUSED bool ok = true; - cc::physics::RaycastOptions *arg1 = (cc::physics::RaycastOptions *) NULL ; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::BoxShape *arg1 = (cc::physics::BoxShape *) NULL ; - arg1 = SE_THIS_OBJECT(s); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // out 5 - ok &= nativevalue_to_se(arg1->queryTrigger, s.rval(), s.thisObject() /*ctx*/); + (arg1)->onEnable(); return true; } -SE_BIND_PROP_GET(js_cc_physics_RaycastOptions_queryTrigger_get) +SE_BIND_FUNC(js_cc_physics_BoxShape_onEnable) -// js_ctor -static bool js_new_cc_physics_RaycastOptions(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_physics_BoxShape_onDisable(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); + cc::physics::BoxShape *arg1 = (cc::physics::BoxShape *) NULL ; - cc::physics::RaycastOptions *result; - result = (cc::physics::RaycastOptions *)new cc::physics::RaycastOptions(); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + (arg1)->onDisable(); - auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); - s.thisObject()->setPrivateObject(ptr); - return true; -} -SE_BIND_CTOR(js_new_cc_physics_RaycastOptions, __jsb_cc_physics_RaycastOptions_class, js_delete_cc_physics_RaycastOptions) - -static bool js_delete_cc_physics_RaycastOptions(se::State& s) -{ - // js_dtoroverride return true; } -SE_BIND_FINALIZE_FUNC(js_delete_cc_physics_RaycastOptions) +SE_BIND_FUNC(js_cc_physics_BoxShape_onDisable) -template<> -bool sevalue_to_native(const se::Value &from, cc::physics::RaycastOptions * to, se::Object *ctx) +static bool js_cc_physics_BoxShape_onDestroy(se::State& s) { - assert(from.isObject()); - se::Object *json = from.toObject(); - auto* data = reinterpret_cast(json->getPrivateData()); - if (data) { - *to = *data; - return true; - } - se::Value field; - bool ok = true; - - json->getProperty("origin", &field, true); - if (!field.isNullOrUndefined()) { - ok &= sevalue_to_native(field, &(to->origin), ctx); - } - - - json->getProperty("distance", &field, true); - if (!field.isNullOrUndefined()) { - ok &= sevalue_to_native(field, &(to->distance), ctx); - } - - - json->getProperty("unitDir", &field, true); - if (!field.isNullOrUndefined()) { - ok &= sevalue_to_native(field, &(to->unitDir), ctx); - } - - - json->getProperty("mask", &field, true); - if (!field.isNullOrUndefined()) { - ok &= sevalue_to_native(field, &(to->mask), ctx); - } + // js_function + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::BoxShape *arg1 = (cc::physics::BoxShape *) NULL ; - json->getProperty("queryTrigger", &field, true); - if (!field.isNullOrUndefined()) { - ok &= sevalue_to_native(field, &(to->queryTrigger), ctx); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + (arg1)->onDestroy(); - return ok; + return true; } +SE_BIND_FUNC(js_cc_physics_BoxShape_onDestroy) - -bool js_register_cc_physics_RaycastOptions(se::Object* obj) { - auto* cls = se::Class::create("RaycastOptions", obj, nullptr, _SE(js_new_cc_physics_RaycastOptions)); +static bool js_cc_physics_BoxShape_setMaterial(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::BoxShape *arg1 = (cc::physics::BoxShape *) NULL ; + uint16_t arg2 ; + float arg3 ; + float arg4 ; + float arg5 ; + uint8_t arg6 ; + uint8_t arg7 ; - cls->defineProperty("origin", _SE(js_cc_physics_RaycastOptions_origin_get), _SE(js_cc_physics_RaycastOptions_origin_set)); - cls->defineProperty("distance", _SE(js_cc_physics_RaycastOptions_distance_get), _SE(js_cc_physics_RaycastOptions_distance_set)); - cls->defineProperty("unitDir", _SE(js_cc_physics_RaycastOptions_unitDir_get), _SE(js_cc_physics_RaycastOptions_unitDir_set)); - cls->defineProperty("mask", _SE(js_cc_physics_RaycastOptions_mask_get), _SE(js_cc_physics_RaycastOptions_mask_set)); - cls->defineProperty("queryTrigger", _SE(js_cc_physics_RaycastOptions_queryTrigger_get), _SE(js_cc_physics_RaycastOptions_queryTrigger_set)); + if(argc != 6) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 6); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "BoxShape_setMaterial,2,SWIGTYPE_uint16_t"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "BoxShape_setMaterial,3,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[2], &arg4, nullptr); + SE_PRECONDITION2(ok, false, "BoxShape_setMaterial,4,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[3], &arg5, nullptr); + SE_PRECONDITION2(ok, false, "BoxShape_setMaterial,5,SWIGTYPE_float"); + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[4], &arg6, s.thisObject()); + SE_PRECONDITION2(ok, false, "BoxShape_setMaterial,6,SWIGTYPE_uint8_t"); - cls->defineFinalizeFunction(_SE(js_delete_cc_physics_RaycastOptions)); + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[5], &arg7, s.thisObject()); + SE_PRECONDITION2(ok, false, "BoxShape_setMaterial,7,SWIGTYPE_uint8_t"); + (arg1)->setMaterial(arg2,arg3,arg4,arg5,arg6,arg7); - cls->install(); - JSBClassType::registerClass(cls); - __jsb_cc_physics_RaycastOptions_proto = cls->getProto(); - __jsb_cc_physics_RaycastOptions_class = cls; - se::ScriptEngine::getInstance()->clearException(); return true; } +SE_BIND_FUNC(js_cc_physics_BoxShape_setMaterial) - -se::Class* __jsb_cc_physics_RaycastResult_class = nullptr; -se::Object* __jsb_cc_physics_RaycastResult_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_physics_RaycastResult) - -static bool js_cc_physics_RaycastResult_shape_set(se::State& s) +static bool js_cc_physics_BoxShape_setAsTrigger(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::RaycastResult *arg1 = (cc::physics::RaycastResult *) NULL ; + cc::physics::BoxShape *arg1 = (cc::physics::BoxShape *) NULL ; + bool arg2 ; - arg1 = SE_THIS_OBJECT(s); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1->shape, s.thisObject()); - SE_PRECONDITION2(ok, false, "RaycastResult_shape_set,2,SWIGTYPE_uint32_t"); - + // %typemap(in) bool + ok &= sevalue_to_native(args[0], &arg2); + SE_PRECONDITION2(ok, false, "BoxShape_setAsTrigger,2,SWIGTYPE_bool"); + (arg1)->setAsTrigger(arg2); return true; } -SE_BIND_PROP_SET(js_cc_physics_RaycastResult_shape_set) +SE_BIND_FUNC(js_cc_physics_BoxShape_setAsTrigger) -static bool js_cc_physics_RaycastResult_shape_get(se::State& s) +static bool js_cc_physics_BoxShape_setCenter(se::State& s) { + // js_function + CC_UNUSED bool ok = true; - cc::physics::RaycastResult *arg1 = (cc::physics::RaycastResult *) NULL ; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::BoxShape *arg1 = (cc::physics::BoxShape *) NULL ; + float arg2 ; + float arg3 ; + float arg4 ; - arg1 = SE_THIS_OBJECT(s); + if(argc != 3) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(arg1->shape, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "RaycastResult_shape_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->shape, s.thisObject(), s.rval()); - + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "BoxShape_setCenter,2,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "BoxShape_setCenter,3,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[2], &arg4, nullptr); + SE_PRECONDITION2(ok, false, "BoxShape_setCenter,4,SWIGTYPE_float"); + (arg1)->setCenter(arg2,arg3,arg4); return true; } -SE_BIND_PROP_GET(js_cc_physics_RaycastResult_shape_get) +SE_BIND_FUNC(js_cc_physics_BoxShape_setCenter) -static bool js_cc_physics_RaycastResult_hitPoint_set(se::State& s) +static bool js_cc_physics_BoxShape_updateEventListener(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::RaycastResult *arg1 = (cc::physics::RaycastResult *) NULL ; + cc::physics::BoxShape *arg1 = (cc::physics::BoxShape *) NULL ; + cc::physics::EShapeFilterFlag arg2 ; + int32_t temp2 ; - arg1 = SE_THIS_OBJECT(s); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1->hitPoint, s.thisObject()); - SE_PRECONDITION2(ok, false, "RaycastResult_hitPoint_set,2,SWIGTYPE_Vec3"); - + // %typemap(in) enum SWIGTYPE (int32_t temp2) + ok &= sevalue_to_native(args[0], &temp2); + SE_PRECONDITION2(ok, false, "BoxShape_updateEventListener,2,SWIGTYPE_cc__physics__EShapeFilterFlag"); + arg2 = (cc::physics::EShapeFilterFlag)temp2; + (arg1)->updateEventListener(arg2); return true; } -SE_BIND_PROP_SET(js_cc_physics_RaycastResult_hitPoint_set) +SE_BIND_FUNC(js_cc_physics_BoxShape_updateEventListener) -static bool js_cc_physics_RaycastResult_hitPoint_get(se::State& s) +static bool js_cc_physics_BoxShape_getAABB(se::State& s) { + // js_function + CC_UNUSED bool ok = true; - cc::physics::RaycastResult *arg1 = (cc::physics::RaycastResult *) NULL ; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::BoxShape *arg1 = (cc::physics::BoxShape *) NULL ; + cc::geometry::AABB *result = 0 ; - arg1 = SE_THIS_OBJECT(s); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(arg1->hitPoint, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "RaycastResult_hitPoint_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->hitPoint, s.thisObject(), s.rval()); - + result = (cc::geometry::AABB *) &(arg1)->getAABB(); + // %typemap(out) SWIGTYPE& + ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "BoxShape_getAABB, Error processing arguments"); + SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); return true; } -SE_BIND_PROP_GET(js_cc_physics_RaycastResult_hitPoint_get) +SE_BIND_FUNC(js_cc_physics_BoxShape_getAABB) -static bool js_cc_physics_RaycastResult_distance_set(se::State& s) +static bool js_cc_physics_BoxShape_getBoundingSphere(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::RaycastResult *arg1 = (cc::physics::RaycastResult *) NULL ; + cc::physics::BoxShape *arg1 = (cc::physics::BoxShape *) NULL ; + cc::geometry::Sphere *result = 0 ; - arg1 = SE_THIS_OBJECT(s); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg1->distance, nullptr); - SE_PRECONDITION2(ok, false, "RaycastResult_distance_set,2,SWIGTYPE_float"); + result = (cc::geometry::Sphere *) &(arg1)->getBoundingSphere(); + // %typemap(out) SWIGTYPE& + ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "BoxShape_getBoundingSphere, Error processing arguments"); + SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); return true; } -SE_BIND_PROP_SET(js_cc_physics_RaycastResult_distance_set) +SE_BIND_FUNC(js_cc_physics_BoxShape_getBoundingSphere) -static bool js_cc_physics_RaycastResult_distance_get(se::State& s) +static bool js_cc_physics_BoxShape_getGroup(se::State& s) { + // js_function + CC_UNUSED bool ok = true; - cc::physics::RaycastResult *arg1 = (cc::physics::RaycastResult *) NULL ; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::BoxShape *arg1 = (cc::physics::BoxShape *) NULL ; + uint32_t result; - arg1 = SE_THIS_OBJECT(s); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (arg1)->getGroup(); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "BoxShape_getGroup, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - // out 1 - ok &= nativevalue_to_se(arg1->distance, s.rval(), s.thisObject() /*ctx*/); return true; } -SE_BIND_PROP_GET(js_cc_physics_RaycastResult_distance_get) +SE_BIND_FUNC(js_cc_physics_BoxShape_getGroup) -static bool js_cc_physics_RaycastResult_hitNormal_set(se::State& s) +static bool js_cc_physics_BoxShape_setGroup(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::RaycastResult *arg1 = (cc::physics::RaycastResult *) NULL ; + cc::physics::BoxShape *arg1 = (cc::physics::BoxShape *) NULL ; + uint32_t arg2 ; - arg1 = SE_THIS_OBJECT(s); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1->hitNormal, s.thisObject()); - SE_PRECONDITION2(ok, false, "RaycastResult_hitNormal_set,2,SWIGTYPE_Vec3"); + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "BoxShape_setGroup,2,SWIGTYPE_uint32_t"); + (arg1)->setGroup(arg2); return true; } -SE_BIND_PROP_SET(js_cc_physics_RaycastResult_hitNormal_set) +SE_BIND_FUNC(js_cc_physics_BoxShape_setGroup) -static bool js_cc_physics_RaycastResult_hitNormal_get(se::State& s) +static bool js_cc_physics_BoxShape_getMask(se::State& s) { + // js_function + CC_UNUSED bool ok = true; - cc::physics::RaycastResult *arg1 = (cc::physics::RaycastResult *) NULL ; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::BoxShape *arg1 = (cc::physics::BoxShape *) NULL ; + uint32_t result; - arg1 = SE_THIS_OBJECT(s); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (arg1)->getMask(); // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(arg1->hitNormal, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "RaycastResult_hitNormal_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->hitNormal, s.thisObject(), s.rval()); + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "BoxShape_getMask, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); return true; } -SE_BIND_PROP_GET(js_cc_physics_RaycastResult_hitNormal_get) +SE_BIND_FUNC(js_cc_physics_BoxShape_getMask) -// js_ctor -static bool js_new_cc_physics_RaycastResult(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_physics_BoxShape_setMask(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); + cc::physics::BoxShape *arg1 = (cc::physics::BoxShape *) NULL ; + uint32_t arg2 ; - cc::physics::RaycastResult *result; - result = (cc::physics::RaycastResult *)new cc::physics::RaycastResult(); - - - auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); - s.thisObject()->setPrivateObject(ptr); - return true; -} -SE_BIND_CTOR(js_new_cc_physics_RaycastResult, __jsb_cc_physics_RaycastResult_class, js_delete_cc_physics_RaycastResult) - -static bool js_delete_cc_physics_RaycastResult(se::State& s) -{ - // js_dtoroverride - return true; -} -SE_BIND_FINALIZE_FUNC(js_delete_cc_physics_RaycastResult) - -template<> -bool sevalue_to_native(const se::Value &from, cc::physics::RaycastResult * to, se::Object *ctx) -{ - assert(from.isObject()); - se::Object *json = from.toObject(); - auto* data = reinterpret_cast(json->getPrivateData()); - if (data) { - *to = *data; - return true; - } - se::Value field; - bool ok = true; - - json->getProperty("shape", &field, true); - if (!field.isNullOrUndefined()) { - ok &= sevalue_to_native(field, &(to->shape), ctx); - } - - - json->getProperty("hitPoint", &field, true); - if (!field.isNullOrUndefined()) { - ok &= sevalue_to_native(field, &(to->hitPoint), ctx); - } - - - json->getProperty("distance", &field, true); - if (!field.isNullOrUndefined()) { - ok &= sevalue_to_native(field, &(to->distance), ctx); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "BoxShape_setMask,2,SWIGTYPE_uint32_t"); - json->getProperty("hitNormal", &field, true); - if (!field.isNullOrUndefined()) { - ok &= sevalue_to_native(field, &(to->hitNormal), ctx); - } + (arg1)->setMask(arg2); - return ok; + return true; } +SE_BIND_FUNC(js_cc_physics_BoxShape_setMask) - -bool js_register_cc_physics_RaycastResult(se::Object* obj) { - auto* cls = se::Class::create("RaycastResult", obj, nullptr, _SE(js_new_cc_physics_RaycastResult)); - - cls->defineProperty("shape", _SE(js_cc_physics_RaycastResult_shape_get), _SE(js_cc_physics_RaycastResult_shape_set)); - cls->defineProperty("hitPoint", _SE(js_cc_physics_RaycastResult_hitPoint_get), _SE(js_cc_physics_RaycastResult_hitPoint_set)); - cls->defineProperty("distance", _SE(js_cc_physics_RaycastResult_distance_get), _SE(js_cc_physics_RaycastResult_distance_set)); - cls->defineProperty("hitNormal", _SE(js_cc_physics_RaycastResult_hitNormal_get), _SE(js_cc_physics_RaycastResult_hitNormal_set)); - - - +static bool js_cc_physics_BoxShape_getObjectID(se::State& s) +{ + // js_function + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::BoxShape *arg1 = (cc::physics::BoxShape *) NULL ; + uint32_t result; - cls->defineFinalizeFunction(_SE(js_delete_cc_physics_RaycastResult)); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = ((cc::physics::BoxShape const *)arg1)->getObjectID(); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "BoxShape_getObjectID, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - cls->install(); - JSBClassType::registerClass(cls); - __jsb_cc_physics_RaycastResult_proto = cls->getProto(); - __jsb_cc_physics_RaycastResult_class = cls; - se::ScriptEngine::getInstance()->clearException(); - return true; -} - - -se::Class* __jsb_cc_physics_IPhysicsWorld_class = nullptr; -se::Object* __jsb_cc_physics_IPhysicsWorld_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_physics_IPhysicsWorld) - -static bool js_delete_cc_physics_IPhysicsWorld(se::State& s) -{ - // js_dtoroverride return true; } -SE_BIND_FINALIZE_FUNC(js_delete_cc_physics_IPhysicsWorld) +SE_BIND_FUNC(js_cc_physics_BoxShape_getObjectID) -static bool js_cc_physics_IPhysicsWorld_setGravity(se::State& s) +static bool js_cc_physics_BoxShape_setSize(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IPhysicsWorld *arg1 = (cc::physics::IPhysicsWorld *) NULL ; + cc::physics::BoxShape *arg1 = (cc::physics::BoxShape *) NULL ; float arg2 ; float arg3 ; float arg4 ; @@ -2070,893 +2855,840 @@ static bool js_cc_physics_IPhysicsWorld_setGravity(se::State& s) SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) int, short, long, signed char, float, double ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "IPhysicsWorld_setGravity,2,SWIGTYPE_float"); + SE_PRECONDITION2(ok, false, "BoxShape_setSize,2,SWIGTYPE_float"); // %typemap(in) int, short, long, signed char, float, double ok &= sevalue_to_native(args[1], &arg3, nullptr); - SE_PRECONDITION2(ok, false, "IPhysicsWorld_setGravity,3,SWIGTYPE_float"); + SE_PRECONDITION2(ok, false, "BoxShape_setSize,3,SWIGTYPE_float"); // %typemap(in) int, short, long, signed char, float, double ok &= sevalue_to_native(args[2], &arg4, nullptr); - SE_PRECONDITION2(ok, false, "IPhysicsWorld_setGravity,4,SWIGTYPE_float"); - (arg1)->setGravity(arg2,arg3,arg4); + SE_PRECONDITION2(ok, false, "BoxShape_setSize,4,SWIGTYPE_float"); + (arg1)->setSize(arg2,arg3,arg4); return true; } -SE_BIND_FUNC(js_cc_physics_IPhysicsWorld_setGravity) +SE_BIND_FUNC(js_cc_physics_BoxShape_setSize) -static bool js_cc_physics_IPhysicsWorld_setAllowSleep(se::State& s) -{ - // js_function +bool js_register_cc_physics_BoxShape(se::Object* obj) { + auto* cls = se::Class::create("BoxShape", obj, nullptr, _SE(js_new_cc_physics_BoxShape)); + + + cls->defineFunction("initialize", _SE(js_cc_physics_BoxShape_initialize)); + cls->defineFunction("onEnable", _SE(js_cc_physics_BoxShape_onEnable)); + cls->defineFunction("onDisable", _SE(js_cc_physics_BoxShape_onDisable)); + cls->defineFunction("onDestroy", _SE(js_cc_physics_BoxShape_onDestroy)); + cls->defineFunction("setMaterial", _SE(js_cc_physics_BoxShape_setMaterial)); + cls->defineFunction("setAsTrigger", _SE(js_cc_physics_BoxShape_setAsTrigger)); + cls->defineFunction("setCenter", _SE(js_cc_physics_BoxShape_setCenter)); + cls->defineFunction("updateEventListener", _SE(js_cc_physics_BoxShape_updateEventListener)); + cls->defineFunction("getAABB", _SE(js_cc_physics_BoxShape_getAABB)); + cls->defineFunction("getBoundingSphere", _SE(js_cc_physics_BoxShape_getBoundingSphere)); + cls->defineFunction("getGroup", _SE(js_cc_physics_BoxShape_getGroup)); + cls->defineFunction("setGroup", _SE(js_cc_physics_BoxShape_setGroup)); + cls->defineFunction("getMask", _SE(js_cc_physics_BoxShape_getMask)); + cls->defineFunction("setMask", _SE(js_cc_physics_BoxShape_setMask)); + cls->defineFunction("getObjectID", _SE(js_cc_physics_BoxShape_getObjectID)); + cls->defineFunction("setSize", _SE(js_cc_physics_BoxShape_setSize)); - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::physics::IPhysicsWorld *arg1 = (cc::physics::IPhysicsWorld *) NULL ; - bool arg2 ; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) bool - ok &= sevalue_to_native(args[0], &arg2); - SE_PRECONDITION2(ok, false, "IPhysicsWorld_setAllowSleep,2,SWIGTYPE_bool"); - (arg1)->setAllowSleep(arg2); + cls->defineFinalizeFunction(_SE(js_delete_cc_physics_BoxShape)); + + + cls->install(); + JSBClassType::registerClass(cls); + + __jsb_cc_physics_BoxShape_proto = cls->getProto(); + __jsb_cc_physics_BoxShape_class = cls; + se::ScriptEngine::getInstance()->clearException(); return true; } -SE_BIND_FUNC(js_cc_physics_IPhysicsWorld_setAllowSleep) -static bool js_cc_physics_IPhysicsWorld_step(se::State& s) + +se::Class* __jsb_cc_physics_CapsuleShape_class = nullptr; +se::Object* __jsb_cc_physics_CapsuleShape_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_physics_CapsuleShape) + +// js_ctor +static bool js_new_cc_physics_CapsuleShape(se::State& s) // NOLINT(readability-identifier-naming) { - // js_function - CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IPhysicsWorld *arg1 = (cc::physics::IPhysicsWorld *) NULL ; - float arg2 ; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "IPhysicsWorld_step,2,SWIGTYPE_float"); - (arg1)->step(arg2); + cc::physics::CapsuleShape *result; + result = (cc::physics::CapsuleShape *)new cc::physics::CapsuleShape(); + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); + return true; +} +SE_BIND_CTOR(js_new_cc_physics_CapsuleShape, __jsb_cc_physics_CapsuleShape_class, js_delete_cc_physics_CapsuleShape) + +static bool js_delete_cc_physics_CapsuleShape(se::State& s) +{ + // js_dtoroverride return true; } -SE_BIND_FUNC(js_cc_physics_IPhysicsWorld_step) +SE_BIND_FINALIZE_FUNC(js_delete_cc_physics_CapsuleShape) -static bool js_cc_physics_IPhysicsWorld_emitEvents(se::State& s) +static bool js_cc_physics_CapsuleShape_initialize(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IPhysicsWorld *arg1 = (cc::physics::IPhysicsWorld *) NULL ; + cc::physics::CapsuleShape *arg1 = (cc::physics::CapsuleShape *) NULL ; + cc::Node *arg2 = (cc::Node *) NULL ; - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - (arg1)->emitEvents(); + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "CapsuleShape_initialize,2,SWIGTYPE_p_cc__Node"); + (arg1)->initialize(arg2); return true; } -SE_BIND_FUNC(js_cc_physics_IPhysicsWorld_emitEvents) +SE_BIND_FUNC(js_cc_physics_CapsuleShape_initialize) -static bool js_cc_physics_IPhysicsWorld_syncSceneToPhysics(se::State& s) +static bool js_cc_physics_CapsuleShape_onEnable(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IPhysicsWorld *arg1 = (cc::physics::IPhysicsWorld *) NULL ; + cc::physics::CapsuleShape *arg1 = (cc::physics::CapsuleShape *) NULL ; if(argc != 0) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - (arg1)->syncSceneToPhysics(); + (arg1)->onEnable(); return true; } -SE_BIND_FUNC(js_cc_physics_IPhysicsWorld_syncSceneToPhysics) +SE_BIND_FUNC(js_cc_physics_CapsuleShape_onEnable) -static bool js_cc_physics_IPhysicsWorld_syncSceneWithCheck(se::State& s) +static bool js_cc_physics_CapsuleShape_onDisable(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IPhysicsWorld *arg1 = (cc::physics::IPhysicsWorld *) NULL ; + cc::physics::CapsuleShape *arg1 = (cc::physics::CapsuleShape *) NULL ; if(argc != 0) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - (arg1)->syncSceneWithCheck(); + (arg1)->onDisable(); return true; } -SE_BIND_FUNC(js_cc_physics_IPhysicsWorld_syncSceneWithCheck) +SE_BIND_FUNC(js_cc_physics_CapsuleShape_onDisable) -static bool js_cc_physics_IPhysicsWorld_destroy(se::State& s) +static bool js_cc_physics_CapsuleShape_onDestroy(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IPhysicsWorld *arg1 = (cc::physics::IPhysicsWorld *) NULL ; + cc::physics::CapsuleShape *arg1 = (cc::physics::CapsuleShape *) NULL ; if(argc != 0) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - (arg1)->destroy(); + (arg1)->onDestroy(); return true; } -SE_BIND_FUNC(js_cc_physics_IPhysicsWorld_destroy) +SE_BIND_FUNC(js_cc_physics_CapsuleShape_onDestroy) -static bool js_cc_physics_IPhysicsWorld_setCollisionMatrix(se::State& s) +static bool js_cc_physics_CapsuleShape_setMaterial(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IPhysicsWorld *arg1 = (cc::physics::IPhysicsWorld *) NULL ; - uint32_t arg2 ; - uint32_t arg3 ; + cc::physics::CapsuleShape *arg1 = (cc::physics::CapsuleShape *) NULL ; + uint16_t arg2 ; + float arg3 ; + float arg4 ; + float arg5 ; + uint8_t arg6 ; + uint8_t arg7 ; - if(argc != 2) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2); + if(argc != 6) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 6); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE value in ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "IPhysicsWorld_setCollisionMatrix,2,SWIGTYPE_uint32_t"); + SE_PRECONDITION2(ok, false, "CapsuleShape_setMaterial,2,SWIGTYPE_uint16_t"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "CapsuleShape_setMaterial,3,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[2], &arg4, nullptr); + SE_PRECONDITION2(ok, false, "CapsuleShape_setMaterial,4,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[3], &arg5, nullptr); + SE_PRECONDITION2(ok, false, "CapsuleShape_setMaterial,5,SWIGTYPE_float"); // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[1], &arg3, s.thisObject()); - SE_PRECONDITION2(ok, false, "IPhysicsWorld_setCollisionMatrix,3,SWIGTYPE_uint32_t"); - - (arg1)->setCollisionMatrix(arg2,arg3); - + ok &= sevalue_to_native(args[4], &arg6, s.thisObject()); + SE_PRECONDITION2(ok, false, "CapsuleShape_setMaterial,6,SWIGTYPE_uint8_t"); - return true; -} -SE_BIND_FUNC(js_cc_physics_IPhysicsWorld_setCollisionMatrix) - -static bool js_cc_physics_IPhysicsWorld_getTriggerEventPairs(se::State& s) -{ - // js_function - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::physics::IPhysicsWorld *arg1 = (cc::physics::IPhysicsWorld *) NULL ; - ccstd::vector< std::shared_ptr< cc::physics::TriggerEventPair > > *result = 0 ; + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[5], &arg7, s.thisObject()); + SE_PRECONDITION2(ok, false, "CapsuleShape_setMaterial,7,SWIGTYPE_uint8_t"); - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (ccstd::vector< std::shared_ptr< cc::physics::TriggerEventPair > > *) &(arg1)->getTriggerEventPairs(); - // %typemap(out) SWIGTYPE& - ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "IPhysicsWorld_getTriggerEventPairs, Error processing arguments"); - SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); + (arg1)->setMaterial(arg2,arg3,arg4,arg5,arg6,arg7); return true; } -SE_BIND_FUNC(js_cc_physics_IPhysicsWorld_getTriggerEventPairs) +SE_BIND_FUNC(js_cc_physics_CapsuleShape_setMaterial) -static bool js_cc_physics_IPhysicsWorld_getContactEventPairs(se::State& s) +static bool js_cc_physics_CapsuleShape_setAsTrigger(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IPhysicsWorld *arg1 = (cc::physics::IPhysicsWorld *) NULL ; - ccstd::vector< std::shared_ptr< cc::physics::ContactEventPair > > *result = 0 ; + cc::physics::CapsuleShape *arg1 = (cc::physics::CapsuleShape *) NULL ; + bool arg2 ; - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (ccstd::vector< std::shared_ptr< cc::physics::ContactEventPair > > *) &(arg1)->getContactEventPairs(); - // %typemap(out) SWIGTYPE& - ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "IPhysicsWorld_getContactEventPairs, Error processing arguments"); - SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); + // %typemap(in) bool + ok &= sevalue_to_native(args[0], &arg2); + SE_PRECONDITION2(ok, false, "CapsuleShape_setAsTrigger,2,SWIGTYPE_bool"); + (arg1)->setAsTrigger(arg2); return true; } -SE_BIND_FUNC(js_cc_physics_IPhysicsWorld_getContactEventPairs) +SE_BIND_FUNC(js_cc_physics_CapsuleShape_setAsTrigger) -static bool js_cc_physics_IPhysicsWorld_raycast(se::State& s) +static bool js_cc_physics_CapsuleShape_setCenter(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IPhysicsWorld *arg1 = (cc::physics::IPhysicsWorld *) NULL ; - cc::physics::RaycastOptions *arg2 = 0 ; - cc::physics::RaycastOptions temp2 ; - bool result; + cc::physics::CapsuleShape *arg1 = (cc::physics::CapsuleShape *) NULL ; + float arg2 ; + float arg3 ; + float arg4 ; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + if(argc != 3) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "IPhysicsWorld_raycast,2,SWIGTYPE_p_cc__physics__RaycastOptions"); - arg2 = &temp2; - - result = (bool)(arg1)->raycast(*arg2); - // out 5 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "CapsuleShape_setCenter,2,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "CapsuleShape_setCenter,3,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[2], &arg4, nullptr); + SE_PRECONDITION2(ok, false, "CapsuleShape_setCenter,4,SWIGTYPE_float"); + (arg1)->setCenter(arg2,arg3,arg4); return true; } -SE_BIND_FUNC(js_cc_physics_IPhysicsWorld_raycast) +SE_BIND_FUNC(js_cc_physics_CapsuleShape_setCenter) -static bool js_cc_physics_IPhysicsWorld_raycastClosest(se::State& s) +static bool js_cc_physics_CapsuleShape_updateEventListener(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IPhysicsWorld *arg1 = (cc::physics::IPhysicsWorld *) NULL ; - cc::physics::RaycastOptions *arg2 = 0 ; - cc::physics::RaycastOptions temp2 ; - bool result; + cc::physics::CapsuleShape *arg1 = (cc::physics::CapsuleShape *) NULL ; + cc::physics::EShapeFilterFlag arg2 ; + int32_t temp2 ; if(argc != 1) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "IPhysicsWorld_raycastClosest,2,SWIGTYPE_p_cc__physics__RaycastOptions"); - arg2 = &temp2; - - result = (bool)(arg1)->raycastClosest(*arg2); - // out 5 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + // %typemap(in) enum SWIGTYPE (int32_t temp2) + ok &= sevalue_to_native(args[0], &temp2); + SE_PRECONDITION2(ok, false, "CapsuleShape_updateEventListener,2,SWIGTYPE_cc__physics__EShapeFilterFlag"); + arg2 = (cc::physics::EShapeFilterFlag)temp2; + (arg1)->updateEventListener(arg2); return true; } -SE_BIND_FUNC(js_cc_physics_IPhysicsWorld_raycastClosest) +SE_BIND_FUNC(js_cc_physics_CapsuleShape_updateEventListener) -static bool js_cc_physics_IPhysicsWorld_raycastResult(se::State& s) +static bool js_cc_physics_CapsuleShape_getAABB(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IPhysicsWorld *arg1 = (cc::physics::IPhysicsWorld *) NULL ; - ccstd::vector< cc::physics::RaycastResult > *result = 0 ; + cc::physics::CapsuleShape *arg1 = (cc::physics::CapsuleShape *) NULL ; + cc::geometry::AABB *result = 0 ; if(argc != 0) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (ccstd::vector< cc::physics::RaycastResult > *) &(arg1)->raycastResult(); + result = (cc::geometry::AABB *) &(arg1)->getAABB(); // %typemap(out) SWIGTYPE& ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "IPhysicsWorld_raycastResult, Error processing arguments"); + SE_PRECONDITION2(ok, false, "CapsuleShape_getAABB, Error processing arguments"); SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); return true; } -SE_BIND_FUNC(js_cc_physics_IPhysicsWorld_raycastResult) +SE_BIND_FUNC(js_cc_physics_CapsuleShape_getAABB) -static bool js_cc_physics_IPhysicsWorld_raycastClosestResult(se::State& s) +static bool js_cc_physics_CapsuleShape_getBoundingSphere(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IPhysicsWorld *arg1 = (cc::physics::IPhysicsWorld *) NULL ; - cc::physics::RaycastResult *result = 0 ; + cc::physics::CapsuleShape *arg1 = (cc::physics::CapsuleShape *) NULL ; + cc::geometry::Sphere *result = 0 ; if(argc != 0) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (cc::physics::RaycastResult *) &(arg1)->raycastClosestResult(); + result = (cc::geometry::Sphere *) &(arg1)->getBoundingSphere(); // %typemap(out) SWIGTYPE& ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "IPhysicsWorld_raycastClosestResult, Error processing arguments"); + SE_PRECONDITION2(ok, false, "CapsuleShape_getBoundingSphere, Error processing arguments"); SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); return true; } -SE_BIND_FUNC(js_cc_physics_IPhysicsWorld_raycastClosestResult) - -static bool js_cc_physics_IPhysicsWorld_createConvex(se::State& s) -{ - // js_function - - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::physics::IPhysicsWorld *arg1 = (cc::physics::IPhysicsWorld *) NULL ; - cc::physics::ConvexDesc *arg2 = 0 ; - cc::physics::ConvexDesc temp2 ; - uint32_t result; - - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "IPhysicsWorld_createConvex,2,SWIGTYPE_p_cc__physics__ConvexDesc"); - arg2 = &temp2; - - result = (arg1)->createConvex(*arg2); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "IPhysicsWorld_createConvex, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - - - - return true; -} -SE_BIND_FUNC(js_cc_physics_IPhysicsWorld_createConvex) +SE_BIND_FUNC(js_cc_physics_CapsuleShape_getBoundingSphere) -static bool js_cc_physics_IPhysicsWorld_createTrimesh(se::State& s) +static bool js_cc_physics_CapsuleShape_getGroup(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IPhysicsWorld *arg1 = (cc::physics::IPhysicsWorld *) NULL ; - cc::physics::TrimeshDesc *arg2 = 0 ; - cc::physics::TrimeshDesc temp2 ; + cc::physics::CapsuleShape *arg1 = (cc::physics::CapsuleShape *) NULL ; uint32_t result; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "IPhysicsWorld_createTrimesh,2,SWIGTYPE_p_cc__physics__TrimeshDesc"); - arg2 = &temp2; - - result = (arg1)->createTrimesh(*arg2); + result = (arg1)->getGroup(); // %typemap(out) SWIGTYPE ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "IPhysicsWorld_createTrimesh, Error processing arguments"); + SE_PRECONDITION2(ok, false, "CapsuleShape_getGroup, Error processing arguments"); SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); return true; } -SE_BIND_FUNC(js_cc_physics_IPhysicsWorld_createTrimesh) +SE_BIND_FUNC(js_cc_physics_CapsuleShape_getGroup) -static bool js_cc_physics_IPhysicsWorld_createHeightField(se::State& s) +static bool js_cc_physics_CapsuleShape_setGroup(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IPhysicsWorld *arg1 = (cc::physics::IPhysicsWorld *) NULL ; - cc::physics::HeightFieldDesc *arg2 = 0 ; - cc::physics::HeightFieldDesc temp2 ; - uint32_t result; + cc::physics::CapsuleShape *arg1 = (cc::physics::CapsuleShape *) NULL ; + uint32_t arg2 ; if(argc != 1) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE& - ok &= sevalue_to_native(args[0], &temp2, s.thisObject()); - SE_PRECONDITION2(ok, false, "IPhysicsWorld_createHeightField,2,SWIGTYPE_p_cc__physics__HeightFieldDesc"); - arg2 = &temp2; - result = (arg1)->createHeightField(*arg2); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "IPhysicsWorld_createHeightField, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "CapsuleShape_setGroup,2,SWIGTYPE_uint32_t"); + (arg1)->setGroup(arg2); return true; } -SE_BIND_FUNC(js_cc_physics_IPhysicsWorld_createHeightField) +SE_BIND_FUNC(js_cc_physics_CapsuleShape_setGroup) -static bool js_cc_physics_IPhysicsWorld_createMaterial(se::State& s) +static bool js_cc_physics_CapsuleShape_getMask(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IPhysicsWorld *arg1 = (cc::physics::IPhysicsWorld *) NULL ; - uint16_t arg2 ; - float arg3 ; - float arg4 ; - float arg5 ; - uint8_t arg6 ; - uint8_t arg7 ; - bool result; + cc::physics::CapsuleShape *arg1 = (cc::physics::CapsuleShape *) NULL ; + uint32_t result; - if(argc != 6) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 6); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "IPhysicsWorld_createMaterial,2,SWIGTYPE_uint16_t"); - - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[1], &arg3, nullptr); - SE_PRECONDITION2(ok, false, "IPhysicsWorld_createMaterial,3,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[2], &arg4, nullptr); - SE_PRECONDITION2(ok, false, "IPhysicsWorld_createMaterial,4,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[3], &arg5, nullptr); - SE_PRECONDITION2(ok, false, "IPhysicsWorld_createMaterial,5,SWIGTYPE_float"); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[4], &arg6, s.thisObject()); - SE_PRECONDITION2(ok, false, "IPhysicsWorld_createMaterial,6,SWIGTYPE_uint8_t"); - - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[5], &arg7, s.thisObject()); - SE_PRECONDITION2(ok, false, "IPhysicsWorld_createMaterial,7,SWIGTYPE_uint8_t"); - - result = (bool)(arg1)->createMaterial(arg2,arg3,arg4,arg5,arg6,arg7); - // out 5 + result = (arg1)->getMask(); + // %typemap(out) SWIGTYPE ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "CapsuleShape_getMask, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - return true; -} -SE_BIND_FUNC(js_cc_physics_IPhysicsWorld_createMaterial) - -bool js_register_cc_physics_IPhysicsWorld(se::Object* obj) { - auto* cls = se::Class::create("IPhysicsWorld", obj, nullptr, nullptr); - - - cls->defineFunction("setGravity", _SE(js_cc_physics_IPhysicsWorld_setGravity)); - cls->defineFunction("setAllowSleep", _SE(js_cc_physics_IPhysicsWorld_setAllowSleep)); - cls->defineFunction("step", _SE(js_cc_physics_IPhysicsWorld_step)); - cls->defineFunction("emitEvents", _SE(js_cc_physics_IPhysicsWorld_emitEvents)); - cls->defineFunction("syncSceneToPhysics", _SE(js_cc_physics_IPhysicsWorld_syncSceneToPhysics)); - cls->defineFunction("syncSceneWithCheck", _SE(js_cc_physics_IPhysicsWorld_syncSceneWithCheck)); - cls->defineFunction("destroy", _SE(js_cc_physics_IPhysicsWorld_destroy)); - cls->defineFunction("setCollisionMatrix", _SE(js_cc_physics_IPhysicsWorld_setCollisionMatrix)); - cls->defineFunction("getTriggerEventPairs", _SE(js_cc_physics_IPhysicsWorld_getTriggerEventPairs)); - cls->defineFunction("getContactEventPairs", _SE(js_cc_physics_IPhysicsWorld_getContactEventPairs)); - cls->defineFunction("raycast", _SE(js_cc_physics_IPhysicsWorld_raycast)); - cls->defineFunction("raycastClosest", _SE(js_cc_physics_IPhysicsWorld_raycastClosest)); - cls->defineFunction("raycastResult", _SE(js_cc_physics_IPhysicsWorld_raycastResult)); - cls->defineFunction("raycastClosestResult", _SE(js_cc_physics_IPhysicsWorld_raycastClosestResult)); - cls->defineFunction("createConvex", _SE(js_cc_physics_IPhysicsWorld_createConvex)); - cls->defineFunction("createTrimesh", _SE(js_cc_physics_IPhysicsWorld_createTrimesh)); - cls->defineFunction("createHeightField", _SE(js_cc_physics_IPhysicsWorld_createHeightField)); - cls->defineFunction("createMaterial", _SE(js_cc_physics_IPhysicsWorld_createMaterial)); - - - - - cls->defineFinalizeFunction(_SE(js_delete_cc_physics_IPhysicsWorld)); - - - cls->install(); - JSBClassType::registerClass(cls); - __jsb_cc_physics_IPhysicsWorld_proto = cls->getProto(); - __jsb_cc_physics_IPhysicsWorld_class = cls; - se::ScriptEngine::getInstance()->clearException(); - return true; -} - - -se::Class* __jsb_cc_physics_IRigidBody_class = nullptr; -se::Object* __jsb_cc_physics_IRigidBody_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_physics_IRigidBody) - -static bool js_delete_cc_physics_IRigidBody(se::State& s) -{ - // js_dtoroverride return true; } -SE_BIND_FINALIZE_FUNC(js_delete_cc_physics_IRigidBody) +SE_BIND_FUNC(js_cc_physics_CapsuleShape_getMask) -static bool js_cc_physics_IRigidBody_initialize(se::State& s) +static bool js_cc_physics_CapsuleShape_setMask(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IRigidBody *arg1 = (cc::physics::IRigidBody *) NULL ; - cc::Node *arg2 = (cc::Node *) NULL ; - cc::physics::ERigidBodyType arg3 ; - uint32_t arg4 ; - int32_t temp3 ; + cc::physics::CapsuleShape *arg1 = (cc::physics::CapsuleShape *) NULL ; + uint32_t arg2 ; - if(argc != 3) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) SWIGTYPE* - ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "IRigidBody_initialize,2,SWIGTYPE_p_cc__Node"); - // %typemap(in) enum SWIGTYPE (int32_t temp3) - ok &= sevalue_to_native(args[1], &temp3); - SE_PRECONDITION2(ok, false, "IRigidBody_initialize,3,SWIGTYPE_cc__physics__ERigidBodyType"); - arg3 = (cc::physics::ERigidBodyType)temp3; // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[2], &arg4, s.thisObject()); - SE_PRECONDITION2(ok, false, "IRigidBody_initialize,4,SWIGTYPE_uint32_t"); + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "CapsuleShape_setMask,2,SWIGTYPE_uint32_t"); - (arg1)->initialize(arg2,arg3,arg4); + (arg1)->setMask(arg2); return true; } -SE_BIND_FUNC(js_cc_physics_IRigidBody_initialize) +SE_BIND_FUNC(js_cc_physics_CapsuleShape_setMask) -static bool js_cc_physics_IRigidBody_isAwake(se::State& s) +static bool js_cc_physics_CapsuleShape_getObjectID(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IRigidBody *arg1 = (cc::physics::IRigidBody *) NULL ; - bool result; + cc::physics::CapsuleShape *arg1 = (cc::physics::CapsuleShape *) NULL ; + uint32_t result; if(argc != 0) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (bool)(arg1)->isAwake(); - // out 5 + result = ((cc::physics::CapsuleShape const *)arg1)->getObjectID(); + // %typemap(out) SWIGTYPE ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "CapsuleShape_getObjectID, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + return true; } -SE_BIND_FUNC(js_cc_physics_IRigidBody_isAwake) +SE_BIND_FUNC(js_cc_physics_CapsuleShape_getObjectID) -static bool js_cc_physics_IRigidBody_isSleepy(se::State& s) +static bool js_cc_physics_CapsuleShape_setRadius(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IRigidBody *arg1 = (cc::physics::IRigidBody *) NULL ; - bool result; + cc::physics::CapsuleShape *arg1 = (cc::physics::CapsuleShape *) NULL ; + float arg2 ; - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (bool)(arg1)->isSleepy(); - // out 5 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "CapsuleShape_setRadius,2,SWIGTYPE_float"); + (arg1)->setRadius(arg2); return true; } -SE_BIND_FUNC(js_cc_physics_IRigidBody_isSleepy) +SE_BIND_FUNC(js_cc_physics_CapsuleShape_setRadius) -static bool js_cc_physics_IRigidBody_isSleeping(se::State& s) +static bool js_cc_physics_CapsuleShape_setCylinderHeight(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IRigidBody *arg1 = (cc::physics::IRigidBody *) NULL ; - bool result; + cc::physics::CapsuleShape *arg1 = (cc::physics::CapsuleShape *) NULL ; + float arg2 ; - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (bool)(arg1)->isSleeping(); - // out 5 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "CapsuleShape_setCylinderHeight,2,SWIGTYPE_float"); + (arg1)->setCylinderHeight(arg2); return true; } -SE_BIND_FUNC(js_cc_physics_IRigidBody_isSleeping) +SE_BIND_FUNC(js_cc_physics_CapsuleShape_setCylinderHeight) -static bool js_cc_physics_IRigidBody_setType(se::State& s) +static bool js_cc_physics_CapsuleShape_setDirection(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IRigidBody *arg1 = (cc::physics::IRigidBody *) NULL ; - cc::physics::ERigidBodyType arg2 ; + cc::physics::CapsuleShape *arg1 = (cc::physics::CapsuleShape *) NULL ; + cc::physics::EAxisDirection arg2 ; int32_t temp2 ; if(argc != 1) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) enum SWIGTYPE (int32_t temp2) ok &= sevalue_to_native(args[0], &temp2); - SE_PRECONDITION2(ok, false, "IRigidBody_setType,2,SWIGTYPE_cc__physics__ERigidBodyType"); - arg2 = (cc::physics::ERigidBodyType)temp2; - (arg1)->setType(arg2); + SE_PRECONDITION2(ok, false, "CapsuleShape_setDirection,2,SWIGTYPE_cc__physics__EAxisDirection"); + arg2 = (cc::physics::EAxisDirection)temp2; + (arg1)->setDirection(arg2); return true; } -SE_BIND_FUNC(js_cc_physics_IRigidBody_setType) +SE_BIND_FUNC(js_cc_physics_CapsuleShape_setDirection) -static bool js_cc_physics_IRigidBody_setMass(se::State& s) -{ - // js_function +bool js_register_cc_physics_CapsuleShape(se::Object* obj) { + auto* cls = se::Class::create("CapsuleShape", obj, nullptr, _SE(js_new_cc_physics_CapsuleShape)); + + cls->defineFunction("initialize", _SE(js_cc_physics_CapsuleShape_initialize)); + cls->defineFunction("onEnable", _SE(js_cc_physics_CapsuleShape_onEnable)); + cls->defineFunction("onDisable", _SE(js_cc_physics_CapsuleShape_onDisable)); + cls->defineFunction("onDestroy", _SE(js_cc_physics_CapsuleShape_onDestroy)); + cls->defineFunction("setMaterial", _SE(js_cc_physics_CapsuleShape_setMaterial)); + cls->defineFunction("setAsTrigger", _SE(js_cc_physics_CapsuleShape_setAsTrigger)); + cls->defineFunction("setCenter", _SE(js_cc_physics_CapsuleShape_setCenter)); + cls->defineFunction("updateEventListener", _SE(js_cc_physics_CapsuleShape_updateEventListener)); + cls->defineFunction("getAABB", _SE(js_cc_physics_CapsuleShape_getAABB)); + cls->defineFunction("getBoundingSphere", _SE(js_cc_physics_CapsuleShape_getBoundingSphere)); + cls->defineFunction("getGroup", _SE(js_cc_physics_CapsuleShape_getGroup)); + cls->defineFunction("setGroup", _SE(js_cc_physics_CapsuleShape_setGroup)); + cls->defineFunction("getMask", _SE(js_cc_physics_CapsuleShape_getMask)); + cls->defineFunction("setMask", _SE(js_cc_physics_CapsuleShape_setMask)); + cls->defineFunction("getObjectID", _SE(js_cc_physics_CapsuleShape_getObjectID)); + cls->defineFunction("setRadius", _SE(js_cc_physics_CapsuleShape_setRadius)); + cls->defineFunction("setCylinderHeight", _SE(js_cc_physics_CapsuleShape_setCylinderHeight)); + cls->defineFunction("setDirection", _SE(js_cc_physics_CapsuleShape_setDirection)); + + + + + cls->defineFinalizeFunction(_SE(js_delete_cc_physics_CapsuleShape)); + + + cls->install(); + JSBClassType::registerClass(cls); + + __jsb_cc_physics_CapsuleShape_proto = cls->getProto(); + __jsb_cc_physics_CapsuleShape_class = cls; + se::ScriptEngine::getInstance()->clearException(); + return true; +} + + +se::Class* __jsb_cc_physics_PlaneShape_class = nullptr; +se::Object* __jsb_cc_physics_PlaneShape_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_physics_PlaneShape) + +// js_ctor +static bool js_new_cc_physics_PlaneShape(se::State& s) // NOLINT(readability-identifier-naming) +{ CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IRigidBody *arg1 = (cc::physics::IRigidBody *) NULL ; - float arg2 ; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "IRigidBody_setMass,2,SWIGTYPE_float"); - (arg1)->setMass(arg2); + cc::physics::PlaneShape *result; + result = (cc::physics::PlaneShape *)new cc::physics::PlaneShape(); + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); + return true; +} +SE_BIND_CTOR(js_new_cc_physics_PlaneShape, __jsb_cc_physics_PlaneShape_class, js_delete_cc_physics_PlaneShape) + +static bool js_delete_cc_physics_PlaneShape(se::State& s) +{ + // js_dtoroverride return true; } -SE_BIND_FUNC(js_cc_physics_IRigidBody_setMass) +SE_BIND_FINALIZE_FUNC(js_delete_cc_physics_PlaneShape) -static bool js_cc_physics_IRigidBody_setLinearDamping(se::State& s) +static bool js_cc_physics_PlaneShape_initialize(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IRigidBody *arg1 = (cc::physics::IRigidBody *) NULL ; - float arg2 ; + cc::physics::PlaneShape *arg1 = (cc::physics::PlaneShape *) NULL ; + cc::Node *arg2 = (cc::Node *) NULL ; if(argc != 1) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "IRigidBody_setLinearDamping,2,SWIGTYPE_float"); - (arg1)->setLinearDamping(arg2); + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "PlaneShape_initialize,2,SWIGTYPE_p_cc__Node"); + (arg1)->initialize(arg2); return true; } -SE_BIND_FUNC(js_cc_physics_IRigidBody_setLinearDamping) +SE_BIND_FUNC(js_cc_physics_PlaneShape_initialize) -static bool js_cc_physics_IRigidBody_setAngularDamping(se::State& s) +static bool js_cc_physics_PlaneShape_onEnable(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IRigidBody *arg1 = (cc::physics::IRigidBody *) NULL ; - float arg2 ; + cc::physics::PlaneShape *arg1 = (cc::physics::PlaneShape *) NULL ; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "IRigidBody_setAngularDamping,2,SWIGTYPE_float"); - (arg1)->setAngularDamping(arg2); + (arg1)->onEnable(); return true; } -SE_BIND_FUNC(js_cc_physics_IRigidBody_setAngularDamping) +SE_BIND_FUNC(js_cc_physics_PlaneShape_onEnable) -static bool js_cc_physics_IRigidBody_useGravity(se::State& s) +static bool js_cc_physics_PlaneShape_onDisable(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IRigidBody *arg1 = (cc::physics::IRigidBody *) NULL ; - bool arg2 ; + cc::physics::PlaneShape *arg1 = (cc::physics::PlaneShape *) NULL ; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) bool - ok &= sevalue_to_native(args[0], &arg2); - SE_PRECONDITION2(ok, false, "IRigidBody_useGravity,2,SWIGTYPE_bool"); - (arg1)->useGravity(arg2); + (arg1)->onDisable(); return true; } -SE_BIND_FUNC(js_cc_physics_IRigidBody_useGravity) +SE_BIND_FUNC(js_cc_physics_PlaneShape_onDisable) -static bool js_cc_physics_IRigidBody_useCCD(se::State& s) +static bool js_cc_physics_PlaneShape_onDestroy(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IRigidBody *arg1 = (cc::physics::IRigidBody *) NULL ; - bool arg2 ; + cc::physics::PlaneShape *arg1 = (cc::physics::PlaneShape *) NULL ; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) bool - ok &= sevalue_to_native(args[0], &arg2); - SE_PRECONDITION2(ok, false, "IRigidBody_useCCD,2,SWIGTYPE_bool"); - (arg1)->useCCD(arg2); + (arg1)->onDestroy(); return true; } -SE_BIND_FUNC(js_cc_physics_IRigidBody_useCCD) +SE_BIND_FUNC(js_cc_physics_PlaneShape_onDestroy) -static bool js_cc_physics_IRigidBody_setLinearFactor(se::State& s) +static bool js_cc_physics_PlaneShape_setMaterial(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IRigidBody *arg1 = (cc::physics::IRigidBody *) NULL ; - float arg2 ; + cc::physics::PlaneShape *arg1 = (cc::physics::PlaneShape *) NULL ; + uint16_t arg2 ; float arg3 ; float arg4 ; + float arg5 ; + uint8_t arg6 ; + uint8_t arg7 ; - if(argc != 3) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); + if(argc != 6) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 6); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "IRigidBody_setLinearFactor,2,SWIGTYPE_float"); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "PlaneShape_setMaterial,2,SWIGTYPE_uint16_t"); + // %typemap(in) int, short, long, signed char, float, double ok &= sevalue_to_native(args[1], &arg3, nullptr); - SE_PRECONDITION2(ok, false, "IRigidBody_setLinearFactor,3,SWIGTYPE_float"); + SE_PRECONDITION2(ok, false, "PlaneShape_setMaterial,3,SWIGTYPE_float"); // %typemap(in) int, short, long, signed char, float, double ok &= sevalue_to_native(args[2], &arg4, nullptr); - SE_PRECONDITION2(ok, false, "IRigidBody_setLinearFactor,4,SWIGTYPE_float"); - (arg1)->setLinearFactor(arg2,arg3,arg4); + SE_PRECONDITION2(ok, false, "PlaneShape_setMaterial,4,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[3], &arg5, nullptr); + SE_PRECONDITION2(ok, false, "PlaneShape_setMaterial,5,SWIGTYPE_float"); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[4], &arg6, s.thisObject()); + SE_PRECONDITION2(ok, false, "PlaneShape_setMaterial,6,SWIGTYPE_uint8_t"); + + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[5], &arg7, s.thisObject()); + SE_PRECONDITION2(ok, false, "PlaneShape_setMaterial,7,SWIGTYPE_uint8_t"); + + (arg1)->setMaterial(arg2,arg3,arg4,arg5,arg6,arg7); + + + return true; +} +SE_BIND_FUNC(js_cc_physics_PlaneShape_setMaterial) + +static bool js_cc_physics_PlaneShape_setAsTrigger(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::PlaneShape *arg1 = (cc::physics::PlaneShape *) NULL ; + bool arg2 ; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) bool + ok &= sevalue_to_native(args[0], &arg2); + SE_PRECONDITION2(ok, false, "PlaneShape_setAsTrigger,2,SWIGTYPE_bool"); + (arg1)->setAsTrigger(arg2); return true; } -SE_BIND_FUNC(js_cc_physics_IRigidBody_setLinearFactor) +SE_BIND_FUNC(js_cc_physics_PlaneShape_setAsTrigger) -static bool js_cc_physics_IRigidBody_setAngularFactor(se::State& s) +static bool js_cc_physics_PlaneShape_setCenter(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IRigidBody *arg1 = (cc::physics::IRigidBody *) NULL ; + cc::physics::PlaneShape *arg1 = (cc::physics::PlaneShape *) NULL ; float arg2 ; float arg3 ; float arg4 ; @@ -2965,248 +3697,280 @@ static bool js_cc_physics_IRigidBody_setAngularFactor(se::State& s) SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) int, short, long, signed char, float, double ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "IRigidBody_setAngularFactor,2,SWIGTYPE_float"); + SE_PRECONDITION2(ok, false, "PlaneShape_setCenter,2,SWIGTYPE_float"); // %typemap(in) int, short, long, signed char, float, double ok &= sevalue_to_native(args[1], &arg3, nullptr); - SE_PRECONDITION2(ok, false, "IRigidBody_setAngularFactor,3,SWIGTYPE_float"); + SE_PRECONDITION2(ok, false, "PlaneShape_setCenter,3,SWIGTYPE_float"); // %typemap(in) int, short, long, signed char, float, double ok &= sevalue_to_native(args[2], &arg4, nullptr); - SE_PRECONDITION2(ok, false, "IRigidBody_setAngularFactor,4,SWIGTYPE_float"); - (arg1)->setAngularFactor(arg2,arg3,arg4); + SE_PRECONDITION2(ok, false, "PlaneShape_setCenter,4,SWIGTYPE_float"); + (arg1)->setCenter(arg2,arg3,arg4); return true; } -SE_BIND_FUNC(js_cc_physics_IRigidBody_setAngularFactor) +SE_BIND_FUNC(js_cc_physics_PlaneShape_setCenter) -static bool js_cc_physics_IRigidBody_setAllowSleep(se::State& s) +static bool js_cc_physics_PlaneShape_updateEventListener(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IRigidBody *arg1 = (cc::physics::IRigidBody *) NULL ; - bool arg2 ; + cc::physics::PlaneShape *arg1 = (cc::physics::PlaneShape *) NULL ; + cc::physics::EShapeFilterFlag arg2 ; + int32_t temp2 ; if(argc != 1) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) bool - ok &= sevalue_to_native(args[0], &arg2); - SE_PRECONDITION2(ok, false, "IRigidBody_setAllowSleep,2,SWIGTYPE_bool"); - (arg1)->setAllowSleep(arg2); + // %typemap(in) enum SWIGTYPE (int32_t temp2) + ok &= sevalue_to_native(args[0], &temp2); + SE_PRECONDITION2(ok, false, "PlaneShape_updateEventListener,2,SWIGTYPE_cc__physics__EShapeFilterFlag"); + arg2 = (cc::physics::EShapeFilterFlag)temp2; + (arg1)->updateEventListener(arg2); return true; } -SE_BIND_FUNC(js_cc_physics_IRigidBody_setAllowSleep) +SE_BIND_FUNC(js_cc_physics_PlaneShape_updateEventListener) -static bool js_cc_physics_IRigidBody_wakeUp(se::State& s) +static bool js_cc_physics_PlaneShape_getAABB(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IRigidBody *arg1 = (cc::physics::IRigidBody *) NULL ; + cc::physics::PlaneShape *arg1 = (cc::physics::PlaneShape *) NULL ; + cc::geometry::AABB *result = 0 ; if(argc != 0) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - (arg1)->wakeUp(); + result = (cc::geometry::AABB *) &(arg1)->getAABB(); + // %typemap(out) SWIGTYPE& + ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "PlaneShape_getAABB, Error processing arguments"); + SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); return true; } -SE_BIND_FUNC(js_cc_physics_IRigidBody_wakeUp) +SE_BIND_FUNC(js_cc_physics_PlaneShape_getAABB) -static bool js_cc_physics_IRigidBody_sleep(se::State& s) +static bool js_cc_physics_PlaneShape_getBoundingSphere(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IRigidBody *arg1 = (cc::physics::IRigidBody *) NULL ; + cc::physics::PlaneShape *arg1 = (cc::physics::PlaneShape *) NULL ; + cc::geometry::Sphere *result = 0 ; if(argc != 0) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - (arg1)->sleep(); + result = (cc::geometry::Sphere *) &(arg1)->getBoundingSphere(); + // %typemap(out) SWIGTYPE& + ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "PlaneShape_getBoundingSphere, Error processing arguments"); + SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); return true; } -SE_BIND_FUNC(js_cc_physics_IRigidBody_sleep) +SE_BIND_FUNC(js_cc_physics_PlaneShape_getBoundingSphere) -static bool js_cc_physics_IRigidBody_clearState(se::State& s) +static bool js_cc_physics_PlaneShape_getGroup(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IRigidBody *arg1 = (cc::physics::IRigidBody *) NULL ; + cc::physics::PlaneShape *arg1 = (cc::physics::PlaneShape *) NULL ; + uint32_t result; if(argc != 0) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - (arg1)->clearState(); + result = (arg1)->getGroup(); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "PlaneShape_getGroup, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + return true; } -SE_BIND_FUNC(js_cc_physics_IRigidBody_clearState) +SE_BIND_FUNC(js_cc_physics_PlaneShape_getGroup) -static bool js_cc_physics_IRigidBody_clearForces(se::State& s) +static bool js_cc_physics_PlaneShape_setGroup(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IRigidBody *arg1 = (cc::physics::IRigidBody *) NULL ; + cc::physics::PlaneShape *arg1 = (cc::physics::PlaneShape *) NULL ; + uint32_t arg2 ; - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - (arg1)->clearForces(); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "PlaneShape_setGroup,2,SWIGTYPE_uint32_t"); + + (arg1)->setGroup(arg2); return true; } -SE_BIND_FUNC(js_cc_physics_IRigidBody_clearForces) +SE_BIND_FUNC(js_cc_physics_PlaneShape_setGroup) -static bool js_cc_physics_IRigidBody_clearVelocity(se::State& s) +static bool js_cc_physics_PlaneShape_getMask(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IRigidBody *arg1 = (cc::physics::IRigidBody *) NULL ; + cc::physics::PlaneShape *arg1 = (cc::physics::PlaneShape *) NULL ; + uint32_t result; if(argc != 0) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - (arg1)->clearVelocity(); + result = (arg1)->getMask(); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "PlaneShape_getMask, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + return true; } -SE_BIND_FUNC(js_cc_physics_IRigidBody_clearVelocity) +SE_BIND_FUNC(js_cc_physics_PlaneShape_getMask) -static bool js_cc_physics_IRigidBody_setSleepThreshold(se::State& s) +static bool js_cc_physics_PlaneShape_setMask(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IRigidBody *arg1 = (cc::physics::IRigidBody *) NULL ; - float arg2 ; + cc::physics::PlaneShape *arg1 = (cc::physics::PlaneShape *) NULL ; + uint32_t arg2 ; if(argc != 1) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "IRigidBody_setSleepThreshold,2,SWIGTYPE_float"); - (arg1)->setSleepThreshold(arg2); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "PlaneShape_setMask,2,SWIGTYPE_uint32_t"); + + (arg1)->setMask(arg2); return true; } -SE_BIND_FUNC(js_cc_physics_IRigidBody_setSleepThreshold) +SE_BIND_FUNC(js_cc_physics_PlaneShape_setMask) -static bool js_cc_physics_IRigidBody_getSleepThreshold(se::State& s) +static bool js_cc_physics_PlaneShape_getObjectID(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IRigidBody *arg1 = (cc::physics::IRigidBody *) NULL ; - float result; + cc::physics::PlaneShape *arg1 = (cc::physics::PlaneShape *) NULL ; + uint32_t result; if(argc != 0) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (float)(arg1)->getSleepThreshold(); + result = ((cc::physics::PlaneShape const *)arg1)->getObjectID(); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "PlaneShape_getObjectID, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - // out 1 - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); return true; } -SE_BIND_FUNC(js_cc_physics_IRigidBody_getSleepThreshold) +SE_BIND_FUNC(js_cc_physics_PlaneShape_getObjectID) -static bool js_cc_physics_IRigidBody_getLinearVelocity(se::State& s) +static bool js_cc_physics_PlaneShape_setConstant(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IRigidBody *arg1 = (cc::physics::IRigidBody *) NULL ; - cc::Vec3 result; + cc::physics::PlaneShape *arg1 = (cc::physics::PlaneShape *) NULL ; + float arg2 ; - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (arg1)->getLinearVelocity(); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "IRigidBody_getLinearVelocity, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "PlaneShape_setConstant,2,SWIGTYPE_float"); + (arg1)->setConstant(arg2); return true; } -SE_BIND_FUNC(js_cc_physics_IRigidBody_getLinearVelocity) +SE_BIND_FUNC(js_cc_physics_PlaneShape_setConstant) -static bool js_cc_physics_IRigidBody_setLinearVelocity(se::State& s) +static bool js_cc_physics_PlaneShape_setNormal(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IRigidBody *arg1 = (cc::physics::IRigidBody *) NULL ; + cc::physics::PlaneShape *arg1 = (cc::physics::PlaneShape *) NULL ; float arg2 ; float arg3 ; float arg4 ; @@ -3215,579 +3979,736 @@ static bool js_cc_physics_IRigidBody_setLinearVelocity(se::State& s) SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) int, short, long, signed char, float, double ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "IRigidBody_setLinearVelocity,2,SWIGTYPE_float"); + SE_PRECONDITION2(ok, false, "PlaneShape_setNormal,2,SWIGTYPE_float"); // %typemap(in) int, short, long, signed char, float, double ok &= sevalue_to_native(args[1], &arg3, nullptr); - SE_PRECONDITION2(ok, false, "IRigidBody_setLinearVelocity,3,SWIGTYPE_float"); + SE_PRECONDITION2(ok, false, "PlaneShape_setNormal,3,SWIGTYPE_float"); // %typemap(in) int, short, long, signed char, float, double ok &= sevalue_to_native(args[2], &arg4, nullptr); - SE_PRECONDITION2(ok, false, "IRigidBody_setLinearVelocity,4,SWIGTYPE_float"); - (arg1)->setLinearVelocity(arg2,arg3,arg4); + SE_PRECONDITION2(ok, false, "PlaneShape_setNormal,4,SWIGTYPE_float"); + (arg1)->setNormal(arg2,arg3,arg4); + + + return true; +} +SE_BIND_FUNC(js_cc_physics_PlaneShape_setNormal) + +bool js_register_cc_physics_PlaneShape(se::Object* obj) { + auto* cls = se::Class::create("PlaneShape", obj, nullptr, _SE(js_new_cc_physics_PlaneShape)); + + + cls->defineFunction("initialize", _SE(js_cc_physics_PlaneShape_initialize)); + cls->defineFunction("onEnable", _SE(js_cc_physics_PlaneShape_onEnable)); + cls->defineFunction("onDisable", _SE(js_cc_physics_PlaneShape_onDisable)); + cls->defineFunction("onDestroy", _SE(js_cc_physics_PlaneShape_onDestroy)); + cls->defineFunction("setMaterial", _SE(js_cc_physics_PlaneShape_setMaterial)); + cls->defineFunction("setAsTrigger", _SE(js_cc_physics_PlaneShape_setAsTrigger)); + cls->defineFunction("setCenter", _SE(js_cc_physics_PlaneShape_setCenter)); + cls->defineFunction("updateEventListener", _SE(js_cc_physics_PlaneShape_updateEventListener)); + cls->defineFunction("getAABB", _SE(js_cc_physics_PlaneShape_getAABB)); + cls->defineFunction("getBoundingSphere", _SE(js_cc_physics_PlaneShape_getBoundingSphere)); + cls->defineFunction("getGroup", _SE(js_cc_physics_PlaneShape_getGroup)); + cls->defineFunction("setGroup", _SE(js_cc_physics_PlaneShape_setGroup)); + cls->defineFunction("getMask", _SE(js_cc_physics_PlaneShape_getMask)); + cls->defineFunction("setMask", _SE(js_cc_physics_PlaneShape_setMask)); + cls->defineFunction("getObjectID", _SE(js_cc_physics_PlaneShape_getObjectID)); + cls->defineFunction("setConstant", _SE(js_cc_physics_PlaneShape_setConstant)); + cls->defineFunction("setNormal", _SE(js_cc_physics_PlaneShape_setNormal)); + + + + + cls->defineFinalizeFunction(_SE(js_delete_cc_physics_PlaneShape)); + + + cls->install(); + JSBClassType::registerClass(cls); + + __jsb_cc_physics_PlaneShape_proto = cls->getProto(); + __jsb_cc_physics_PlaneShape_class = cls; + se::ScriptEngine::getInstance()->clearException(); + return true; +} + + +se::Class* __jsb_cc_physics_TrimeshShape_class = nullptr; +se::Object* __jsb_cc_physics_TrimeshShape_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_physics_TrimeshShape) + +// js_ctor +static bool js_new_cc_physics_TrimeshShape(se::State& s) // NOLINT(readability-identifier-naming) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + + cc::physics::TrimeshShape *result; + result = (cc::physics::TrimeshShape *)new cc::physics::TrimeshShape(); + + + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); + return true; +} +SE_BIND_CTOR(js_new_cc_physics_TrimeshShape, __jsb_cc_physics_TrimeshShape_class, js_delete_cc_physics_TrimeshShape) + +static bool js_delete_cc_physics_TrimeshShape(se::State& s) +{ + // js_dtoroverride + return true; +} +SE_BIND_FINALIZE_FUNC(js_delete_cc_physics_TrimeshShape) + +static bool js_cc_physics_TrimeshShape_initialize(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::TrimeshShape *arg1 = (cc::physics::TrimeshShape *) NULL ; + cc::Node *arg2 = (cc::Node *) NULL ; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "TrimeshShape_initialize,2,SWIGTYPE_p_cc__Node"); + (arg1)->initialize(arg2); return true; } -SE_BIND_FUNC(js_cc_physics_IRigidBody_setLinearVelocity) +SE_BIND_FUNC(js_cc_physics_TrimeshShape_initialize) -static bool js_cc_physics_IRigidBody_getAngularVelocity(se::State& s) +static bool js_cc_physics_TrimeshShape_onEnable(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IRigidBody *arg1 = (cc::physics::IRigidBody *) NULL ; - cc::Vec3 result; + cc::physics::TrimeshShape *arg1 = (cc::physics::TrimeshShape *) NULL ; if(argc != 0) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (arg1)->getAngularVelocity(); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "IRigidBody_getAngularVelocity, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + (arg1)->onEnable(); + + + return true; +} +SE_BIND_FUNC(js_cc_physics_TrimeshShape_onEnable) + +static bool js_cc_physics_TrimeshShape_onDisable(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::TrimeshShape *arg1 = (cc::physics::TrimeshShape *) NULL ; + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + (arg1)->onDisable(); return true; } -SE_BIND_FUNC(js_cc_physics_IRigidBody_getAngularVelocity) +SE_BIND_FUNC(js_cc_physics_TrimeshShape_onDisable) -static bool js_cc_physics_IRigidBody_setAngularVelocity(se::State& s) +static bool js_cc_physics_TrimeshShape_onDestroy(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IRigidBody *arg1 = (cc::physics::IRigidBody *) NULL ; - float arg2 ; - float arg3 ; - float arg4 ; + cc::physics::TrimeshShape *arg1 = (cc::physics::TrimeshShape *) NULL ; - if(argc != 3) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "IRigidBody_setAngularVelocity,2,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[1], &arg3, nullptr); - SE_PRECONDITION2(ok, false, "IRigidBody_setAngularVelocity,3,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[2], &arg4, nullptr); - SE_PRECONDITION2(ok, false, "IRigidBody_setAngularVelocity,4,SWIGTYPE_float"); - (arg1)->setAngularVelocity(arg2,arg3,arg4); + (arg1)->onDestroy(); return true; } -SE_BIND_FUNC(js_cc_physics_IRigidBody_setAngularVelocity) +SE_BIND_FUNC(js_cc_physics_TrimeshShape_onDestroy) -static bool js_cc_physics_IRigidBody_applyForce(se::State& s) +static bool js_cc_physics_TrimeshShape_setMaterial(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IRigidBody *arg1 = (cc::physics::IRigidBody *) NULL ; - float arg2 ; + cc::physics::TrimeshShape *arg1 = (cc::physics::TrimeshShape *) NULL ; + uint16_t arg2 ; float arg3 ; float arg4 ; float arg5 ; - float arg6 ; - float arg7 ; + uint8_t arg6 ; + uint8_t arg7 ; if(argc != 6) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 6); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "IRigidBody_applyForce,2,SWIGTYPE_float"); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "TrimeshShape_setMaterial,2,SWIGTYPE_uint16_t"); + // %typemap(in) int, short, long, signed char, float, double ok &= sevalue_to_native(args[1], &arg3, nullptr); - SE_PRECONDITION2(ok, false, "IRigidBody_applyForce,3,SWIGTYPE_float"); + SE_PRECONDITION2(ok, false, "TrimeshShape_setMaterial,3,SWIGTYPE_float"); // %typemap(in) int, short, long, signed char, float, double ok &= sevalue_to_native(args[2], &arg4, nullptr); - SE_PRECONDITION2(ok, false, "IRigidBody_applyForce,4,SWIGTYPE_float"); + SE_PRECONDITION2(ok, false, "TrimeshShape_setMaterial,4,SWIGTYPE_float"); // %typemap(in) int, short, long, signed char, float, double ok &= sevalue_to_native(args[3], &arg5, nullptr); - SE_PRECONDITION2(ok, false, "IRigidBody_applyForce,5,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[4], &arg6, nullptr); - SE_PRECONDITION2(ok, false, "IRigidBody_applyForce,6,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[5], &arg7, nullptr); - SE_PRECONDITION2(ok, false, "IRigidBody_applyForce,7,SWIGTYPE_float"); - (arg1)->applyForce(arg2,arg3,arg4,arg5,arg6,arg7); + SE_PRECONDITION2(ok, false, "TrimeshShape_setMaterial,5,SWIGTYPE_float"); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[4], &arg6, s.thisObject()); + SE_PRECONDITION2(ok, false, "TrimeshShape_setMaterial,6,SWIGTYPE_uint8_t"); + + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[5], &arg7, s.thisObject()); + SE_PRECONDITION2(ok, false, "TrimeshShape_setMaterial,7,SWIGTYPE_uint8_t"); + + (arg1)->setMaterial(arg2,arg3,arg4,arg5,arg6,arg7); return true; } -SE_BIND_FUNC(js_cc_physics_IRigidBody_applyForce) +SE_BIND_FUNC(js_cc_physics_TrimeshShape_setMaterial) -static bool js_cc_physics_IRigidBody_applyLocalForce(se::State& s) +static bool js_cc_physics_TrimeshShape_setAsTrigger(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IRigidBody *arg1 = (cc::physics::IRigidBody *) NULL ; - float arg2 ; - float arg3 ; - float arg4 ; - float arg5 ; - float arg6 ; - float arg7 ; + cc::physics::TrimeshShape *arg1 = (cc::physics::TrimeshShape *) NULL ; + bool arg2 ; - if(argc != 6) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 6); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "IRigidBody_applyLocalForce,2,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[1], &arg3, nullptr); - SE_PRECONDITION2(ok, false, "IRigidBody_applyLocalForce,3,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[2], &arg4, nullptr); - SE_PRECONDITION2(ok, false, "IRigidBody_applyLocalForce,4,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[3], &arg5, nullptr); - SE_PRECONDITION2(ok, false, "IRigidBody_applyLocalForce,5,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[4], &arg6, nullptr); - SE_PRECONDITION2(ok, false, "IRigidBody_applyLocalForce,6,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[5], &arg7, nullptr); - SE_PRECONDITION2(ok, false, "IRigidBody_applyLocalForce,7,SWIGTYPE_float"); - (arg1)->applyLocalForce(arg2,arg3,arg4,arg5,arg6,arg7); + // %typemap(in) bool + ok &= sevalue_to_native(args[0], &arg2); + SE_PRECONDITION2(ok, false, "TrimeshShape_setAsTrigger,2,SWIGTYPE_bool"); + (arg1)->setAsTrigger(arg2); return true; } -SE_BIND_FUNC(js_cc_physics_IRigidBody_applyLocalForce) +SE_BIND_FUNC(js_cc_physics_TrimeshShape_setAsTrigger) -static bool js_cc_physics_IRigidBody_applyImpulse(se::State& s) +static bool js_cc_physics_TrimeshShape_setCenter(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IRigidBody *arg1 = (cc::physics::IRigidBody *) NULL ; + cc::physics::TrimeshShape *arg1 = (cc::physics::TrimeshShape *) NULL ; float arg2 ; float arg3 ; float arg4 ; - float arg5 ; - float arg6 ; - float arg7 ; - if(argc != 6) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 6); + if(argc != 3) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) int, short, long, signed char, float, double ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "IRigidBody_applyImpulse,2,SWIGTYPE_float"); + SE_PRECONDITION2(ok, false, "TrimeshShape_setCenter,2,SWIGTYPE_float"); // %typemap(in) int, short, long, signed char, float, double ok &= sevalue_to_native(args[1], &arg3, nullptr); - SE_PRECONDITION2(ok, false, "IRigidBody_applyImpulse,3,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[2], &arg4, nullptr); - SE_PRECONDITION2(ok, false, "IRigidBody_applyImpulse,4,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[3], &arg5, nullptr); - SE_PRECONDITION2(ok, false, "IRigidBody_applyImpulse,5,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[4], &arg6, nullptr); - SE_PRECONDITION2(ok, false, "IRigidBody_applyImpulse,6,SWIGTYPE_float"); + SE_PRECONDITION2(ok, false, "TrimeshShape_setCenter,3,SWIGTYPE_float"); // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[5], &arg7, nullptr); - SE_PRECONDITION2(ok, false, "IRigidBody_applyImpulse,7,SWIGTYPE_float"); - (arg1)->applyImpulse(arg2,arg3,arg4,arg5,arg6,arg7); + ok &= sevalue_to_native(args[2], &arg4, nullptr); + SE_PRECONDITION2(ok, false, "TrimeshShape_setCenter,4,SWIGTYPE_float"); + (arg1)->setCenter(arg2,arg3,arg4); return true; } -SE_BIND_FUNC(js_cc_physics_IRigidBody_applyImpulse) +SE_BIND_FUNC(js_cc_physics_TrimeshShape_setCenter) -static bool js_cc_physics_IRigidBody_applyLocalImpulse(se::State& s) +static bool js_cc_physics_TrimeshShape_updateEventListener(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IRigidBody *arg1 = (cc::physics::IRigidBody *) NULL ; - float arg2 ; - float arg3 ; - float arg4 ; - float arg5 ; - float arg6 ; - float arg7 ; + cc::physics::TrimeshShape *arg1 = (cc::physics::TrimeshShape *) NULL ; + cc::physics::EShapeFilterFlag arg2 ; + int32_t temp2 ; - if(argc != 6) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 6); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "IRigidBody_applyLocalImpulse,2,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[1], &arg3, nullptr); - SE_PRECONDITION2(ok, false, "IRigidBody_applyLocalImpulse,3,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[2], &arg4, nullptr); - SE_PRECONDITION2(ok, false, "IRigidBody_applyLocalImpulse,4,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[3], &arg5, nullptr); - SE_PRECONDITION2(ok, false, "IRigidBody_applyLocalImpulse,5,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[4], &arg6, nullptr); - SE_PRECONDITION2(ok, false, "IRigidBody_applyLocalImpulse,6,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[5], &arg7, nullptr); - SE_PRECONDITION2(ok, false, "IRigidBody_applyLocalImpulse,7,SWIGTYPE_float"); - (arg1)->applyLocalImpulse(arg2,arg3,arg4,arg5,arg6,arg7); + // %typemap(in) enum SWIGTYPE (int32_t temp2) + ok &= sevalue_to_native(args[0], &temp2); + SE_PRECONDITION2(ok, false, "TrimeshShape_updateEventListener,2,SWIGTYPE_cc__physics__EShapeFilterFlag"); + arg2 = (cc::physics::EShapeFilterFlag)temp2; + (arg1)->updateEventListener(arg2); return true; } -SE_BIND_FUNC(js_cc_physics_IRigidBody_applyLocalImpulse) +SE_BIND_FUNC(js_cc_physics_TrimeshShape_updateEventListener) -static bool js_cc_physics_IRigidBody_applyTorque(se::State& s) +static bool js_cc_physics_TrimeshShape_getAABB(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IRigidBody *arg1 = (cc::physics::IRigidBody *) NULL ; - float arg2 ; - float arg3 ; - float arg4 ; + cc::physics::TrimeshShape *arg1 = (cc::physics::TrimeshShape *) NULL ; + cc::geometry::AABB *result = 0 ; - if(argc != 3) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "IRigidBody_applyTorque,2,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[1], &arg3, nullptr); - SE_PRECONDITION2(ok, false, "IRigidBody_applyTorque,3,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[2], &arg4, nullptr); - SE_PRECONDITION2(ok, false, "IRigidBody_applyTorque,4,SWIGTYPE_float"); - (arg1)->applyTorque(arg2,arg3,arg4); + result = (cc::geometry::AABB *) &(arg1)->getAABB(); + // %typemap(out) SWIGTYPE& + ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "TrimeshShape_getAABB, Error processing arguments"); + SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); return true; } -SE_BIND_FUNC(js_cc_physics_IRigidBody_applyTorque) +SE_BIND_FUNC(js_cc_physics_TrimeshShape_getAABB) -static bool js_cc_physics_IRigidBody_applyLocalTorque(se::State& s) +static bool js_cc_physics_TrimeshShape_getBoundingSphere(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IRigidBody *arg1 = (cc::physics::IRigidBody *) NULL ; - float arg2 ; - float arg3 ; - float arg4 ; + cc::physics::TrimeshShape *arg1 = (cc::physics::TrimeshShape *) NULL ; + cc::geometry::Sphere *result = 0 ; - if(argc != 3) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "IRigidBody_applyLocalTorque,2,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[1], &arg3, nullptr); - SE_PRECONDITION2(ok, false, "IRigidBody_applyLocalTorque,3,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[2], &arg4, nullptr); - SE_PRECONDITION2(ok, false, "IRigidBody_applyLocalTorque,4,SWIGTYPE_float"); - (arg1)->applyLocalTorque(arg2,arg3,arg4); + result = (cc::geometry::Sphere *) &(arg1)->getBoundingSphere(); + // %typemap(out) SWIGTYPE& + ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "TrimeshShape_getBoundingSphere, Error processing arguments"); + SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); return true; } -SE_BIND_FUNC(js_cc_physics_IRigidBody_applyLocalTorque) +SE_BIND_FUNC(js_cc_physics_TrimeshShape_getBoundingSphere) -static bool js_cc_physics_IRigidBody_getGroup(se::State& s) +static bool js_cc_physics_TrimeshShape_getGroup(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IRigidBody *arg1 = (cc::physics::IRigidBody *) NULL ; + cc::physics::TrimeshShape *arg1 = (cc::physics::TrimeshShape *) NULL ; uint32_t result; if(argc != 0) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); result = (arg1)->getGroup(); // %typemap(out) SWIGTYPE ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "IRigidBody_getGroup, Error processing arguments"); + SE_PRECONDITION2(ok, false, "TrimeshShape_getGroup, Error processing arguments"); SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); return true; } -SE_BIND_FUNC(js_cc_physics_IRigidBody_getGroup) +SE_BIND_FUNC(js_cc_physics_TrimeshShape_getGroup) -static bool js_cc_physics_IRigidBody_setGroup(se::State& s) +static bool js_cc_physics_TrimeshShape_setGroup(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IRigidBody *arg1 = (cc::physics::IRigidBody *) NULL ; + cc::physics::TrimeshShape *arg1 = (cc::physics::TrimeshShape *) NULL ; uint32_t arg2 ; if(argc != 1) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE value in ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "IRigidBody_setGroup,2,SWIGTYPE_uint32_t"); + SE_PRECONDITION2(ok, false, "TrimeshShape_setGroup,2,SWIGTYPE_uint32_t"); (arg1)->setGroup(arg2); return true; } -SE_BIND_FUNC(js_cc_physics_IRigidBody_setGroup) +SE_BIND_FUNC(js_cc_physics_TrimeshShape_setGroup) -static bool js_cc_physics_IRigidBody_getMask(se::State& s) +static bool js_cc_physics_TrimeshShape_getMask(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IRigidBody *arg1 = (cc::physics::IRigidBody *) NULL ; + cc::physics::TrimeshShape *arg1 = (cc::physics::TrimeshShape *) NULL ; uint32_t result; if(argc != 0) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); result = (arg1)->getMask(); // %typemap(out) SWIGTYPE ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "IRigidBody_getMask, Error processing arguments"); + SE_PRECONDITION2(ok, false, "TrimeshShape_getMask, Error processing arguments"); SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); return true; } -SE_BIND_FUNC(js_cc_physics_IRigidBody_getMask) +SE_BIND_FUNC(js_cc_physics_TrimeshShape_getMask) -static bool js_cc_physics_IRigidBody_setMask(se::State& s) +static bool js_cc_physics_TrimeshShape_setMask(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IRigidBody *arg1 = (cc::physics::IRigidBody *) NULL ; + cc::physics::TrimeshShape *arg1 = (cc::physics::TrimeshShape *) NULL ; uint32_t arg2 ; if(argc != 1) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE value in ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "IRigidBody_setMask,2,SWIGTYPE_uint32_t"); + SE_PRECONDITION2(ok, false, "TrimeshShape_setMask,2,SWIGTYPE_uint32_t"); (arg1)->setMask(arg2); return true; } -SE_BIND_FUNC(js_cc_physics_IRigidBody_setMask) +SE_BIND_FUNC(js_cc_physics_TrimeshShape_setMask) -static bool js_cc_physics_IRigidBody_getObjectID(se::State& s) +static bool js_cc_physics_TrimeshShape_getObjectID(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IRigidBody *arg1 = (cc::physics::IRigidBody *) NULL ; + cc::physics::TrimeshShape *arg1 = (cc::physics::TrimeshShape *) NULL ; uint32_t result; if(argc != 0) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = ((cc::physics::IRigidBody const *)arg1)->getObjectID(); + result = ((cc::physics::TrimeshShape const *)arg1)->getObjectID(); // %typemap(out) SWIGTYPE ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "IRigidBody_getObjectID, Error processing arguments"); + SE_PRECONDITION2(ok, false, "TrimeshShape_getObjectID, Error processing arguments"); SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); return true; } -SE_BIND_FUNC(js_cc_physics_IRigidBody_getObjectID) +SE_BIND_FUNC(js_cc_physics_TrimeshShape_getObjectID) + +static bool js_cc_physics_TrimeshShape_setMesh(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::TrimeshShape *arg1 = (cc::physics::TrimeshShape *) NULL ; + uint32_t arg2 ; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "TrimeshShape_setMesh,2,SWIGTYPE_uint32_t"); + + (arg1)->setMesh(arg2); + + + return true; +} +SE_BIND_FUNC(js_cc_physics_TrimeshShape_setMesh) + +static bool js_cc_physics_TrimeshShape_useConvex(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::TrimeshShape *arg1 = (cc::physics::TrimeshShape *) NULL ; + bool arg2 ; + + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) bool + ok &= sevalue_to_native(args[0], &arg2); + SE_PRECONDITION2(ok, false, "TrimeshShape_useConvex,2,SWIGTYPE_bool"); + (arg1)->useConvex(arg2); + + + return true; +} +SE_BIND_FUNC(js_cc_physics_TrimeshShape_useConvex) -bool js_register_cc_physics_IRigidBody(se::Object* obj) { - auto* cls = se::Class::create("IRigidBody", obj, __jsb_cc_physics_ILifecycle_proto, nullptr); +bool js_register_cc_physics_TrimeshShape(se::Object* obj) { + auto* cls = se::Class::create("TrimeshShape", obj, nullptr, _SE(js_new_cc_physics_TrimeshShape)); - cls->defineFunction("initialize", _SE(js_cc_physics_IRigidBody_initialize)); - cls->defineFunction("isAwake", _SE(js_cc_physics_IRigidBody_isAwake)); - cls->defineFunction("isSleepy", _SE(js_cc_physics_IRigidBody_isSleepy)); - cls->defineFunction("isSleeping", _SE(js_cc_physics_IRigidBody_isSleeping)); - cls->defineFunction("setType", _SE(js_cc_physics_IRigidBody_setType)); - cls->defineFunction("setMass", _SE(js_cc_physics_IRigidBody_setMass)); - cls->defineFunction("setLinearDamping", _SE(js_cc_physics_IRigidBody_setLinearDamping)); - cls->defineFunction("setAngularDamping", _SE(js_cc_physics_IRigidBody_setAngularDamping)); - cls->defineFunction("useGravity", _SE(js_cc_physics_IRigidBody_useGravity)); - cls->defineFunction("useCCD", _SE(js_cc_physics_IRigidBody_useCCD)); - cls->defineFunction("setLinearFactor", _SE(js_cc_physics_IRigidBody_setLinearFactor)); - cls->defineFunction("setAngularFactor", _SE(js_cc_physics_IRigidBody_setAngularFactor)); - cls->defineFunction("setAllowSleep", _SE(js_cc_physics_IRigidBody_setAllowSleep)); - cls->defineFunction("wakeUp", _SE(js_cc_physics_IRigidBody_wakeUp)); - cls->defineFunction("sleep", _SE(js_cc_physics_IRigidBody_sleep)); - cls->defineFunction("clearState", _SE(js_cc_physics_IRigidBody_clearState)); - cls->defineFunction("clearForces", _SE(js_cc_physics_IRigidBody_clearForces)); - cls->defineFunction("clearVelocity", _SE(js_cc_physics_IRigidBody_clearVelocity)); - cls->defineFunction("setSleepThreshold", _SE(js_cc_physics_IRigidBody_setSleepThreshold)); - cls->defineFunction("getSleepThreshold", _SE(js_cc_physics_IRigidBody_getSleepThreshold)); - cls->defineFunction("getLinearVelocity", _SE(js_cc_physics_IRigidBody_getLinearVelocity)); - cls->defineFunction("setLinearVelocity", _SE(js_cc_physics_IRigidBody_setLinearVelocity)); - cls->defineFunction("getAngularVelocity", _SE(js_cc_physics_IRigidBody_getAngularVelocity)); - cls->defineFunction("setAngularVelocity", _SE(js_cc_physics_IRigidBody_setAngularVelocity)); - cls->defineFunction("applyForce", _SE(js_cc_physics_IRigidBody_applyForce)); - cls->defineFunction("applyLocalForce", _SE(js_cc_physics_IRigidBody_applyLocalForce)); - cls->defineFunction("applyImpulse", _SE(js_cc_physics_IRigidBody_applyImpulse)); - cls->defineFunction("applyLocalImpulse", _SE(js_cc_physics_IRigidBody_applyLocalImpulse)); - cls->defineFunction("applyTorque", _SE(js_cc_physics_IRigidBody_applyTorque)); - cls->defineFunction("applyLocalTorque", _SE(js_cc_physics_IRigidBody_applyLocalTorque)); - cls->defineFunction("getGroup", _SE(js_cc_physics_IRigidBody_getGroup)); - cls->defineFunction("setGroup", _SE(js_cc_physics_IRigidBody_setGroup)); - cls->defineFunction("getMask", _SE(js_cc_physics_IRigidBody_getMask)); - cls->defineFunction("setMask", _SE(js_cc_physics_IRigidBody_setMask)); - cls->defineFunction("getObjectID", _SE(js_cc_physics_IRigidBody_getObjectID)); + cls->defineFunction("initialize", _SE(js_cc_physics_TrimeshShape_initialize)); + cls->defineFunction("onEnable", _SE(js_cc_physics_TrimeshShape_onEnable)); + cls->defineFunction("onDisable", _SE(js_cc_physics_TrimeshShape_onDisable)); + cls->defineFunction("onDestroy", _SE(js_cc_physics_TrimeshShape_onDestroy)); + cls->defineFunction("setMaterial", _SE(js_cc_physics_TrimeshShape_setMaterial)); + cls->defineFunction("setAsTrigger", _SE(js_cc_physics_TrimeshShape_setAsTrigger)); + cls->defineFunction("setCenter", _SE(js_cc_physics_TrimeshShape_setCenter)); + cls->defineFunction("updateEventListener", _SE(js_cc_physics_TrimeshShape_updateEventListener)); + cls->defineFunction("getAABB", _SE(js_cc_physics_TrimeshShape_getAABB)); + cls->defineFunction("getBoundingSphere", _SE(js_cc_physics_TrimeshShape_getBoundingSphere)); + cls->defineFunction("getGroup", _SE(js_cc_physics_TrimeshShape_getGroup)); + cls->defineFunction("setGroup", _SE(js_cc_physics_TrimeshShape_setGroup)); + cls->defineFunction("getMask", _SE(js_cc_physics_TrimeshShape_getMask)); + cls->defineFunction("setMask", _SE(js_cc_physics_TrimeshShape_setMask)); + cls->defineFunction("getObjectID", _SE(js_cc_physics_TrimeshShape_getObjectID)); + cls->defineFunction("setMesh", _SE(js_cc_physics_TrimeshShape_setMesh)); + cls->defineFunction("useConvex", _SE(js_cc_physics_TrimeshShape_useConvex)); - cls->defineFinalizeFunction(_SE(js_delete_cc_physics_IRigidBody)); + cls->defineFinalizeFunction(_SE(js_delete_cc_physics_TrimeshShape)); cls->install(); - JSBClassType::registerClass(cls); + JSBClassType::registerClass(cls); - __jsb_cc_physics_IRigidBody_proto = cls->getProto(); - __jsb_cc_physics_IRigidBody_class = cls; + __jsb_cc_physics_TrimeshShape_proto = cls->getProto(); + __jsb_cc_physics_TrimeshShape_class = cls; se::ScriptEngine::getInstance()->clearException(); return true; } -se::Class* __jsb_cc_physics_IBaseShape_class = nullptr; -se::Object* __jsb_cc_physics_IBaseShape_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_physics_IBaseShape) +se::Class* __jsb_cc_physics_CylinderShape_class = nullptr; +se::Object* __jsb_cc_physics_CylinderShape_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_physics_CylinderShape) + +// js_ctor +static bool js_new_cc_physics_CylinderShape(se::State& s) // NOLINT(readability-identifier-naming) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + + cc::physics::CylinderShape *result; + result = (cc::physics::CylinderShape *)new cc::physics::CylinderShape(); + + + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); + return true; +} +SE_BIND_CTOR(js_new_cc_physics_CylinderShape, __jsb_cc_physics_CylinderShape_class, js_delete_cc_physics_CylinderShape) -static bool js_delete_cc_physics_IBaseShape(se::State& s) +static bool js_delete_cc_physics_CylinderShape(se::State& s) { // js_dtoroverride return true; } -SE_BIND_FINALIZE_FUNC(js_delete_cc_physics_IBaseShape) +SE_BIND_FINALIZE_FUNC(js_delete_cc_physics_CylinderShape) -static bool js_cc_physics_IBaseShape_initialize(se::State& s) +static bool js_cc_physics_CylinderShape_initialize(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IBaseShape *arg1 = (cc::physics::IBaseShape *) NULL ; + cc::physics::CylinderShape *arg1 = (cc::physics::CylinderShape *) NULL ; cc::Node *arg2 = (cc::Node *) NULL ; if(argc != 1) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE* ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "IBaseShape_initialize,2,SWIGTYPE_p_cc__Node"); + SE_PRECONDITION2(ok, false, "CylinderShape_initialize,2,SWIGTYPE_p_cc__Node"); (arg1)->initialize(arg2); return true; } -SE_BIND_FUNC(js_cc_physics_IBaseShape_initialize) +SE_BIND_FUNC(js_cc_physics_CylinderShape_initialize) + +static bool js_cc_physics_CylinderShape_onEnable(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::CylinderShape *arg1 = (cc::physics::CylinderShape *) NULL ; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + (arg1)->onEnable(); + + + return true; +} +SE_BIND_FUNC(js_cc_physics_CylinderShape_onEnable) + +static bool js_cc_physics_CylinderShape_onDisable(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::CylinderShape *arg1 = (cc::physics::CylinderShape *) NULL ; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + (arg1)->onDisable(); + + + return true; +} +SE_BIND_FUNC(js_cc_physics_CylinderShape_onDisable) + +static bool js_cc_physics_CylinderShape_onDestroy(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::CylinderShape *arg1 = (cc::physics::CylinderShape *) NULL ; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + (arg1)->onDestroy(); + + + return true; +} +SE_BIND_FUNC(js_cc_physics_CylinderShape_onDestroy) -static bool js_cc_physics_IBaseShape_setMaterial(se::State& s) +static bool js_cc_physics_CylinderShape_setMaterial(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IBaseShape *arg1 = (cc::physics::IBaseShape *) NULL ; + cc::physics::CylinderShape *arg1 = (cc::physics::CylinderShape *) NULL ; uint16_t arg2 ; float arg3 ; float arg4 ; @@ -3799,73 +4720,73 @@ static bool js_cc_physics_IBaseShape_setMaterial(se::State& s) SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 6); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE value in ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "IBaseShape_setMaterial,2,SWIGTYPE_uint16_t"); + SE_PRECONDITION2(ok, false, "CylinderShape_setMaterial,2,SWIGTYPE_uint16_t"); // %typemap(in) int, short, long, signed char, float, double ok &= sevalue_to_native(args[1], &arg3, nullptr); - SE_PRECONDITION2(ok, false, "IBaseShape_setMaterial,3,SWIGTYPE_float"); + SE_PRECONDITION2(ok, false, "CylinderShape_setMaterial,3,SWIGTYPE_float"); // %typemap(in) int, short, long, signed char, float, double ok &= sevalue_to_native(args[2], &arg4, nullptr); - SE_PRECONDITION2(ok, false, "IBaseShape_setMaterial,4,SWIGTYPE_float"); + SE_PRECONDITION2(ok, false, "CylinderShape_setMaterial,4,SWIGTYPE_float"); // %typemap(in) int, short, long, signed char, float, double ok &= sevalue_to_native(args[3], &arg5, nullptr); - SE_PRECONDITION2(ok, false, "IBaseShape_setMaterial,5,SWIGTYPE_float"); + SE_PRECONDITION2(ok, false, "CylinderShape_setMaterial,5,SWIGTYPE_float"); // %typemap(in) SWIGTYPE value in ok &= sevalue_to_native(args[4], &arg6, s.thisObject()); - SE_PRECONDITION2(ok, false, "IBaseShape_setMaterial,6,SWIGTYPE_uint8_t"); + SE_PRECONDITION2(ok, false, "CylinderShape_setMaterial,6,SWIGTYPE_uint8_t"); // %typemap(in) SWIGTYPE value in ok &= sevalue_to_native(args[5], &arg7, s.thisObject()); - SE_PRECONDITION2(ok, false, "IBaseShape_setMaterial,7,SWIGTYPE_uint8_t"); + SE_PRECONDITION2(ok, false, "CylinderShape_setMaterial,7,SWIGTYPE_uint8_t"); (arg1)->setMaterial(arg2,arg3,arg4,arg5,arg6,arg7); return true; } -SE_BIND_FUNC(js_cc_physics_IBaseShape_setMaterial) +SE_BIND_FUNC(js_cc_physics_CylinderShape_setMaterial) -static bool js_cc_physics_IBaseShape_setAsTrigger(se::State& s) +static bool js_cc_physics_CylinderShape_setAsTrigger(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IBaseShape *arg1 = (cc::physics::IBaseShape *) NULL ; + cc::physics::CylinderShape *arg1 = (cc::physics::CylinderShape *) NULL ; bool arg2 ; if(argc != 1) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) bool ok &= sevalue_to_native(args[0], &arg2); - SE_PRECONDITION2(ok, false, "IBaseShape_setAsTrigger,2,SWIGTYPE_bool"); + SE_PRECONDITION2(ok, false, "CylinderShape_setAsTrigger,2,SWIGTYPE_bool"); (arg1)->setAsTrigger(arg2); return true; } -SE_BIND_FUNC(js_cc_physics_IBaseShape_setAsTrigger) +SE_BIND_FUNC(js_cc_physics_CylinderShape_setAsTrigger) -static bool js_cc_physics_IBaseShape_setCenter(se::State& s) +static bool js_cc_physics_CylinderShape_setCenter(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IBaseShape *arg1 = (cc::physics::IBaseShape *) NULL ; + cc::physics::CylinderShape *arg1 = (cc::physics::CylinderShape *) NULL ; float arg2 ; float arg3 ; float arg4 ; @@ -3874,1270 +4795,1110 @@ static bool js_cc_physics_IBaseShape_setCenter(se::State& s) SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) int, short, long, signed char, float, double ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "IBaseShape_setCenter,2,SWIGTYPE_float"); + SE_PRECONDITION2(ok, false, "CylinderShape_setCenter,2,SWIGTYPE_float"); // %typemap(in) int, short, long, signed char, float, double ok &= sevalue_to_native(args[1], &arg3, nullptr); - SE_PRECONDITION2(ok, false, "IBaseShape_setCenter,3,SWIGTYPE_float"); + SE_PRECONDITION2(ok, false, "CylinderShape_setCenter,3,SWIGTYPE_float"); // %typemap(in) int, short, long, signed char, float, double ok &= sevalue_to_native(args[2], &arg4, nullptr); - SE_PRECONDITION2(ok, false, "IBaseShape_setCenter,4,SWIGTYPE_float"); + SE_PRECONDITION2(ok, false, "CylinderShape_setCenter,4,SWIGTYPE_float"); (arg1)->setCenter(arg2,arg3,arg4); return true; } -SE_BIND_FUNC(js_cc_physics_IBaseShape_setCenter) +SE_BIND_FUNC(js_cc_physics_CylinderShape_setCenter) -static bool js_cc_physics_IBaseShape_getAABB(se::State& s) +static bool js_cc_physics_CylinderShape_updateEventListener(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IBaseShape *arg1 = (cc::physics::IBaseShape *) NULL ; - cc::geometry::AABB *result = 0 ; + cc::physics::CylinderShape *arg1 = (cc::physics::CylinderShape *) NULL ; + cc::physics::EShapeFilterFlag arg2 ; + int32_t temp2 ; - if(argc != 0) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (cc::geometry::AABB *) &(arg1)->getAABB(); - // %typemap(out) SWIGTYPE& - ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "IBaseShape_getAABB, Error processing arguments"); - SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); + // %typemap(in) enum SWIGTYPE (int32_t temp2) + ok &= sevalue_to_native(args[0], &temp2); + SE_PRECONDITION2(ok, false, "CylinderShape_updateEventListener,2,SWIGTYPE_cc__physics__EShapeFilterFlag"); + arg2 = (cc::physics::EShapeFilterFlag)temp2; + (arg1)->updateEventListener(arg2); return true; } -SE_BIND_FUNC(js_cc_physics_IBaseShape_getAABB) +SE_BIND_FUNC(js_cc_physics_CylinderShape_updateEventListener) -static bool js_cc_physics_IBaseShape_getBoundingSphere(se::State& s) +static bool js_cc_physics_CylinderShape_getAABB(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IBaseShape *arg1 = (cc::physics::IBaseShape *) NULL ; - cc::geometry::Sphere *result = 0 ; + cc::physics::CylinderShape *arg1 = (cc::physics::CylinderShape *) NULL ; + cc::geometry::AABB *result = 0 ; if(argc != 0) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = (cc::geometry::Sphere *) &(arg1)->getBoundingSphere(); + result = (cc::geometry::AABB *) &(arg1)->getAABB(); // %typemap(out) SWIGTYPE& ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "IBaseShape_getBoundingSphere, Error processing arguments"); + SE_PRECONDITION2(ok, false, "CylinderShape_getAABB, Error processing arguments"); SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); return true; } -SE_BIND_FUNC(js_cc_physics_IBaseShape_getBoundingSphere) +SE_BIND_FUNC(js_cc_physics_CylinderShape_getAABB) -static bool js_cc_physics_IBaseShape_updateEventListener(se::State& s) +static bool js_cc_physics_CylinderShape_getBoundingSphere(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IBaseShape *arg1 = (cc::physics::IBaseShape *) NULL ; - cc::physics::EShapeFilterFlag arg2 ; - int32_t temp2 ; + cc::physics::CylinderShape *arg1 = (cc::physics::CylinderShape *) NULL ; + cc::geometry::Sphere *result = 0 ; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) enum SWIGTYPE (int32_t temp2) - ok &= sevalue_to_native(args[0], &temp2); - SE_PRECONDITION2(ok, false, "IBaseShape_updateEventListener,2,SWIGTYPE_cc__physics__EShapeFilterFlag"); - arg2 = (cc::physics::EShapeFilterFlag)temp2; - (arg1)->updateEventListener(arg2); + result = (cc::geometry::Sphere *) &(arg1)->getBoundingSphere(); + // %typemap(out) SWIGTYPE& + ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "CylinderShape_getBoundingSphere, Error processing arguments"); + SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); return true; } -SE_BIND_FUNC(js_cc_physics_IBaseShape_updateEventListener) +SE_BIND_FUNC(js_cc_physics_CylinderShape_getBoundingSphere) -static bool js_cc_physics_IBaseShape_getGroup(se::State& s) +static bool js_cc_physics_CylinderShape_getGroup(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IBaseShape *arg1 = (cc::physics::IBaseShape *) NULL ; + cc::physics::CylinderShape *arg1 = (cc::physics::CylinderShape *) NULL ; uint32_t result; if(argc != 0) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); result = (arg1)->getGroup(); // %typemap(out) SWIGTYPE ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "IBaseShape_getGroup, Error processing arguments"); + SE_PRECONDITION2(ok, false, "CylinderShape_getGroup, Error processing arguments"); SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); return true; } -SE_BIND_FUNC(js_cc_physics_IBaseShape_getGroup) +SE_BIND_FUNC(js_cc_physics_CylinderShape_getGroup) -static bool js_cc_physics_IBaseShape_setGroup(se::State& s) +static bool js_cc_physics_CylinderShape_setGroup(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IBaseShape *arg1 = (cc::physics::IBaseShape *) NULL ; + cc::physics::CylinderShape *arg1 = (cc::physics::CylinderShape *) NULL ; uint32_t arg2 ; if(argc != 1) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE value in ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "IBaseShape_setGroup,2,SWIGTYPE_uint32_t"); + SE_PRECONDITION2(ok, false, "CylinderShape_setGroup,2,SWIGTYPE_uint32_t"); (arg1)->setGroup(arg2); return true; } -SE_BIND_FUNC(js_cc_physics_IBaseShape_setGroup) +SE_BIND_FUNC(js_cc_physics_CylinderShape_setGroup) -static bool js_cc_physics_IBaseShape_getMask(se::State& s) +static bool js_cc_physics_CylinderShape_getMask(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IBaseShape *arg1 = (cc::physics::IBaseShape *) NULL ; + cc::physics::CylinderShape *arg1 = (cc::physics::CylinderShape *) NULL ; uint32_t result; if(argc != 0) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); result = (arg1)->getMask(); // %typemap(out) SWIGTYPE ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "IBaseShape_getMask, Error processing arguments"); + SE_PRECONDITION2(ok, false, "CylinderShape_getMask, Error processing arguments"); SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); return true; } -SE_BIND_FUNC(js_cc_physics_IBaseShape_getMask) +SE_BIND_FUNC(js_cc_physics_CylinderShape_getMask) -static bool js_cc_physics_IBaseShape_setMask(se::State& s) +static bool js_cc_physics_CylinderShape_setMask(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IBaseShape *arg1 = (cc::physics::IBaseShape *) NULL ; + cc::physics::CylinderShape *arg1 = (cc::physics::CylinderShape *) NULL ; uint32_t arg2 ; if(argc != 1) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE value in ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "IBaseShape_setMask,2,SWIGTYPE_uint32_t"); + SE_PRECONDITION2(ok, false, "CylinderShape_setMask,2,SWIGTYPE_uint32_t"); (arg1)->setMask(arg2); return true; } -SE_BIND_FUNC(js_cc_physics_IBaseShape_setMask) +SE_BIND_FUNC(js_cc_physics_CylinderShape_setMask) -static bool js_cc_physics_IBaseShape_getObjectID(se::State& s) +static bool js_cc_physics_CylinderShape_getObjectID(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IBaseShape *arg1 = (cc::physics::IBaseShape *) NULL ; + cc::physics::CylinderShape *arg1 = (cc::physics::CylinderShape *) NULL ; uint32_t result; if(argc != 0) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = ((cc::physics::IBaseShape const *)arg1)->getObjectID(); + result = ((cc::physics::CylinderShape const *)arg1)->getObjectID(); // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "IBaseShape_getObjectID, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - - - - return true; -} -SE_BIND_FUNC(js_cc_physics_IBaseShape_getObjectID) - -bool js_register_cc_physics_IBaseShape(se::Object* obj) { - auto* cls = se::Class::create("IBaseShape", obj, __jsb_cc_physics_ILifecycle_proto, nullptr); - - - cls->defineFunction("initialize", _SE(js_cc_physics_IBaseShape_initialize)); - cls->defineFunction("setMaterial", _SE(js_cc_physics_IBaseShape_setMaterial)); - cls->defineFunction("setAsTrigger", _SE(js_cc_physics_IBaseShape_setAsTrigger)); - cls->defineFunction("setCenter", _SE(js_cc_physics_IBaseShape_setCenter)); - cls->defineFunction("getAABB", _SE(js_cc_physics_IBaseShape_getAABB)); - cls->defineFunction("getBoundingSphere", _SE(js_cc_physics_IBaseShape_getBoundingSphere)); - cls->defineFunction("updateEventListener", _SE(js_cc_physics_IBaseShape_updateEventListener)); - cls->defineFunction("getGroup", _SE(js_cc_physics_IBaseShape_getGroup)); - cls->defineFunction("setGroup", _SE(js_cc_physics_IBaseShape_setGroup)); - cls->defineFunction("getMask", _SE(js_cc_physics_IBaseShape_getMask)); - cls->defineFunction("setMask", _SE(js_cc_physics_IBaseShape_setMask)); - cls->defineFunction("getObjectID", _SE(js_cc_physics_IBaseShape_getObjectID)); - - - - - cls->defineFinalizeFunction(_SE(js_delete_cc_physics_IBaseShape)); - - - cls->install(); - JSBClassType::registerClass(cls); - - __jsb_cc_physics_IBaseShape_proto = cls->getProto(); - __jsb_cc_physics_IBaseShape_class = cls; - se::ScriptEngine::getInstance()->clearException(); - return true; -} - - -se::Class* __jsb_cc_physics_ISphereShape_class = nullptr; -se::Object* __jsb_cc_physics_ISphereShape_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_physics_ISphereShape) - -static bool js_delete_cc_physics_ISphereShape(se::State& s) -{ - // js_dtoroverride + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "CylinderShape_getObjectID, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + + + return true; } -SE_BIND_FINALIZE_FUNC(js_delete_cc_physics_ISphereShape) +SE_BIND_FUNC(js_cc_physics_CylinderShape_getObjectID) -static bool js_cc_physics_ISphereShape_setRadius(se::State& s) +static bool js_cc_physics_CylinderShape_setConvex(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::ISphereShape *arg1 = (cc::physics::ISphereShape *) NULL ; - float arg2 ; + cc::physics::CylinderShape *arg1 = (cc::physics::CylinderShape *) NULL ; + uint32_t arg2 ; if(argc != 1) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "ISphereShape_setRadius,2,SWIGTYPE_float"); - (arg1)->setRadius(arg2); - - - return true; -} -SE_BIND_FUNC(js_cc_physics_ISphereShape_setRadius) - -bool js_register_cc_physics_ISphereShape(se::Object* obj) { - auto* cls = se::Class::create("ISphereShape", obj, __jsb_cc_physics_IBaseShape_proto, nullptr); - - cls->defineFunction("setRadius", _SE(js_cc_physics_ISphereShape_setRadius)); - - - - - cls->defineFinalizeFunction(_SE(js_delete_cc_physics_ISphereShape)); + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "CylinderShape_setConvex,2,SWIGTYPE_uint32_t"); + (arg1)->setConvex(arg2); - cls->install(); - JSBClassType::registerClass(cls); - __jsb_cc_physics_ISphereShape_proto = cls->getProto(); - __jsb_cc_physics_ISphereShape_class = cls; - se::ScriptEngine::getInstance()->clearException(); - return true; -} - - -se::Class* __jsb_cc_physics_IBoxShape_class = nullptr; -se::Object* __jsb_cc_physics_IBoxShape_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_physics_IBoxShape) - -static bool js_delete_cc_physics_IBoxShape(se::State& s) -{ - // js_dtoroverride return true; } -SE_BIND_FINALIZE_FUNC(js_delete_cc_physics_IBoxShape) +SE_BIND_FUNC(js_cc_physics_CylinderShape_setConvex) -static bool js_cc_physics_IBoxShape_setSize(se::State& s) +static bool js_cc_physics_CylinderShape_setCylinder(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IBoxShape *arg1 = (cc::physics::IBoxShape *) NULL ; + cc::physics::CylinderShape *arg1 = (cc::physics::CylinderShape *) NULL ; float arg2 ; float arg3 ; - float arg4 ; + cc::physics::EAxisDirection arg4 ; + int32_t temp4 ; if(argc != 3) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) int, short, long, signed char, float, double ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "IBoxShape_setSize,2,SWIGTYPE_float"); + SE_PRECONDITION2(ok, false, "CylinderShape_setCylinder,2,SWIGTYPE_float"); // %typemap(in) int, short, long, signed char, float, double ok &= sevalue_to_native(args[1], &arg3, nullptr); - SE_PRECONDITION2(ok, false, "IBoxShape_setSize,3,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[2], &arg4, nullptr); - SE_PRECONDITION2(ok, false, "IBoxShape_setSize,4,SWIGTYPE_float"); - (arg1)->setSize(arg2,arg3,arg4); + SE_PRECONDITION2(ok, false, "CylinderShape_setCylinder,3,SWIGTYPE_float"); + // %typemap(in) enum SWIGTYPE (int32_t temp4) + ok &= sevalue_to_native(args[2], &temp4); + SE_PRECONDITION2(ok, false, "CylinderShape_setCylinder,4,SWIGTYPE_cc__physics__EAxisDirection"); + arg4 = (cc::physics::EAxisDirection)temp4; + (arg1)->setCylinder(arg2,arg3,arg4); return true; } -SE_BIND_FUNC(js_cc_physics_IBoxShape_setSize) +SE_BIND_FUNC(js_cc_physics_CylinderShape_setCylinder) -bool js_register_cc_physics_IBoxShape(se::Object* obj) { - auto* cls = se::Class::create("IBoxShape", obj, __jsb_cc_physics_IBaseShape_proto, nullptr); +bool js_register_cc_physics_CylinderShape(se::Object* obj) { + auto* cls = se::Class::create("CylinderShape", obj, nullptr, _SE(js_new_cc_physics_CylinderShape)); - cls->defineFunction("setSize", _SE(js_cc_physics_IBoxShape_setSize)); + cls->defineFunction("initialize", _SE(js_cc_physics_CylinderShape_initialize)); + cls->defineFunction("onEnable", _SE(js_cc_physics_CylinderShape_onEnable)); + cls->defineFunction("onDisable", _SE(js_cc_physics_CylinderShape_onDisable)); + cls->defineFunction("onDestroy", _SE(js_cc_physics_CylinderShape_onDestroy)); + cls->defineFunction("setMaterial", _SE(js_cc_physics_CylinderShape_setMaterial)); + cls->defineFunction("setAsTrigger", _SE(js_cc_physics_CylinderShape_setAsTrigger)); + cls->defineFunction("setCenter", _SE(js_cc_physics_CylinderShape_setCenter)); + cls->defineFunction("updateEventListener", _SE(js_cc_physics_CylinderShape_updateEventListener)); + cls->defineFunction("getAABB", _SE(js_cc_physics_CylinderShape_getAABB)); + cls->defineFunction("getBoundingSphere", _SE(js_cc_physics_CylinderShape_getBoundingSphere)); + cls->defineFunction("getGroup", _SE(js_cc_physics_CylinderShape_getGroup)); + cls->defineFunction("setGroup", _SE(js_cc_physics_CylinderShape_setGroup)); + cls->defineFunction("getMask", _SE(js_cc_physics_CylinderShape_getMask)); + cls->defineFunction("setMask", _SE(js_cc_physics_CylinderShape_setMask)); + cls->defineFunction("getObjectID", _SE(js_cc_physics_CylinderShape_getObjectID)); + cls->defineFunction("setConvex", _SE(js_cc_physics_CylinderShape_setConvex)); + cls->defineFunction("setCylinder", _SE(js_cc_physics_CylinderShape_setCylinder)); - cls->defineFinalizeFunction(_SE(js_delete_cc_physics_IBoxShape)); + cls->defineFinalizeFunction(_SE(js_delete_cc_physics_CylinderShape)); cls->install(); - JSBClassType::registerClass(cls); + JSBClassType::registerClass(cls); - __jsb_cc_physics_IBoxShape_proto = cls->getProto(); - __jsb_cc_physics_IBoxShape_class = cls; + __jsb_cc_physics_CylinderShape_proto = cls->getProto(); + __jsb_cc_physics_CylinderShape_class = cls; se::ScriptEngine::getInstance()->clearException(); return true; } -se::Class* __jsb_cc_physics_ICapsuleShape_class = nullptr; -se::Object* __jsb_cc_physics_ICapsuleShape_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_physics_ICapsuleShape) +se::Class* __jsb_cc_physics_ConeShape_class = nullptr; +se::Object* __jsb_cc_physics_ConeShape_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_physics_ConeShape) + +// js_ctor +static bool js_new_cc_physics_ConeShape(se::State& s) // NOLINT(readability-identifier-naming) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + + cc::physics::ConeShape *result; + result = (cc::physics::ConeShape *)new cc::physics::ConeShape(); + + + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); + return true; +} +SE_BIND_CTOR(js_new_cc_physics_ConeShape, __jsb_cc_physics_ConeShape_class, js_delete_cc_physics_ConeShape) -static bool js_delete_cc_physics_ICapsuleShape(se::State& s) +static bool js_delete_cc_physics_ConeShape(se::State& s) { // js_dtoroverride return true; } -SE_BIND_FINALIZE_FUNC(js_delete_cc_physics_ICapsuleShape) +SE_BIND_FINALIZE_FUNC(js_delete_cc_physics_ConeShape) -static bool js_cc_physics_ICapsuleShape_setRadius(se::State& s) +static bool js_cc_physics_ConeShape_initialize(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::ICapsuleShape *arg1 = (cc::physics::ICapsuleShape *) NULL ; - float arg2 ; + cc::physics::ConeShape *arg1 = (cc::physics::ConeShape *) NULL ; + cc::Node *arg2 = (cc::Node *) NULL ; if(argc != 1) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "ICapsuleShape_setRadius,2,SWIGTYPE_float"); - (arg1)->setRadius(arg2); + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "ConeShape_initialize,2,SWIGTYPE_p_cc__Node"); + (arg1)->initialize(arg2); return true; } -SE_BIND_FUNC(js_cc_physics_ICapsuleShape_setRadius) +SE_BIND_FUNC(js_cc_physics_ConeShape_initialize) -static bool js_cc_physics_ICapsuleShape_setCylinderHeight(se::State& s) +static bool js_cc_physics_ConeShape_onEnable(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::ICapsuleShape *arg1 = (cc::physics::ICapsuleShape *) NULL ; - float arg2 ; + cc::physics::ConeShape *arg1 = (cc::physics::ConeShape *) NULL ; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "ICapsuleShape_setCylinderHeight,2,SWIGTYPE_float"); - (arg1)->setCylinderHeight(arg2); + (arg1)->onEnable(); return true; } -SE_BIND_FUNC(js_cc_physics_ICapsuleShape_setCylinderHeight) +SE_BIND_FUNC(js_cc_physics_ConeShape_onEnable) -static bool js_cc_physics_ICapsuleShape_setDirection(se::State& s) +static bool js_cc_physics_ConeShape_onDisable(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::ICapsuleShape *arg1 = (cc::physics::ICapsuleShape *) NULL ; - cc::physics::EAxisDirection arg2 ; - int32_t temp2 ; + cc::physics::ConeShape *arg1 = (cc::physics::ConeShape *) NULL ; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) enum SWIGTYPE (int32_t temp2) - ok &= sevalue_to_native(args[0], &temp2); - SE_PRECONDITION2(ok, false, "ICapsuleShape_setDirection,2,SWIGTYPE_cc__physics__EAxisDirection"); - arg2 = (cc::physics::EAxisDirection)temp2; - (arg1)->setDirection(arg2); + (arg1)->onDisable(); + + + return true; +} +SE_BIND_FUNC(js_cc_physics_ConeShape_onDisable) + +static bool js_cc_physics_ConeShape_onDestroy(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::ConeShape *arg1 = (cc::physics::ConeShape *) NULL ; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + (arg1)->onDestroy(); return true; } -SE_BIND_FUNC(js_cc_physics_ICapsuleShape_setDirection) +SE_BIND_FUNC(js_cc_physics_ConeShape_onDestroy) -bool js_register_cc_physics_ICapsuleShape(se::Object* obj) { - auto* cls = se::Class::create("ICapsuleShape", obj, __jsb_cc_physics_IBaseShape_proto, nullptr); +static bool js_cc_physics_ConeShape_setMaterial(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::ConeShape *arg1 = (cc::physics::ConeShape *) NULL ; + uint16_t arg2 ; + float arg3 ; + float arg4 ; + float arg5 ; + uint8_t arg6 ; + uint8_t arg7 ; + if(argc != 6) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 6); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - cls->defineFunction("setRadius", _SE(js_cc_physics_ICapsuleShape_setRadius)); - cls->defineFunction("setCylinderHeight", _SE(js_cc_physics_ICapsuleShape_setCylinderHeight)); - cls->defineFunction("setDirection", _SE(js_cc_physics_ICapsuleShape_setDirection)); + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "ConeShape_setMaterial,2,SWIGTYPE_uint16_t"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "ConeShape_setMaterial,3,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[2], &arg4, nullptr); + SE_PRECONDITION2(ok, false, "ConeShape_setMaterial,4,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[3], &arg5, nullptr); + SE_PRECONDITION2(ok, false, "ConeShape_setMaterial,5,SWIGTYPE_float"); + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[4], &arg6, s.thisObject()); + SE_PRECONDITION2(ok, false, "ConeShape_setMaterial,6,SWIGTYPE_uint8_t"); - cls->defineFinalizeFunction(_SE(js_delete_cc_physics_ICapsuleShape)); + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[5], &arg7, s.thisObject()); + SE_PRECONDITION2(ok, false, "ConeShape_setMaterial,7,SWIGTYPE_uint8_t"); + (arg1)->setMaterial(arg2,arg3,arg4,arg5,arg6,arg7); - cls->install(); - JSBClassType::registerClass(cls); - __jsb_cc_physics_ICapsuleShape_proto = cls->getProto(); - __jsb_cc_physics_ICapsuleShape_class = cls; - se::ScriptEngine::getInstance()->clearException(); - return true; -} - - -se::Class* __jsb_cc_physics_ICylinderShape_class = nullptr; -se::Object* __jsb_cc_physics_ICylinderShape_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_physics_ICylinderShape) - -static bool js_delete_cc_physics_ICylinderShape(se::State& s) -{ - // js_dtoroverride return true; } -SE_BIND_FINALIZE_FUNC(js_delete_cc_physics_ICylinderShape) +SE_BIND_FUNC(js_cc_physics_ConeShape_setMaterial) -static bool js_cc_physics_ICylinderShape_setConvex(se::State& s) +static bool js_cc_physics_ConeShape_setAsTrigger(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::ICylinderShape *arg1 = (cc::physics::ICylinderShape *) NULL ; - uint32_t arg2 ; + cc::physics::ConeShape *arg1 = (cc::physics::ConeShape *) NULL ; + bool arg2 ; if(argc != 1) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "ICylinderShape_setConvex,2,SWIGTYPE_uint32_t"); - - (arg1)->setConvex(arg2); + // %typemap(in) bool + ok &= sevalue_to_native(args[0], &arg2); + SE_PRECONDITION2(ok, false, "ConeShape_setAsTrigger,2,SWIGTYPE_bool"); + (arg1)->setAsTrigger(arg2); return true; } -SE_BIND_FUNC(js_cc_physics_ICylinderShape_setConvex) +SE_BIND_FUNC(js_cc_physics_ConeShape_setAsTrigger) -static bool js_cc_physics_ICylinderShape_setCylinder(se::State& s) +static bool js_cc_physics_ConeShape_setCenter(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::ICylinderShape *arg1 = (cc::physics::ICylinderShape *) NULL ; + cc::physics::ConeShape *arg1 = (cc::physics::ConeShape *) NULL ; float arg2 ; float arg3 ; - cc::physics::EAxisDirection arg4 ; - int32_t temp4 ; + float arg4 ; if(argc != 3) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) int, short, long, signed char, float, double ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "ICylinderShape_setCylinder,2,SWIGTYPE_float"); + SE_PRECONDITION2(ok, false, "ConeShape_setCenter,2,SWIGTYPE_float"); // %typemap(in) int, short, long, signed char, float, double ok &= sevalue_to_native(args[1], &arg3, nullptr); - SE_PRECONDITION2(ok, false, "ICylinderShape_setCylinder,3,SWIGTYPE_float"); - // %typemap(in) enum SWIGTYPE (int32_t temp4) - ok &= sevalue_to_native(args[2], &temp4); - SE_PRECONDITION2(ok, false, "ICylinderShape_setCylinder,4,SWIGTYPE_cc__physics__EAxisDirection"); - arg4 = (cc::physics::EAxisDirection)temp4; - (arg1)->setCylinder(arg2,arg3,arg4); + SE_PRECONDITION2(ok, false, "ConeShape_setCenter,3,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[2], &arg4, nullptr); + SE_PRECONDITION2(ok, false, "ConeShape_setCenter,4,SWIGTYPE_float"); + (arg1)->setCenter(arg2,arg3,arg4); return true; } -SE_BIND_FUNC(js_cc_physics_ICylinderShape_setCylinder) +SE_BIND_FUNC(js_cc_physics_ConeShape_setCenter) -bool js_register_cc_physics_ICylinderShape(se::Object* obj) { - auto* cls = se::Class::create("ICylinderShape", obj, __jsb_cc_physics_IBaseShape_proto, nullptr); - - - cls->defineFunction("setConvex", _SE(js_cc_physics_ICylinderShape_setConvex)); - cls->defineFunction("setCylinder", _SE(js_cc_physics_ICylinderShape_setCylinder)); - - - +static bool js_cc_physics_ConeShape_updateEventListener(se::State& s) +{ + // js_function - cls->defineFinalizeFunction(_SE(js_delete_cc_physics_ICylinderShape)); + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::ConeShape *arg1 = (cc::physics::ConeShape *) NULL ; + cc::physics::EShapeFilterFlag arg2 ; + int32_t temp2 ; + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) enum SWIGTYPE (int32_t temp2) + ok &= sevalue_to_native(args[0], &temp2); + SE_PRECONDITION2(ok, false, "ConeShape_updateEventListener,2,SWIGTYPE_cc__physics__EShapeFilterFlag"); + arg2 = (cc::physics::EShapeFilterFlag)temp2; + (arg1)->updateEventListener(arg2); - cls->install(); - JSBClassType::registerClass(cls); - __jsb_cc_physics_ICylinderShape_proto = cls->getProto(); - __jsb_cc_physics_ICylinderShape_class = cls; - se::ScriptEngine::getInstance()->clearException(); - return true; -} - - -se::Class* __jsb_cc_physics_IConeShape_class = nullptr; -se::Object* __jsb_cc_physics_IConeShape_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_physics_IConeShape) - -static bool js_delete_cc_physics_IConeShape(se::State& s) -{ - // js_dtoroverride return true; } -SE_BIND_FINALIZE_FUNC(js_delete_cc_physics_IConeShape) +SE_BIND_FUNC(js_cc_physics_ConeShape_updateEventListener) -static bool js_cc_physics_IConeShape_setConvex(se::State& s) +static bool js_cc_physics_ConeShape_getAABB(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IConeShape *arg1 = (cc::physics::IConeShape *) NULL ; - uint32_t arg2 ; + cc::physics::ConeShape *arg1 = (cc::physics::ConeShape *) NULL ; + cc::geometry::AABB *result = 0 ; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "IConeShape_setConvex,2,SWIGTYPE_uint32_t"); - - (arg1)->setConvex(arg2); + result = (cc::geometry::AABB *) &(arg1)->getAABB(); + // %typemap(out) SWIGTYPE& + ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "ConeShape_getAABB, Error processing arguments"); + SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); return true; } -SE_BIND_FUNC(js_cc_physics_IConeShape_setConvex) +SE_BIND_FUNC(js_cc_physics_ConeShape_getAABB) -static bool js_cc_physics_IConeShape_setCone(se::State& s) +static bool js_cc_physics_ConeShape_getBoundingSphere(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IConeShape *arg1 = (cc::physics::IConeShape *) NULL ; - float arg2 ; - float arg3 ; - cc::physics::EAxisDirection arg4 ; - int32_t temp4 ; + cc::physics::ConeShape *arg1 = (cc::physics::ConeShape *) NULL ; + cc::geometry::Sphere *result = 0 ; - if(argc != 3) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "IConeShape_setCone,2,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[1], &arg3, nullptr); - SE_PRECONDITION2(ok, false, "IConeShape_setCone,3,SWIGTYPE_float"); - // %typemap(in) enum SWIGTYPE (int32_t temp4) - ok &= sevalue_to_native(args[2], &temp4); - SE_PRECONDITION2(ok, false, "IConeShape_setCone,4,SWIGTYPE_cc__physics__EAxisDirection"); - arg4 = (cc::physics::EAxisDirection)temp4; - (arg1)->setCone(arg2,arg3,arg4); + result = (cc::geometry::Sphere *) &(arg1)->getBoundingSphere(); + // %typemap(out) SWIGTYPE& + ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "ConeShape_getBoundingSphere, Error processing arguments"); + SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); return true; } -SE_BIND_FUNC(js_cc_physics_IConeShape_setCone) +SE_BIND_FUNC(js_cc_physics_ConeShape_getBoundingSphere) -bool js_register_cc_physics_IConeShape(se::Object* obj) { - auto* cls = se::Class::create("IConeShape", obj, __jsb_cc_physics_IBaseShape_proto, nullptr); - - - cls->defineFunction("setConvex", _SE(js_cc_physics_IConeShape_setConvex)); - cls->defineFunction("setCone", _SE(js_cc_physics_IConeShape_setCone)); - - +static bool js_cc_physics_ConeShape_getGroup(se::State& s) +{ + // js_function + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::ConeShape *arg1 = (cc::physics::ConeShape *) NULL ; + uint32_t result; - cls->defineFinalizeFunction(_SE(js_delete_cc_physics_IConeShape)); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (arg1)->getGroup(); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "ConeShape_getGroup, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - cls->install(); - JSBClassType::registerClass(cls); - __jsb_cc_physics_IConeShape_proto = cls->getProto(); - __jsb_cc_physics_IConeShape_class = cls; - se::ScriptEngine::getInstance()->clearException(); - return true; -} - - -se::Class* __jsb_cc_physics_IPlaneShape_class = nullptr; -se::Object* __jsb_cc_physics_IPlaneShape_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_physics_IPlaneShape) - -static bool js_delete_cc_physics_IPlaneShape(se::State& s) -{ - // js_dtoroverride return true; } -SE_BIND_FINALIZE_FUNC(js_delete_cc_physics_IPlaneShape) +SE_BIND_FUNC(js_cc_physics_ConeShape_getGroup) -static bool js_cc_physics_IPlaneShape_setConstant(se::State& s) +static bool js_cc_physics_ConeShape_setGroup(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IPlaneShape *arg1 = (cc::physics::IPlaneShape *) NULL ; - float arg2 ; + cc::physics::ConeShape *arg1 = (cc::physics::ConeShape *) NULL ; + uint32_t arg2 ; if(argc != 1) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "IPlaneShape_setConstant,2,SWIGTYPE_float"); - (arg1)->setConstant(arg2); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "ConeShape_setGroup,2,SWIGTYPE_uint32_t"); + + (arg1)->setGroup(arg2); return true; } -SE_BIND_FUNC(js_cc_physics_IPlaneShape_setConstant) +SE_BIND_FUNC(js_cc_physics_ConeShape_setGroup) -static bool js_cc_physics_IPlaneShape_setNormal(se::State& s) +static bool js_cc_physics_ConeShape_getMask(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IPlaneShape *arg1 = (cc::physics::IPlaneShape *) NULL ; - float arg2 ; - float arg3 ; - float arg4 ; + cc::physics::ConeShape *arg1 = (cc::physics::ConeShape *) NULL ; + uint32_t result; - if(argc != 3) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "IPlaneShape_setNormal,2,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[1], &arg3, nullptr); - SE_PRECONDITION2(ok, false, "IPlaneShape_setNormal,3,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[2], &arg4, nullptr); - SE_PRECONDITION2(ok, false, "IPlaneShape_setNormal,4,SWIGTYPE_float"); - (arg1)->setNormal(arg2,arg3,arg4); - - - return true; -} -SE_BIND_FUNC(js_cc_physics_IPlaneShape_setNormal) - -bool js_register_cc_physics_IPlaneShape(se::Object* obj) { - auto* cls = se::Class::create("IPlaneShape", obj, __jsb_cc_physics_IBaseShape_proto, nullptr); - - - cls->defineFunction("setConstant", _SE(js_cc_physics_IPlaneShape_setConstant)); - cls->defineFunction("setNormal", _SE(js_cc_physics_IPlaneShape_setNormal)); - - - - - cls->defineFinalizeFunction(_SE(js_delete_cc_physics_IPlaneShape)); + result = (arg1)->getMask(); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "ConeShape_getMask, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - cls->install(); - JSBClassType::registerClass(cls); - __jsb_cc_physics_IPlaneShape_proto = cls->getProto(); - __jsb_cc_physics_IPlaneShape_class = cls; - se::ScriptEngine::getInstance()->clearException(); - return true; -} - - -se::Class* __jsb_cc_physics_ITrimeshShape_class = nullptr; -se::Object* __jsb_cc_physics_ITrimeshShape_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_physics_ITrimeshShape) - -static bool js_delete_cc_physics_ITrimeshShape(se::State& s) -{ - // js_dtoroverride return true; } -SE_BIND_FINALIZE_FUNC(js_delete_cc_physics_ITrimeshShape) +SE_BIND_FUNC(js_cc_physics_ConeShape_getMask) -static bool js_cc_physics_ITrimeshShape_setMesh(se::State& s) +static bool js_cc_physics_ConeShape_setMask(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::ITrimeshShape *arg1 = (cc::physics::ITrimeshShape *) NULL ; + cc::physics::ConeShape *arg1 = (cc::physics::ConeShape *) NULL ; uint32_t arg2 ; if(argc != 1) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE value in ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "ITrimeshShape_setMesh,2,SWIGTYPE_uint32_t"); + SE_PRECONDITION2(ok, false, "ConeShape_setMask,2,SWIGTYPE_uint32_t"); - (arg1)->setMesh(arg2); + (arg1)->setMask(arg2); return true; } -SE_BIND_FUNC(js_cc_physics_ITrimeshShape_setMesh) +SE_BIND_FUNC(js_cc_physics_ConeShape_setMask) -static bool js_cc_physics_ITrimeshShape_useConvex(se::State& s) +static bool js_cc_physics_ConeShape_getObjectID(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::ITrimeshShape *arg1 = (cc::physics::ITrimeshShape *) NULL ; - bool arg2 ; + cc::physics::ConeShape *arg1 = (cc::physics::ConeShape *) NULL ; + uint32_t result; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) bool - ok &= sevalue_to_native(args[0], &arg2); - SE_PRECONDITION2(ok, false, "ITrimeshShape_useConvex,2,SWIGTYPE_bool"); - (arg1)->useConvex(arg2); + result = ((cc::physics::ConeShape const *)arg1)->getObjectID(); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "ConeShape_getObjectID, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); + return true; } -SE_BIND_FUNC(js_cc_physics_ITrimeshShape_useConvex) +SE_BIND_FUNC(js_cc_physics_ConeShape_getObjectID) -bool js_register_cc_physics_ITrimeshShape(se::Object* obj) { - auto* cls = se::Class::create("ITrimeshShape", obj, __jsb_cc_physics_IBaseShape_proto, nullptr); - - - cls->defineFunction("setMesh", _SE(js_cc_physics_ITrimeshShape_setMesh)); - cls->defineFunction("useConvex", _SE(js_cc_physics_ITrimeshShape_useConvex)); - +static bool js_cc_physics_ConeShape_setConvex(se::State& s) +{ + // js_function + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::ConeShape *arg1 = (cc::physics::ConeShape *) NULL ; + uint32_t arg2 ; + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - cls->defineFinalizeFunction(_SE(js_delete_cc_physics_ITrimeshShape)); + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "ConeShape_setConvex,2,SWIGTYPE_uint32_t"); + (arg1)->setConvex(arg2); - cls->install(); - JSBClassType::registerClass(cls); - __jsb_cc_physics_ITrimeshShape_proto = cls->getProto(); - __jsb_cc_physics_ITrimeshShape_class = cls; - se::ScriptEngine::getInstance()->clearException(); return true; } +SE_BIND_FUNC(js_cc_physics_ConeShape_setConvex) - -se::Class* __jsb_cc_physics_ITerrainShape_class = nullptr; -se::Object* __jsb_cc_physics_ITerrainShape_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_physics_ITerrainShape) - -static bool js_cc_physics_ITerrainShape_setTerrain(se::State& s) +static bool js_cc_physics_ConeShape_setCone(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::ITerrainShape *arg1 = (cc::physics::ITerrainShape *) NULL ; - uint32_t arg2 ; + cc::physics::ConeShape *arg1 = (cc::physics::ConeShape *) NULL ; + float arg2 ; float arg3 ; - float arg4 ; - float arg5 ; + cc::physics::EAxisDirection arg4 ; + int32_t temp4 ; - if(argc != 4) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 4); + if(argc != 3) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "ITerrainShape_setTerrain,2,SWIGTYPE_uint32_t"); - - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[1], &arg3, nullptr); - SE_PRECONDITION2(ok, false, "ITerrainShape_setTerrain,3,SWIGTYPE_float"); // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[2], &arg4, nullptr); - SE_PRECONDITION2(ok, false, "ITerrainShape_setTerrain,4,SWIGTYPE_float"); + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "ConeShape_setCone,2,SWIGTYPE_float"); // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[3], &arg5, nullptr); - SE_PRECONDITION2(ok, false, "ITerrainShape_setTerrain,5,SWIGTYPE_float"); - (arg1)->setTerrain(arg2,arg3,arg4,arg5); + ok &= sevalue_to_native(args[1], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "ConeShape_setCone,3,SWIGTYPE_float"); + // %typemap(in) enum SWIGTYPE (int32_t temp4) + ok &= sevalue_to_native(args[2], &temp4); + SE_PRECONDITION2(ok, false, "ConeShape_setCone,4,SWIGTYPE_cc__physics__EAxisDirection"); + arg4 = (cc::physics::EAxisDirection)temp4; + (arg1)->setCone(arg2,arg3,arg4); return true; } -SE_BIND_FUNC(js_cc_physics_ITerrainShape_setTerrain) - -static bool js_delete_cc_physics_ITerrainShape(se::State& s) -{ - // js_dtoroverride - return true; -} -SE_BIND_FINALIZE_FUNC(js_delete_cc_physics_ITerrainShape) +SE_BIND_FUNC(js_cc_physics_ConeShape_setCone) -bool js_register_cc_physics_ITerrainShape(se::Object* obj) { - auto* cls = se::Class::create("ITerrainShape", obj, __jsb_cc_physics_IBaseShape_proto, nullptr); +bool js_register_cc_physics_ConeShape(se::Object* obj) { + auto* cls = se::Class::create("ConeShape", obj, nullptr, _SE(js_new_cc_physics_ConeShape)); - cls->defineFunction("setTerrain", _SE(js_cc_physics_ITerrainShape_setTerrain)); + cls->defineFunction("initialize", _SE(js_cc_physics_ConeShape_initialize)); + cls->defineFunction("onEnable", _SE(js_cc_physics_ConeShape_onEnable)); + cls->defineFunction("onDisable", _SE(js_cc_physics_ConeShape_onDisable)); + cls->defineFunction("onDestroy", _SE(js_cc_physics_ConeShape_onDestroy)); + cls->defineFunction("setMaterial", _SE(js_cc_physics_ConeShape_setMaterial)); + cls->defineFunction("setAsTrigger", _SE(js_cc_physics_ConeShape_setAsTrigger)); + cls->defineFunction("setCenter", _SE(js_cc_physics_ConeShape_setCenter)); + cls->defineFunction("updateEventListener", _SE(js_cc_physics_ConeShape_updateEventListener)); + cls->defineFunction("getAABB", _SE(js_cc_physics_ConeShape_getAABB)); + cls->defineFunction("getBoundingSphere", _SE(js_cc_physics_ConeShape_getBoundingSphere)); + cls->defineFunction("getGroup", _SE(js_cc_physics_ConeShape_getGroup)); + cls->defineFunction("setGroup", _SE(js_cc_physics_ConeShape_setGroup)); + cls->defineFunction("getMask", _SE(js_cc_physics_ConeShape_getMask)); + cls->defineFunction("setMask", _SE(js_cc_physics_ConeShape_setMask)); + cls->defineFunction("getObjectID", _SE(js_cc_physics_ConeShape_getObjectID)); + cls->defineFunction("setConvex", _SE(js_cc_physics_ConeShape_setConvex)); + cls->defineFunction("setCone", _SE(js_cc_physics_ConeShape_setCone)); - cls->defineFinalizeFunction(_SE(js_delete_cc_physics_ITerrainShape)); + cls->defineFinalizeFunction(_SE(js_delete_cc_physics_ConeShape)); cls->install(); - JSBClassType::registerClass(cls); + JSBClassType::registerClass(cls); - __jsb_cc_physics_ITerrainShape_proto = cls->getProto(); - __jsb_cc_physics_ITerrainShape_class = cls; + __jsb_cc_physics_ConeShape_proto = cls->getProto(); + __jsb_cc_physics_ConeShape_class = cls; se::ScriptEngine::getInstance()->clearException(); return true; } -se::Class* __jsb_cc_physics_IBaseJoint_class = nullptr; -se::Object* __jsb_cc_physics_IBaseJoint_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_physics_IBaseJoint) +se::Class* __jsb_cc_physics_TerrainShape_class = nullptr; +se::Object* __jsb_cc_physics_TerrainShape_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_physics_TerrainShape) + +// js_ctor +static bool js_new_cc_physics_TerrainShape(se::State& s) // NOLINT(readability-identifier-naming) +{ + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + + cc::physics::TerrainShape *result; + result = (cc::physics::TerrainShape *)new cc::physics::TerrainShape(); + + + auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); + s.thisObject()->setPrivateObject(ptr); + return true; +} +SE_BIND_CTOR(js_new_cc_physics_TerrainShape, __jsb_cc_physics_TerrainShape_class, js_delete_cc_physics_TerrainShape) -static bool js_delete_cc_physics_IBaseJoint(se::State& s) +static bool js_delete_cc_physics_TerrainShape(se::State& s) { // js_dtoroverride return true; } -SE_BIND_FINALIZE_FUNC(js_delete_cc_physics_IBaseJoint) +SE_BIND_FINALIZE_FUNC(js_delete_cc_physics_TerrainShape) -static bool js_cc_physics_IBaseJoint_initialize(se::State& s) +static bool js_cc_physics_TerrainShape_initialize(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IBaseJoint *arg1 = (cc::physics::IBaseJoint *) NULL ; + cc::physics::TerrainShape *arg1 = (cc::physics::TerrainShape *) NULL ; cc::Node *arg2 = (cc::Node *) NULL ; if(argc != 1) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) SWIGTYPE* ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "IBaseJoint_initialize,2,SWIGTYPE_p_cc__Node"); + SE_PRECONDITION2(ok, false, "TerrainShape_initialize,2,SWIGTYPE_p_cc__Node"); (arg1)->initialize(arg2); return true; } -SE_BIND_FUNC(js_cc_physics_IBaseJoint_initialize) +SE_BIND_FUNC(js_cc_physics_TerrainShape_initialize) -static bool js_cc_physics_IBaseJoint_setEnableCollision(se::State& s) +static bool js_cc_physics_TerrainShape_onEnable(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IBaseJoint *arg1 = (cc::physics::IBaseJoint *) NULL ; - bool arg2 ; + cc::physics::TerrainShape *arg1 = (cc::physics::TerrainShape *) NULL ; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) bool - ok &= sevalue_to_native(args[0], &arg2); - SE_PRECONDITION2(ok, false, "IBaseJoint_setEnableCollision,2,SWIGTYPE_bool"); - (arg1)->setEnableCollision(arg2); + (arg1)->onEnable(); return true; } -SE_BIND_FUNC(js_cc_physics_IBaseJoint_setEnableCollision) +SE_BIND_FUNC(js_cc_physics_TerrainShape_onEnable) -static bool js_cc_physics_IBaseJoint_setConnectedBody(se::State& s) +static bool js_cc_physics_TerrainShape_onDisable(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IBaseJoint *arg1 = (cc::physics::IBaseJoint *) NULL ; - uint32_t arg2 ; + cc::physics::TerrainShape *arg1 = (cc::physics::TerrainShape *) NULL ; - if(argc != 1) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); - SE_PRECONDITION2(ok, false, "IBaseJoint_setConnectedBody,2,SWIGTYPE_uint32_t"); - - (arg1)->setConnectedBody(arg2); + (arg1)->onDisable(); return true; } -SE_BIND_FUNC(js_cc_physics_IBaseJoint_setConnectedBody) +SE_BIND_FUNC(js_cc_physics_TerrainShape_onDisable) -static bool js_cc_physics_IBaseJoint_getObjectID(se::State& s) +static bool js_cc_physics_TerrainShape_onDestroy(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IBaseJoint *arg1 = (cc::physics::IBaseJoint *) NULL ; - uint32_t result; + cc::physics::TerrainShape *arg1 = (cc::physics::TerrainShape *) NULL ; if(argc != 0) { SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - result = ((cc::physics::IBaseJoint const *)arg1)->getObjectID(); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "IBaseJoint_getObjectID, Error processing arguments"); - SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - - - - return true; -} -SE_BIND_FUNC(js_cc_physics_IBaseJoint_getObjectID) - -bool js_register_cc_physics_IBaseJoint(se::Object* obj) { - auto* cls = se::Class::create("IBaseJoint", obj, __jsb_cc_physics_ILifecycle_proto, nullptr); - - - cls->defineFunction("initialize", _SE(js_cc_physics_IBaseJoint_initialize)); - cls->defineFunction("setEnableCollision", _SE(js_cc_physics_IBaseJoint_setEnableCollision)); - cls->defineFunction("setConnectedBody", _SE(js_cc_physics_IBaseJoint_setConnectedBody)); - cls->defineFunction("getObjectID", _SE(js_cc_physics_IBaseJoint_getObjectID)); - - - - - cls->defineFinalizeFunction(_SE(js_delete_cc_physics_IBaseJoint)); - + (arg1)->onDestroy(); - cls->install(); - JSBClassType::registerClass(cls); - __jsb_cc_physics_IBaseJoint_proto = cls->getProto(); - __jsb_cc_physics_IBaseJoint_class = cls; - se::ScriptEngine::getInstance()->clearException(); - return true; -} - - -se::Class* __jsb_cc_physics_IDistanceJoint_class = nullptr; -se::Object* __jsb_cc_physics_IDistanceJoint_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_physics_IDistanceJoint) - -static bool js_delete_cc_physics_IDistanceJoint(se::State& s) -{ - // js_dtoroverride return true; } -SE_BIND_FINALIZE_FUNC(js_delete_cc_physics_IDistanceJoint) +SE_BIND_FUNC(js_cc_physics_TerrainShape_onDestroy) -static bool js_cc_physics_IDistanceJoint_setPivotA(se::State& s) +static bool js_cc_physics_TerrainShape_setMaterial(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IDistanceJoint *arg1 = (cc::physics::IDistanceJoint *) NULL ; - float arg2 ; + cc::physics::TerrainShape *arg1 = (cc::physics::TerrainShape *) NULL ; + uint16_t arg2 ; float arg3 ; float arg4 ; + float arg5 ; + uint8_t arg6 ; + uint8_t arg7 ; - if(argc != 3) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); + if(argc != 6) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 6); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "IDistanceJoint_setPivotA,2,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[1], &arg3, nullptr); - SE_PRECONDITION2(ok, false, "IDistanceJoint_setPivotA,3,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[2], &arg4, nullptr); - SE_PRECONDITION2(ok, false, "IDistanceJoint_setPivotA,4,SWIGTYPE_float"); - (arg1)->setPivotA(arg2,arg3,arg4); - - - return true; -} -SE_BIND_FUNC(js_cc_physics_IDistanceJoint_setPivotA) - -static bool js_cc_physics_IDistanceJoint_setPivotB(se::State& s) -{ - // js_function - CC_UNUSED bool ok = true; - const auto& args = s.args(); - size_t argc = args.size(); - cc::physics::IDistanceJoint *arg1 = (cc::physics::IDistanceJoint *) NULL ; - float arg2 ; - float arg3 ; - float arg4 ; + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "TerrainShape_setMaterial,2,SWIGTYPE_uint16_t"); - if(argc != 3) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); - return false; - } - arg1 = SE_THIS_OBJECT(s); - SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "IDistanceJoint_setPivotB,2,SWIGTYPE_float"); // %typemap(in) int, short, long, signed char, float, double ok &= sevalue_to_native(args[1], &arg3, nullptr); - SE_PRECONDITION2(ok, false, "IDistanceJoint_setPivotB,3,SWIGTYPE_float"); + SE_PRECONDITION2(ok, false, "TerrainShape_setMaterial,3,SWIGTYPE_float"); // %typemap(in) int, short, long, signed char, float, double ok &= sevalue_to_native(args[2], &arg4, nullptr); - SE_PRECONDITION2(ok, false, "IDistanceJoint_setPivotB,4,SWIGTYPE_float"); - (arg1)->setPivotB(arg2,arg3,arg4); - - - return true; -} -SE_BIND_FUNC(js_cc_physics_IDistanceJoint_setPivotB) - -bool js_register_cc_physics_IDistanceJoint(se::Object* obj) { - auto* cls = se::Class::create("IDistanceJoint", obj, __jsb_cc_physics_IBaseJoint_proto, nullptr); - - - cls->defineFunction("setPivotA", _SE(js_cc_physics_IDistanceJoint_setPivotA)); - cls->defineFunction("setPivotB", _SE(js_cc_physics_IDistanceJoint_setPivotB)); - + SE_PRECONDITION2(ok, false, "TerrainShape_setMaterial,4,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[3], &arg5, nullptr); + SE_PRECONDITION2(ok, false, "TerrainShape_setMaterial,5,SWIGTYPE_float"); + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[4], &arg6, s.thisObject()); + SE_PRECONDITION2(ok, false, "TerrainShape_setMaterial,6,SWIGTYPE_uint8_t"); - cls->defineFinalizeFunction(_SE(js_delete_cc_physics_IDistanceJoint)); + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[5], &arg7, s.thisObject()); + SE_PRECONDITION2(ok, false, "TerrainShape_setMaterial,7,SWIGTYPE_uint8_t"); + (arg1)->setMaterial(arg2,arg3,arg4,arg5,arg6,arg7); - cls->install(); - JSBClassType::registerClass(cls); - __jsb_cc_physics_IDistanceJoint_proto = cls->getProto(); - __jsb_cc_physics_IDistanceJoint_class = cls; - se::ScriptEngine::getInstance()->clearException(); - return true; -} - - -se::Class* __jsb_cc_physics_IRevoluteJoint_class = nullptr; -se::Object* __jsb_cc_physics_IRevoluteJoint_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_physics_IRevoluteJoint) - -static bool js_delete_cc_physics_IRevoluteJoint(se::State& s) -{ - // js_dtoroverride return true; } -SE_BIND_FINALIZE_FUNC(js_delete_cc_physics_IRevoluteJoint) +SE_BIND_FUNC(js_cc_physics_TerrainShape_setMaterial) -static bool js_cc_physics_IRevoluteJoint_setPivotA(se::State& s) +static bool js_cc_physics_TerrainShape_setAsTrigger(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IRevoluteJoint *arg1 = (cc::physics::IRevoluteJoint *) NULL ; - float arg2 ; - float arg3 ; - float arg4 ; + cc::physics::TerrainShape *arg1 = (cc::physics::TerrainShape *) NULL ; + bool arg2 ; - if(argc != 3) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "IRevoluteJoint_setPivotA,2,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[1], &arg3, nullptr); - SE_PRECONDITION2(ok, false, "IRevoluteJoint_setPivotA,3,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[2], &arg4, nullptr); - SE_PRECONDITION2(ok, false, "IRevoluteJoint_setPivotA,4,SWIGTYPE_float"); - (arg1)->setPivotA(arg2,arg3,arg4); + // %typemap(in) bool + ok &= sevalue_to_native(args[0], &arg2); + SE_PRECONDITION2(ok, false, "TerrainShape_setAsTrigger,2,SWIGTYPE_bool"); + (arg1)->setAsTrigger(arg2); return true; } -SE_BIND_FUNC(js_cc_physics_IRevoluteJoint_setPivotA) +SE_BIND_FUNC(js_cc_physics_TerrainShape_setAsTrigger) -static bool js_cc_physics_IRevoluteJoint_setPivotB(se::State& s) +static bool js_cc_physics_TerrainShape_setCenter(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IRevoluteJoint *arg1 = (cc::physics::IRevoluteJoint *) NULL ; + cc::physics::TerrainShape *arg1 = (cc::physics::TerrainShape *) NULL ; float arg2 ; float arg3 ; float arg4 ; @@ -5146,653 +5907,941 @@ static bool js_cc_physics_IRevoluteJoint_setPivotB(se::State& s) SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); // %typemap(in) int, short, long, signed char, float, double ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "IRevoluteJoint_setPivotB,2,SWIGTYPE_float"); + SE_PRECONDITION2(ok, false, "TerrainShape_setCenter,2,SWIGTYPE_float"); // %typemap(in) int, short, long, signed char, float, double ok &= sevalue_to_native(args[1], &arg3, nullptr); - SE_PRECONDITION2(ok, false, "IRevoluteJoint_setPivotB,3,SWIGTYPE_float"); + SE_PRECONDITION2(ok, false, "TerrainShape_setCenter,3,SWIGTYPE_float"); // %typemap(in) int, short, long, signed char, float, double ok &= sevalue_to_native(args[2], &arg4, nullptr); - SE_PRECONDITION2(ok, false, "IRevoluteJoint_setPivotB,4,SWIGTYPE_float"); - (arg1)->setPivotB(arg2,arg3,arg4); + SE_PRECONDITION2(ok, false, "TerrainShape_setCenter,4,SWIGTYPE_float"); + (arg1)->setCenter(arg2,arg3,arg4); return true; } -SE_BIND_FUNC(js_cc_physics_IRevoluteJoint_setPivotB) +SE_BIND_FUNC(js_cc_physics_TerrainShape_setCenter) -static bool js_cc_physics_IRevoluteJoint_setAxis(se::State& s) +static bool js_cc_physics_TerrainShape_updateEventListener(se::State& s) { // js_function CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::IRevoluteJoint *arg1 = (cc::physics::IRevoluteJoint *) NULL ; - float arg2 ; - float arg3 ; - float arg4 ; + cc::physics::TerrainShape *arg1 = (cc::physics::TerrainShape *) NULL ; + cc::physics::EShapeFilterFlag arg2 ; + int32_t temp2 ; - if(argc != 3) { - SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); return false; } - arg1 = SE_THIS_OBJECT(s); + arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg2, nullptr); - SE_PRECONDITION2(ok, false, "IRevoluteJoint_setAxis,2,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[1], &arg3, nullptr); - SE_PRECONDITION2(ok, false, "IRevoluteJoint_setAxis,3,SWIGTYPE_float"); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[2], &arg4, nullptr); - SE_PRECONDITION2(ok, false, "IRevoluteJoint_setAxis,4,SWIGTYPE_float"); - (arg1)->setAxis(arg2,arg3,arg4); + // %typemap(in) enum SWIGTYPE (int32_t temp2) + ok &= sevalue_to_native(args[0], &temp2); + SE_PRECONDITION2(ok, false, "TerrainShape_updateEventListener,2,SWIGTYPE_cc__physics__EShapeFilterFlag"); + arg2 = (cc::physics::EShapeFilterFlag)temp2; + (arg1)->updateEventListener(arg2); return true; } -SE_BIND_FUNC(js_cc_physics_IRevoluteJoint_setAxis) +SE_BIND_FUNC(js_cc_physics_TerrainShape_updateEventListener) -bool js_register_cc_physics_IRevoluteJoint(se::Object* obj) { - auto* cls = se::Class::create("IRevoluteJoint", obj, __jsb_cc_physics_IBaseJoint_proto, nullptr); - - - cls->defineFunction("setPivotA", _SE(js_cc_physics_IRevoluteJoint_setPivotA)); - cls->defineFunction("setPivotB", _SE(js_cc_physics_IRevoluteJoint_setPivotB)); - cls->defineFunction("setAxis", _SE(js_cc_physics_IRevoluteJoint_setAxis)); - - - +static bool js_cc_physics_TerrainShape_getAABB(se::State& s) +{ + // js_function - cls->defineFinalizeFunction(_SE(js_delete_cc_physics_IRevoluteJoint)); + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::TerrainShape *arg1 = (cc::physics::TerrainShape *) NULL ; + cc::geometry::AABB *result = 0 ; + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (cc::geometry::AABB *) &(arg1)->getAABB(); + // %typemap(out) SWIGTYPE& + ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "TerrainShape_getAABB, Error processing arguments"); + SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); - cls->install(); - JSBClassType::registerClass(cls); - __jsb_cc_physics_IRevoluteJoint_proto = cls->getProto(); - __jsb_cc_physics_IRevoluteJoint_class = cls; - se::ScriptEngine::getInstance()->clearException(); return true; } +SE_BIND_FUNC(js_cc_physics_TerrainShape_getAABB) - -se::Class* __jsb_cc_physics_World_class = nullptr; -se::Object* __jsb_cc_physics_World_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_physics_World) - -// js_ctor -static bool js_new_cc_physics_World(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_physics_TerrainShape_getBoundingSphere(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); + cc::physics::TerrainShape *arg1 = (cc::physics::TerrainShape *) NULL ; + cc::geometry::Sphere *result = 0 ; - cc::physics::World *result; - result = (cc::physics::World *)new cc::physics::World(); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (cc::geometry::Sphere *) &(arg1)->getBoundingSphere(); + // %typemap(out) SWIGTYPE& + ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "TerrainShape_getBoundingSphere, Error processing arguments"); + SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); - auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); - s.thisObject()->setPrivateObject(ptr); return true; } -SE_BIND_CTOR(js_new_cc_physics_World, __jsb_cc_physics_World_class, js_delete_cc_physics_World) +SE_BIND_FUNC(js_cc_physics_TerrainShape_getBoundingSphere) -static bool js_delete_cc_physics_World(se::State& s) +static bool js_cc_physics_TerrainShape_getGroup(se::State& s) { - // js_dtoroverride - return true; -} -SE_BIND_FINALIZE_FUNC(js_delete_cc_physics_World) - -bool js_register_cc_physics_World(se::Object* obj) { - auto* cls = se::Class::create("World", obj, __jsb_cc_physics_IPhysicsWorld_proto, _SE(js_new_cc_physics_World)); - - - - + // js_function + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::TerrainShape *arg1 = (cc::physics::TerrainShape *) NULL ; + uint32_t result; - cls->defineFinalizeFunction(_SE(js_delete_cc_physics_World)); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (arg1)->getGroup(); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "TerrainShape_getGroup, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - cls->install(); - JSBClassType::registerClass(cls); - __jsb_cc_physics_World_proto = cls->getProto(); - __jsb_cc_physics_World_class = cls; - se::ScriptEngine::getInstance()->clearException(); return true; } +SE_BIND_FUNC(js_cc_physics_TerrainShape_getGroup) - -se::Class* __jsb_cc_physics_RigidBody_class = nullptr; -se::Object* __jsb_cc_physics_RigidBody_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_physics_RigidBody) - -// js_ctor -static bool js_new_cc_physics_RigidBody(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_physics_TerrainShape_setGroup(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); + cc::physics::TerrainShape *arg1 = (cc::physics::TerrainShape *) NULL ; + uint32_t arg2 ; - cc::physics::RigidBody *result; - result = (cc::physics::RigidBody *)new cc::physics::RigidBody(); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "TerrainShape_setGroup,2,SWIGTYPE_uint32_t"); + + (arg1)->setGroup(arg2); - auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); - s.thisObject()->setPrivateObject(ptr); return true; } -SE_BIND_CTOR(js_new_cc_physics_RigidBody, __jsb_cc_physics_RigidBody_class, js_delete_cc_physics_RigidBody) +SE_BIND_FUNC(js_cc_physics_TerrainShape_setGroup) -static bool js_delete_cc_physics_RigidBody(se::State& s) +static bool js_cc_physics_TerrainShape_getMask(se::State& s) { - // js_dtoroverride - return true; -} -SE_BIND_FINALIZE_FUNC(js_delete_cc_physics_RigidBody) - -bool js_register_cc_physics_RigidBody(se::Object* obj) { - auto* cls = se::Class::create("RigidBody", obj, __jsb_cc_physics_IRigidBody_proto, _SE(js_new_cc_physics_RigidBody)); - - - - + // js_function + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::TerrainShape *arg1 = (cc::physics::TerrainShape *) NULL ; + uint32_t result; - cls->defineFinalizeFunction(_SE(js_delete_cc_physics_RigidBody)); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (arg1)->getMask(); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "TerrainShape_getMask, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - cls->install(); - JSBClassType::registerClass(cls); - __jsb_cc_physics_RigidBody_proto = cls->getProto(); - __jsb_cc_physics_RigidBody_class = cls; - se::ScriptEngine::getInstance()->clearException(); return true; } +SE_BIND_FUNC(js_cc_physics_TerrainShape_getMask) - -se::Class* __jsb_cc_physics_SphereShape_class = nullptr; -se::Object* __jsb_cc_physics_SphereShape_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_physics_SphereShape) - -// js_ctor -static bool js_new_cc_physics_SphereShape(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_physics_TerrainShape_setMask(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); + cc::physics::TerrainShape *arg1 = (cc::physics::TerrainShape *) NULL ; + uint32_t arg2 ; - cc::physics::SphereShape *result; - result = (cc::physics::SphereShape *)new cc::physics::SphereShape(); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "TerrainShape_setMask,2,SWIGTYPE_uint32_t"); + + (arg1)->setMask(arg2); - auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); - s.thisObject()->setPrivateObject(ptr); return true; } -SE_BIND_CTOR(js_new_cc_physics_SphereShape, __jsb_cc_physics_SphereShape_class, js_delete_cc_physics_SphereShape) +SE_BIND_FUNC(js_cc_physics_TerrainShape_setMask) -static bool js_delete_cc_physics_SphereShape(se::State& s) +static bool js_cc_physics_TerrainShape_getObjectID(se::State& s) { - // js_dtoroverride - return true; -} -SE_BIND_FINALIZE_FUNC(js_delete_cc_physics_SphereShape) - -bool js_register_cc_physics_SphereShape(se::Object* obj) { - auto* cls = se::Class::create("SphereShape", obj, __jsb_cc_physics_ISphereShape_proto, _SE(js_new_cc_physics_SphereShape)); - - - - + // js_function + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::TerrainShape *arg1 = (cc::physics::TerrainShape *) NULL ; + uint32_t result; - cls->defineFinalizeFunction(_SE(js_delete_cc_physics_SphereShape)); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = ((cc::physics::TerrainShape const *)arg1)->getObjectID(); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "TerrainShape_getObjectID, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - cls->install(); - JSBClassType::registerClass(cls); - __jsb_cc_physics_SphereShape_proto = cls->getProto(); - __jsb_cc_physics_SphereShape_class = cls; - se::ScriptEngine::getInstance()->clearException(); return true; } +SE_BIND_FUNC(js_cc_physics_TerrainShape_getObjectID) - -se::Class* __jsb_cc_physics_BoxShape_class = nullptr; -se::Object* __jsb_cc_physics_BoxShape_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_physics_BoxShape) - -// js_ctor -static bool js_new_cc_physics_BoxShape(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_physics_TerrainShape_setTerrain(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); + cc::physics::TerrainShape *arg1 = (cc::physics::TerrainShape *) NULL ; + uint32_t arg2 ; + float arg3 ; + float arg4 ; + float arg5 ; + + if(argc != 4) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 4); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "TerrainShape_setTerrain,2,SWIGTYPE_uint32_t"); - cc::physics::BoxShape *result; - result = (cc::physics::BoxShape *)new cc::physics::BoxShape(); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "TerrainShape_setTerrain,3,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[2], &arg4, nullptr); + SE_PRECONDITION2(ok, false, "TerrainShape_setTerrain,4,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[3], &arg5, nullptr); + SE_PRECONDITION2(ok, false, "TerrainShape_setTerrain,5,SWIGTYPE_float"); + (arg1)->setTerrain(arg2,arg3,arg4,arg5); - auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); - s.thisObject()->setPrivateObject(ptr); - return true; -} -SE_BIND_CTOR(js_new_cc_physics_BoxShape, __jsb_cc_physics_BoxShape_class, js_delete_cc_physics_BoxShape) - -static bool js_delete_cc_physics_BoxShape(se::State& s) -{ - // js_dtoroverride return true; } -SE_BIND_FINALIZE_FUNC(js_delete_cc_physics_BoxShape) +SE_BIND_FUNC(js_cc_physics_TerrainShape_setTerrain) -bool js_register_cc_physics_BoxShape(se::Object* obj) { - auto* cls = se::Class::create("BoxShape", obj, __jsb_cc_physics_IBoxShape_proto, _SE(js_new_cc_physics_BoxShape)); +bool js_register_cc_physics_TerrainShape(se::Object* obj) { + auto* cls = se::Class::create("TerrainShape", obj, nullptr, _SE(js_new_cc_physics_TerrainShape)); + cls->defineFunction("initialize", _SE(js_cc_physics_TerrainShape_initialize)); + cls->defineFunction("onEnable", _SE(js_cc_physics_TerrainShape_onEnable)); + cls->defineFunction("onDisable", _SE(js_cc_physics_TerrainShape_onDisable)); + cls->defineFunction("onDestroy", _SE(js_cc_physics_TerrainShape_onDestroy)); + cls->defineFunction("setMaterial", _SE(js_cc_physics_TerrainShape_setMaterial)); + cls->defineFunction("setAsTrigger", _SE(js_cc_physics_TerrainShape_setAsTrigger)); + cls->defineFunction("setCenter", _SE(js_cc_physics_TerrainShape_setCenter)); + cls->defineFunction("updateEventListener", _SE(js_cc_physics_TerrainShape_updateEventListener)); + cls->defineFunction("getAABB", _SE(js_cc_physics_TerrainShape_getAABB)); + cls->defineFunction("getBoundingSphere", _SE(js_cc_physics_TerrainShape_getBoundingSphere)); + cls->defineFunction("getGroup", _SE(js_cc_physics_TerrainShape_getGroup)); + cls->defineFunction("setGroup", _SE(js_cc_physics_TerrainShape_setGroup)); + cls->defineFunction("getMask", _SE(js_cc_physics_TerrainShape_getMask)); + cls->defineFunction("setMask", _SE(js_cc_physics_TerrainShape_setMask)); + cls->defineFunction("getObjectID", _SE(js_cc_physics_TerrainShape_getObjectID)); + cls->defineFunction("setTerrain", _SE(js_cc_physics_TerrainShape_setTerrain)); - cls->defineFinalizeFunction(_SE(js_delete_cc_physics_BoxShape)); + cls->defineFinalizeFunction(_SE(js_delete_cc_physics_TerrainShape)); cls->install(); - JSBClassType::registerClass(cls); + JSBClassType::registerClass(cls); - __jsb_cc_physics_BoxShape_proto = cls->getProto(); - __jsb_cc_physics_BoxShape_class = cls; + __jsb_cc_physics_TerrainShape_proto = cls->getProto(); + __jsb_cc_physics_TerrainShape_class = cls; se::ScriptEngine::getInstance()->clearException(); return true; } -se::Class* __jsb_cc_physics_CapsuleShape_class = nullptr; -se::Object* __jsb_cc_physics_CapsuleShape_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_physics_CapsuleShape) +se::Class* __jsb_cc_physics_RevoluteJoint_class = nullptr; +se::Object* __jsb_cc_physics_RevoluteJoint_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_physics_RevoluteJoint) // js_ctor -static bool js_new_cc_physics_CapsuleShape(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_new_cc_physics_RevoluteJoint(se::State& s) // NOLINT(readability-identifier-naming) { CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::CapsuleShape *result; - result = (cc::physics::CapsuleShape *)new cc::physics::CapsuleShape(); + cc::physics::RevoluteJoint *result; + result = (cc::physics::RevoluteJoint *)new cc::physics::RevoluteJoint(); auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); s.thisObject()->setPrivateObject(ptr); return true; } -SE_BIND_CTOR(js_new_cc_physics_CapsuleShape, __jsb_cc_physics_CapsuleShape_class, js_delete_cc_physics_CapsuleShape) +SE_BIND_CTOR(js_new_cc_physics_RevoluteJoint, __jsb_cc_physics_RevoluteJoint_class, js_delete_cc_physics_RevoluteJoint) -static bool js_delete_cc_physics_CapsuleShape(se::State& s) +static bool js_delete_cc_physics_RevoluteJoint(se::State& s) { // js_dtoroverride return true; } -SE_BIND_FINALIZE_FUNC(js_delete_cc_physics_CapsuleShape) +SE_BIND_FINALIZE_FUNC(js_delete_cc_physics_RevoluteJoint) -bool js_register_cc_physics_CapsuleShape(se::Object* obj) { - auto* cls = se::Class::create("CapsuleShape", obj, __jsb_cc_physics_ICapsuleShape_proto, _SE(js_new_cc_physics_CapsuleShape)); - +static bool js_cc_physics_RevoluteJoint_initialize(se::State& s) +{ + // js_function + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::RevoluteJoint *arg1 = (cc::physics::RevoluteJoint *) NULL ; + cc::Node *arg2 = (cc::Node *) NULL ; + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "RevoluteJoint_initialize,2,SWIGTYPE_p_cc__Node"); + (arg1)->initialize(arg2); + return true; +} +SE_BIND_FUNC(js_cc_physics_RevoluteJoint_initialize) + +static bool js_cc_physics_RevoluteJoint_onEnable(se::State& s) +{ + // js_function - cls->defineFinalizeFunction(_SE(js_delete_cc_physics_CapsuleShape)); + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::RevoluteJoint *arg1 = (cc::physics::RevoluteJoint *) NULL ; + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + (arg1)->onEnable(); - cls->install(); - JSBClassType::registerClass(cls); - __jsb_cc_physics_CapsuleShape_proto = cls->getProto(); - __jsb_cc_physics_CapsuleShape_class = cls; - se::ScriptEngine::getInstance()->clearException(); return true; } +SE_BIND_FUNC(js_cc_physics_RevoluteJoint_onEnable) - -se::Class* __jsb_cc_physics_PlaneShape_class = nullptr; -se::Object* __jsb_cc_physics_PlaneShape_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_physics_PlaneShape) - -// js_ctor -static bool js_new_cc_physics_PlaneShape(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_physics_RevoluteJoint_onDisable(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); + cc::physics::RevoluteJoint *arg1 = (cc::physics::RevoluteJoint *) NULL ; - cc::physics::PlaneShape *result; - result = (cc::physics::PlaneShape *)new cc::physics::PlaneShape(); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + (arg1)->onDisable(); - auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); - s.thisObject()->setPrivateObject(ptr); return true; } -SE_BIND_CTOR(js_new_cc_physics_PlaneShape, __jsb_cc_physics_PlaneShape_class, js_delete_cc_physics_PlaneShape) +SE_BIND_FUNC(js_cc_physics_RevoluteJoint_onDisable) -static bool js_delete_cc_physics_PlaneShape(se::State& s) +static bool js_cc_physics_RevoluteJoint_onDestroy(se::State& s) { - // js_dtoroverride + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::RevoluteJoint *arg1 = (cc::physics::RevoluteJoint *) NULL ; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + (arg1)->onDestroy(); + + return true; } -SE_BIND_FINALIZE_FUNC(js_delete_cc_physics_PlaneShape) +SE_BIND_FUNC(js_cc_physics_RevoluteJoint_onDestroy) -bool js_register_cc_physics_PlaneShape(se::Object* obj) { - auto* cls = se::Class::create("PlaneShape", obj, __jsb_cc_physics_IPlaneShape_proto, _SE(js_new_cc_physics_PlaneShape)); +static bool js_cc_physics_RevoluteJoint_setEnableCollision(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::RevoluteJoint *arg1 = (cc::physics::RevoluteJoint *) NULL ; + bool arg2 ; + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) bool + ok &= sevalue_to_native(args[0], &arg2); + SE_PRECONDITION2(ok, false, "RevoluteJoint_setEnableCollision,2,SWIGTYPE_bool"); + (arg1)->setEnableCollision(arg2); + return true; +} +SE_BIND_FUNC(js_cc_physics_RevoluteJoint_setEnableCollision) + +static bool js_cc_physics_RevoluteJoint_setConnectedBody(se::State& s) +{ + // js_function + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::RevoluteJoint *arg1 = (cc::physics::RevoluteJoint *) NULL ; + uint32_t arg2 ; + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - cls->defineFinalizeFunction(_SE(js_delete_cc_physics_PlaneShape)); + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "RevoluteJoint_setConnectedBody,2,SWIGTYPE_uint32_t"); + (arg1)->setConnectedBody(arg2); - cls->install(); - JSBClassType::registerClass(cls); - __jsb_cc_physics_PlaneShape_proto = cls->getProto(); - __jsb_cc_physics_PlaneShape_class = cls; - se::ScriptEngine::getInstance()->clearException(); return true; } +SE_BIND_FUNC(js_cc_physics_RevoluteJoint_setConnectedBody) - -se::Class* __jsb_cc_physics_TrimeshShape_class = nullptr; -se::Object* __jsb_cc_physics_TrimeshShape_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_physics_TrimeshShape) - -// js_ctor -static bool js_new_cc_physics_TrimeshShape(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_physics_RevoluteJoint_getObjectID(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); + cc::physics::RevoluteJoint *arg1 = (cc::physics::RevoluteJoint *) NULL ; + uint32_t result; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = ((cc::physics::RevoluteJoint const *)arg1)->getObjectID(); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "RevoluteJoint_getObjectID, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - cc::physics::TrimeshShape *result; - result = (cc::physics::TrimeshShape *)new cc::physics::TrimeshShape(); - auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); - s.thisObject()->setPrivateObject(ptr); return true; } -SE_BIND_CTOR(js_new_cc_physics_TrimeshShape, __jsb_cc_physics_TrimeshShape_class, js_delete_cc_physics_TrimeshShape) +SE_BIND_FUNC(js_cc_physics_RevoluteJoint_getObjectID) -static bool js_delete_cc_physics_TrimeshShape(se::State& s) +static bool js_cc_physics_RevoluteJoint_setPivotA(se::State& s) { - // js_dtoroverride - return true; -} -SE_BIND_FINALIZE_FUNC(js_delete_cc_physics_TrimeshShape) - -bool js_register_cc_physics_TrimeshShape(se::Object* obj) { - auto* cls = se::Class::create("TrimeshShape", obj, __jsb_cc_physics_ITrimeshShape_proto, _SE(js_new_cc_physics_TrimeshShape)); - + // js_function + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::RevoluteJoint *arg1 = (cc::physics::RevoluteJoint *) NULL ; + float arg2 ; + float arg3 ; + float arg4 ; + if(argc != 3) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "RevoluteJoint_setPivotA,2,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "RevoluteJoint_setPivotA,3,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[2], &arg4, nullptr); + SE_PRECONDITION2(ok, false, "RevoluteJoint_setPivotA,4,SWIGTYPE_float"); + (arg1)->setPivotA(arg2,arg3,arg4); + return true; +} +SE_BIND_FUNC(js_cc_physics_RevoluteJoint_setPivotA) + +static bool js_cc_physics_RevoluteJoint_setPivotB(se::State& s) +{ + // js_function - cls->defineFinalizeFunction(_SE(js_delete_cc_physics_TrimeshShape)); + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::RevoluteJoint *arg1 = (cc::physics::RevoluteJoint *) NULL ; + float arg2 ; + float arg3 ; + float arg4 ; + if(argc != 3) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "RevoluteJoint_setPivotB,2,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "RevoluteJoint_setPivotB,3,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[2], &arg4, nullptr); + SE_PRECONDITION2(ok, false, "RevoluteJoint_setPivotB,4,SWIGTYPE_float"); + (arg1)->setPivotB(arg2,arg3,arg4); - cls->install(); - JSBClassType::registerClass(cls); - __jsb_cc_physics_TrimeshShape_proto = cls->getProto(); - __jsb_cc_physics_TrimeshShape_class = cls; - se::ScriptEngine::getInstance()->clearException(); return true; } +SE_BIND_FUNC(js_cc_physics_RevoluteJoint_setPivotB) - -se::Class* __jsb_cc_physics_CylinderShape_class = nullptr; -se::Object* __jsb_cc_physics_CylinderShape_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_physics_CylinderShape) - -// js_ctor -static bool js_new_cc_physics_CylinderShape(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_physics_RevoluteJoint_setAxis(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); + cc::physics::RevoluteJoint *arg1 = (cc::physics::RevoluteJoint *) NULL ; + float arg2 ; + float arg3 ; + float arg4 ; - cc::physics::CylinderShape *result; - result = (cc::physics::CylinderShape *)new cc::physics::CylinderShape(); + if(argc != 3) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "RevoluteJoint_setAxis,2,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "RevoluteJoint_setAxis,3,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[2], &arg4, nullptr); + SE_PRECONDITION2(ok, false, "RevoluteJoint_setAxis,4,SWIGTYPE_float"); + (arg1)->setAxis(arg2,arg3,arg4); - auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); - s.thisObject()->setPrivateObject(ptr); - return true; -} -SE_BIND_CTOR(js_new_cc_physics_CylinderShape, __jsb_cc_physics_CylinderShape_class, js_delete_cc_physics_CylinderShape) - -static bool js_delete_cc_physics_CylinderShape(se::State& s) -{ - // js_dtoroverride return true; } -SE_BIND_FINALIZE_FUNC(js_delete_cc_physics_CylinderShape) +SE_BIND_FUNC(js_cc_physics_RevoluteJoint_setAxis) -bool js_register_cc_physics_CylinderShape(se::Object* obj) { - auto* cls = se::Class::create("CylinderShape", obj, __jsb_cc_physics_ICylinderShape_proto, _SE(js_new_cc_physics_CylinderShape)); +bool js_register_cc_physics_RevoluteJoint(se::Object* obj) { + auto* cls = se::Class::create("RevoluteJoint", obj, nullptr, _SE(js_new_cc_physics_RevoluteJoint)); + cls->defineFunction("initialize", _SE(js_cc_physics_RevoluteJoint_initialize)); + cls->defineFunction("onEnable", _SE(js_cc_physics_RevoluteJoint_onEnable)); + cls->defineFunction("onDisable", _SE(js_cc_physics_RevoluteJoint_onDisable)); + cls->defineFunction("onDestroy", _SE(js_cc_physics_RevoluteJoint_onDestroy)); + cls->defineFunction("setEnableCollision", _SE(js_cc_physics_RevoluteJoint_setEnableCollision)); + cls->defineFunction("setConnectedBody", _SE(js_cc_physics_RevoluteJoint_setConnectedBody)); + cls->defineFunction("getObjectID", _SE(js_cc_physics_RevoluteJoint_getObjectID)); + cls->defineFunction("setPivotA", _SE(js_cc_physics_RevoluteJoint_setPivotA)); + cls->defineFunction("setPivotB", _SE(js_cc_physics_RevoluteJoint_setPivotB)); + cls->defineFunction("setAxis", _SE(js_cc_physics_RevoluteJoint_setAxis)); - cls->defineFinalizeFunction(_SE(js_delete_cc_physics_CylinderShape)); + cls->defineFinalizeFunction(_SE(js_delete_cc_physics_RevoluteJoint)); cls->install(); - JSBClassType::registerClass(cls); + JSBClassType::registerClass(cls); - __jsb_cc_physics_CylinderShape_proto = cls->getProto(); - __jsb_cc_physics_CylinderShape_class = cls; + __jsb_cc_physics_RevoluteJoint_proto = cls->getProto(); + __jsb_cc_physics_RevoluteJoint_class = cls; se::ScriptEngine::getInstance()->clearException(); return true; } -se::Class* __jsb_cc_physics_ConeShape_class = nullptr; -se::Object* __jsb_cc_physics_ConeShape_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_physics_ConeShape) +se::Class* __jsb_cc_physics_DistanceJoint_class = nullptr; +se::Object* __jsb_cc_physics_DistanceJoint_proto = nullptr; +SE_DECLARE_FINALIZE_FUNC(js_delete_cc_physics_DistanceJoint) // js_ctor -static bool js_new_cc_physics_ConeShape(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_new_cc_physics_DistanceJoint(se::State& s) // NOLINT(readability-identifier-naming) { CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); - cc::physics::ConeShape *result; - result = (cc::physics::ConeShape *)new cc::physics::ConeShape(); + cc::physics::DistanceJoint *result; + result = (cc::physics::DistanceJoint *)new cc::physics::DistanceJoint(); auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); s.thisObject()->setPrivateObject(ptr); return true; } -SE_BIND_CTOR(js_new_cc_physics_ConeShape, __jsb_cc_physics_ConeShape_class, js_delete_cc_physics_ConeShape) +SE_BIND_CTOR(js_new_cc_physics_DistanceJoint, __jsb_cc_physics_DistanceJoint_class, js_delete_cc_physics_DistanceJoint) -static bool js_delete_cc_physics_ConeShape(se::State& s) +static bool js_delete_cc_physics_DistanceJoint(se::State& s) { // js_dtoroverride return true; } -SE_BIND_FINALIZE_FUNC(js_delete_cc_physics_ConeShape) +SE_BIND_FINALIZE_FUNC(js_delete_cc_physics_DistanceJoint) -bool js_register_cc_physics_ConeShape(se::Object* obj) { - auto* cls = se::Class::create("ConeShape", obj, __jsb_cc_physics_IConeShape_proto, _SE(js_new_cc_physics_ConeShape)); - - - - - +static bool js_cc_physics_DistanceJoint_initialize(se::State& s) +{ + // js_function - cls->defineFinalizeFunction(_SE(js_delete_cc_physics_ConeShape)); + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::DistanceJoint *arg1 = (cc::physics::DistanceJoint *) NULL ; + cc::Node *arg2 = (cc::Node *) NULL ; + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE* + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "DistanceJoint_initialize,2,SWIGTYPE_p_cc__Node"); + (arg1)->initialize(arg2); - cls->install(); - JSBClassType::registerClass(cls); - __jsb_cc_physics_ConeShape_proto = cls->getProto(); - __jsb_cc_physics_ConeShape_class = cls; - se::ScriptEngine::getInstance()->clearException(); return true; } +SE_BIND_FUNC(js_cc_physics_DistanceJoint_initialize) - -se::Class* __jsb_cc_physics_TerrainShape_class = nullptr; -se::Object* __jsb_cc_physics_TerrainShape_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_physics_TerrainShape) - -// js_ctor -static bool js_new_cc_physics_TerrainShape(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_physics_DistanceJoint_onEnable(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); + cc::physics::DistanceJoint *arg1 = (cc::physics::DistanceJoint *) NULL ; - cc::physics::TerrainShape *result; - result = (cc::physics::TerrainShape *)new cc::physics::TerrainShape(); + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + (arg1)->onEnable(); - auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); - s.thisObject()->setPrivateObject(ptr); return true; } -SE_BIND_CTOR(js_new_cc_physics_TerrainShape, __jsb_cc_physics_TerrainShape_class, js_delete_cc_physics_TerrainShape) +SE_BIND_FUNC(js_cc_physics_DistanceJoint_onEnable) -static bool js_delete_cc_physics_TerrainShape(se::State& s) +static bool js_cc_physics_DistanceJoint_onDisable(se::State& s) { - // js_dtoroverride - return true; -} -SE_BIND_FINALIZE_FUNC(js_delete_cc_physics_TerrainShape) - -bool js_register_cc_physics_TerrainShape(se::Object* obj) { - auto* cls = se::Class::create("TerrainShape", obj, __jsb_cc_physics_ITerrainShape_proto, _SE(js_new_cc_physics_TerrainShape)); - + // js_function + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::DistanceJoint *arg1 = (cc::physics::DistanceJoint *) NULL ; + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + (arg1)->onDisable(); + return true; +} +SE_BIND_FUNC(js_cc_physics_DistanceJoint_onDisable) + +static bool js_cc_physics_DistanceJoint_onDestroy(se::State& s) +{ + // js_function - cls->defineFinalizeFunction(_SE(js_delete_cc_physics_TerrainShape)); + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::DistanceJoint *arg1 = (cc::physics::DistanceJoint *) NULL ; + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + (arg1)->onDestroy(); - cls->install(); - JSBClassType::registerClass(cls); - __jsb_cc_physics_TerrainShape_proto = cls->getProto(); - __jsb_cc_physics_TerrainShape_class = cls; - se::ScriptEngine::getInstance()->clearException(); return true; } +SE_BIND_FUNC(js_cc_physics_DistanceJoint_onDestroy) - -se::Class* __jsb_cc_physics_RevoluteJoint_class = nullptr; -se::Object* __jsb_cc_physics_RevoluteJoint_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_physics_RevoluteJoint) - -// js_ctor -static bool js_new_cc_physics_RevoluteJoint(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_physics_DistanceJoint_setEnableCollision(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); + cc::physics::DistanceJoint *arg1 = (cc::physics::DistanceJoint *) NULL ; + bool arg2 ; - cc::physics::RevoluteJoint *result; - result = (cc::physics::RevoluteJoint *)new cc::physics::RevoluteJoint(); + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) bool + ok &= sevalue_to_native(args[0], &arg2); + SE_PRECONDITION2(ok, false, "DistanceJoint_setEnableCollision,2,SWIGTYPE_bool"); + (arg1)->setEnableCollision(arg2); - auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); - s.thisObject()->setPrivateObject(ptr); return true; } -SE_BIND_CTOR(js_new_cc_physics_RevoluteJoint, __jsb_cc_physics_RevoluteJoint_class, js_delete_cc_physics_RevoluteJoint) +SE_BIND_FUNC(js_cc_physics_DistanceJoint_setEnableCollision) -static bool js_delete_cc_physics_RevoluteJoint(se::State& s) +static bool js_cc_physics_DistanceJoint_setConnectedBody(se::State& s) { - // js_dtoroverride - return true; -} -SE_BIND_FINALIZE_FUNC(js_delete_cc_physics_RevoluteJoint) - -bool js_register_cc_physics_RevoluteJoint(se::Object* obj) { - auto* cls = se::Class::create("RevoluteJoint", obj, __jsb_cc_physics_IRevoluteJoint_proto, _SE(js_new_cc_physics_RevoluteJoint)); + // js_function + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::DistanceJoint *arg1 = (cc::physics::DistanceJoint *) NULL ; + uint32_t arg2 ; + if(argc != 1) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg2, s.thisObject()); + SE_PRECONDITION2(ok, false, "DistanceJoint_setConnectedBody,2,SWIGTYPE_uint32_t"); + (arg1)->setConnectedBody(arg2); - cls->defineFinalizeFunction(_SE(js_delete_cc_physics_RevoluteJoint)); + return true; +} +SE_BIND_FUNC(js_cc_physics_DistanceJoint_setConnectedBody) + +static bool js_cc_physics_DistanceJoint_getObjectID(se::State& s) +{ + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::DistanceJoint *arg1 = (cc::physics::DistanceJoint *) NULL ; + uint32_t result; + + if(argc != 0) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = ((cc::physics::DistanceJoint const *)arg1)->getObjectID(); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "DistanceJoint_getObjectID, Error processing arguments"); + SE_HOLD_RETURN_VALUE(result, s.thisObject(), s.rval()); - cls->install(); - JSBClassType::registerClass(cls); - __jsb_cc_physics_RevoluteJoint_proto = cls->getProto(); - __jsb_cc_physics_RevoluteJoint_class = cls; - se::ScriptEngine::getInstance()->clearException(); return true; } +SE_BIND_FUNC(js_cc_physics_DistanceJoint_getObjectID) - -se::Class* __jsb_cc_physics_DistanceJoint_class = nullptr; -se::Object* __jsb_cc_physics_DistanceJoint_proto = nullptr; -SE_DECLARE_FINALIZE_FUNC(js_delete_cc_physics_DistanceJoint) - -// js_ctor -static bool js_new_cc_physics_DistanceJoint(se::State& s) // NOLINT(readability-identifier-naming) +static bool js_cc_physics_DistanceJoint_setPivotA(se::State& s) { + // js_function + CC_UNUSED bool ok = true; const auto& args = s.args(); size_t argc = args.size(); + cc::physics::DistanceJoint *arg1 = (cc::physics::DistanceJoint *) NULL ; + float arg2 ; + float arg3 ; + float arg4 ; - cc::physics::DistanceJoint *result; - result = (cc::physics::DistanceJoint *)new cc::physics::DistanceJoint(); + if(argc != 3) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "DistanceJoint_setPivotA,2,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "DistanceJoint_setPivotA,3,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[2], &arg4, nullptr); + SE_PRECONDITION2(ok, false, "DistanceJoint_setPivotA,4,SWIGTYPE_float"); + (arg1)->setPivotA(arg2,arg3,arg4); - auto *ptr = JSB_MAKE_PRIVATE_OBJECT_WITH_INSTANCE(result); - s.thisObject()->setPrivateObject(ptr); return true; } -SE_BIND_CTOR(js_new_cc_physics_DistanceJoint, __jsb_cc_physics_DistanceJoint_class, js_delete_cc_physics_DistanceJoint) +SE_BIND_FUNC(js_cc_physics_DistanceJoint_setPivotA) -static bool js_delete_cc_physics_DistanceJoint(se::State& s) +static bool js_cc_physics_DistanceJoint_setPivotB(se::State& s) { - // js_dtoroverride + // js_function + + CC_UNUSED bool ok = true; + const auto& args = s.args(); + size_t argc = args.size(); + cc::physics::DistanceJoint *arg1 = (cc::physics::DistanceJoint *) NULL ; + float arg2 ; + float arg3 ; + float arg4 ; + + if(argc != 3) { + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 3); + return false; + } + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg2, nullptr); + SE_PRECONDITION2(ok, false, "DistanceJoint_setPivotB,2,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[1], &arg3, nullptr); + SE_PRECONDITION2(ok, false, "DistanceJoint_setPivotB,3,SWIGTYPE_float"); + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[2], &arg4, nullptr); + SE_PRECONDITION2(ok, false, "DistanceJoint_setPivotB,4,SWIGTYPE_float"); + (arg1)->setPivotB(arg2,arg3,arg4); + + return true; } -SE_BIND_FINALIZE_FUNC(js_delete_cc_physics_DistanceJoint) +SE_BIND_FUNC(js_cc_physics_DistanceJoint_setPivotB) bool js_register_cc_physics_DistanceJoint(se::Object* obj) { - auto* cls = se::Class::create("DistanceJoint", obj, __jsb_cc_physics_IDistanceJoint_proto, _SE(js_new_cc_physics_DistanceJoint)); + auto* cls = se::Class::create("DistanceJoint", obj, nullptr, _SE(js_new_cc_physics_DistanceJoint)); + cls->defineFunction("initialize", _SE(js_cc_physics_DistanceJoint_initialize)); + cls->defineFunction("onEnable", _SE(js_cc_physics_DistanceJoint_onEnable)); + cls->defineFunction("onDisable", _SE(js_cc_physics_DistanceJoint_onDisable)); + cls->defineFunction("onDestroy", _SE(js_cc_physics_DistanceJoint_onDestroy)); + cls->defineFunction("setEnableCollision", _SE(js_cc_physics_DistanceJoint_setEnableCollision)); + cls->defineFunction("setConnectedBody", _SE(js_cc_physics_DistanceJoint_setConnectedBody)); + cls->defineFunction("getObjectID", _SE(js_cc_physics_DistanceJoint_getObjectID)); + cls->defineFunction("setPivotA", _SE(js_cc_physics_DistanceJoint_setPivotA)); + cls->defineFunction("setPivotB", _SE(js_cc_physics_DistanceJoint_setPivotB)); @@ -5823,29 +6872,6 @@ bool register_all_physics(se::Object* obj) { } se::Object* ns = nsVal.toObject(); /* Register classes */ - js_register_cc_physics_ILifecycle(ns); - js_register_cc_physics_TriggerEventPair(ns); - js_register_cc_physics_ContactPoint(ns); - js_register_cc_physics_ContactEventPair(ns); - js_register_cc_physics_ConvexDesc(ns); - js_register_cc_physics_TrimeshDesc(ns); - js_register_cc_physics_HeightFieldDesc(ns); - js_register_cc_physics_RaycastOptions(ns); - js_register_cc_physics_RaycastResult(ns); - js_register_cc_physics_IPhysicsWorld(ns); - js_register_cc_physics_IRigidBody(ns); - js_register_cc_physics_IBaseShape(ns); - js_register_cc_physics_ISphereShape(ns); - js_register_cc_physics_IBoxShape(ns); - js_register_cc_physics_ICapsuleShape(ns); - js_register_cc_physics_ICylinderShape(ns); - js_register_cc_physics_IConeShape(ns); - js_register_cc_physics_IPlaneShape(ns); - js_register_cc_physics_ITrimeshShape(ns); - js_register_cc_physics_ITerrainShape(ns); - js_register_cc_physics_IBaseJoint(ns); - js_register_cc_physics_IDistanceJoint(ns); - js_register_cc_physics_IRevoluteJoint(ns); js_register_cc_physics_World(ns); js_register_cc_physics_RigidBody(ns); js_register_cc_physics_SphereShape(ns); diff --git a/native/cocos/bindings/auto/jsb_physics_auto.h b/native/cocos/bindings/auto/jsb_physics_auto.h index 45b9a5e0da6..e2e37249a72 100644 --- a/native/cocos/bindings/auto/jsb_physics_auto.h +++ b/native/cocos/bindings/auto/jsb_physics_auto.h @@ -46,153 +46,6 @@ bool register_all_physics(se::Object* obj); -JSB_REGISTER_OBJECT_TYPE(cc::physics::ILifecycle); -extern se::Object *__jsb_cc_physics_ILifecycle_proto; // NOLINT -extern se::Class * __jsb_cc_physics_ILifecycle_class; // NOLINT - - -JSB_REGISTER_OBJECT_TYPE(cc::physics::TriggerEventPair); -extern se::Object *__jsb_cc_physics_TriggerEventPair_proto; // NOLINT -extern se::Class * __jsb_cc_physics_TriggerEventPair_class; // NOLINT - - -template<> -bool sevalue_to_native(const se::Value &from, cc::physics::TriggerEventPair * to, se::Object *ctx); - - -JSB_REGISTER_OBJECT_TYPE(cc::physics::ContactPoint); -extern se::Object *__jsb_cc_physics_ContactPoint_proto; // NOLINT -extern se::Class * __jsb_cc_physics_ContactPoint_class; // NOLINT - - -template<> -bool sevalue_to_native(const se::Value &from, cc::physics::ContactPoint * to, se::Object *ctx); - - -JSB_REGISTER_OBJECT_TYPE(cc::physics::ContactEventPair); -extern se::Object *__jsb_cc_physics_ContactEventPair_proto; // NOLINT -extern se::Class * __jsb_cc_physics_ContactEventPair_class; // NOLINT - - -template<> -bool sevalue_to_native(const se::Value &from, cc::physics::ContactEventPair * to, se::Object *ctx); - - -JSB_REGISTER_OBJECT_TYPE(cc::physics::ConvexDesc); -extern se::Object *__jsb_cc_physics_ConvexDesc_proto; // NOLINT -extern se::Class * __jsb_cc_physics_ConvexDesc_class; // NOLINT - - -template<> -bool sevalue_to_native(const se::Value &from, cc::physics::ConvexDesc * to, se::Object *ctx); - - -JSB_REGISTER_OBJECT_TYPE(cc::physics::TrimeshDesc); -extern se::Object *__jsb_cc_physics_TrimeshDesc_proto; // NOLINT -extern se::Class * __jsb_cc_physics_TrimeshDesc_class; // NOLINT - - -template<> -bool sevalue_to_native(const se::Value &from, cc::physics::TrimeshDesc * to, se::Object *ctx); - - -JSB_REGISTER_OBJECT_TYPE(cc::physics::HeightFieldDesc); -extern se::Object *__jsb_cc_physics_HeightFieldDesc_proto; // NOLINT -extern se::Class * __jsb_cc_physics_HeightFieldDesc_class; // NOLINT - - -template<> -bool sevalue_to_native(const se::Value &from, cc::physics::HeightFieldDesc * to, se::Object *ctx); - - -JSB_REGISTER_OBJECT_TYPE(cc::physics::RaycastOptions); -extern se::Object *__jsb_cc_physics_RaycastOptions_proto; // NOLINT -extern se::Class * __jsb_cc_physics_RaycastOptions_class; // NOLINT - - -template<> -bool sevalue_to_native(const se::Value &from, cc::physics::RaycastOptions * to, se::Object *ctx); - - -JSB_REGISTER_OBJECT_TYPE(cc::physics::RaycastResult); -extern se::Object *__jsb_cc_physics_RaycastResult_proto; // NOLINT -extern se::Class * __jsb_cc_physics_RaycastResult_class; // NOLINT - - -template<> -bool sevalue_to_native(const se::Value &from, cc::physics::RaycastResult * to, se::Object *ctx); - - -JSB_REGISTER_OBJECT_TYPE(cc::physics::IPhysicsWorld); -extern se::Object *__jsb_cc_physics_IPhysicsWorld_proto; // NOLINT -extern se::Class * __jsb_cc_physics_IPhysicsWorld_class; // NOLINT - - -JSB_REGISTER_OBJECT_TYPE(cc::physics::IRigidBody); -extern se::Object *__jsb_cc_physics_IRigidBody_proto; // NOLINT -extern se::Class * __jsb_cc_physics_IRigidBody_class; // NOLINT - - -JSB_REGISTER_OBJECT_TYPE(cc::physics::IBaseShape); -extern se::Object *__jsb_cc_physics_IBaseShape_proto; // NOLINT -extern se::Class * __jsb_cc_physics_IBaseShape_class; // NOLINT - - -JSB_REGISTER_OBJECT_TYPE(cc::physics::ISphereShape); -extern se::Object *__jsb_cc_physics_ISphereShape_proto; // NOLINT -extern se::Class * __jsb_cc_physics_ISphereShape_class; // NOLINT - - -JSB_REGISTER_OBJECT_TYPE(cc::physics::IBoxShape); -extern se::Object *__jsb_cc_physics_IBoxShape_proto; // NOLINT -extern se::Class * __jsb_cc_physics_IBoxShape_class; // NOLINT - - -JSB_REGISTER_OBJECT_TYPE(cc::physics::ICapsuleShape); -extern se::Object *__jsb_cc_physics_ICapsuleShape_proto; // NOLINT -extern se::Class * __jsb_cc_physics_ICapsuleShape_class; // NOLINT - - -JSB_REGISTER_OBJECT_TYPE(cc::physics::ICylinderShape); -extern se::Object *__jsb_cc_physics_ICylinderShape_proto; // NOLINT -extern se::Class * __jsb_cc_physics_ICylinderShape_class; // NOLINT - - -JSB_REGISTER_OBJECT_TYPE(cc::physics::IConeShape); -extern se::Object *__jsb_cc_physics_IConeShape_proto; // NOLINT -extern se::Class * __jsb_cc_physics_IConeShape_class; // NOLINT - - -JSB_REGISTER_OBJECT_TYPE(cc::physics::IPlaneShape); -extern se::Object *__jsb_cc_physics_IPlaneShape_proto; // NOLINT -extern se::Class * __jsb_cc_physics_IPlaneShape_class; // NOLINT - - -JSB_REGISTER_OBJECT_TYPE(cc::physics::ITrimeshShape); -extern se::Object *__jsb_cc_physics_ITrimeshShape_proto; // NOLINT -extern se::Class * __jsb_cc_physics_ITrimeshShape_class; // NOLINT - - -JSB_REGISTER_OBJECT_TYPE(cc::physics::ITerrainShape); -extern se::Object *__jsb_cc_physics_ITerrainShape_proto; // NOLINT -extern se::Class * __jsb_cc_physics_ITerrainShape_class; // NOLINT - - -JSB_REGISTER_OBJECT_TYPE(cc::physics::IBaseJoint); -extern se::Object *__jsb_cc_physics_IBaseJoint_proto; // NOLINT -extern se::Class * __jsb_cc_physics_IBaseJoint_class; // NOLINT - - -JSB_REGISTER_OBJECT_TYPE(cc::physics::IDistanceJoint); -extern se::Object *__jsb_cc_physics_IDistanceJoint_proto; // NOLINT -extern se::Class * __jsb_cc_physics_IDistanceJoint_class; // NOLINT - - -JSB_REGISTER_OBJECT_TYPE(cc::physics::IRevoluteJoint); -extern se::Object *__jsb_cc_physics_IRevoluteJoint_proto; // NOLINT -extern se::Class * __jsb_cc_physics_IRevoluteJoint_class; // NOLINT - - JSB_REGISTER_OBJECT_TYPE(cc::physics::World); extern se::Object *__jsb_cc_physics_World_proto; // NOLINT extern se::Class * __jsb_cc_physics_World_class; // NOLINT diff --git a/native/tools/swig-config/physics.i b/native/tools/swig-config/physics.i index 9f448d75e96..8ad755b0dee 100644 --- a/native/tools/swig-config/physics.i +++ b/native/tools/swig-config/physics.i @@ -32,6 +32,8 @@ // 2. namespace is needed // +%rename("$ignore", regextarget=1, fullname=1) "cc::physics::I[A-Za-z0-9]*(?:Body|World|Shape|Joint|Lifecycle)$"; + // ----- Rename Section ------ // Brief: Classes, methods or attributes needs to be renamed // @@ -98,11 +100,11 @@ // ----- Include Section ------ // Brief: Include header files in which classes and methods will be bound -%include "physics/spec/ILifecycle.h" -%include "physics/spec/IWorld.h" -%include "physics/spec/IBody.h" -%include "physics/spec/IShape.h" -%include "physics/spec/IJoint.h" +%import "physics/spec/ILifecycle.h" +%import "physics/spec/IWorld.h" +%import "physics/spec/IBody.h" +%import "physics/spec/IShape.h" +%import "physics/spec/IJoint.h" %include "physics/sdk/World.h" %include "physics/sdk/RigidBody.h" From 78889daf71a97f482937335ceb99d0a0c80c027c Mon Sep 17 00:00:00 2001 From: bofeng-song Date: Thu, 3 Nov 2022 09:32:46 +0800 Subject: [PATCH 132/829] export lodGroups for native-editor (#13225) --- native/cocos/bindings/auto/jsb_scene_auto.cpp | 23 +++++++++++++++++++ native/tools/swig-config/scene.i | 2 ++ 2 files changed, 25 insertions(+) diff --git a/native/cocos/bindings/auto/jsb_scene_auto.cpp b/native/cocos/bindings/auto/jsb_scene_auto.cpp index 56621010f4a..af141dfe8c3 100644 --- a/native/cocos/bindings/auto/jsb_scene_auto.cpp +++ b/native/cocos/bindings/auto/jsb_scene_auto.cpp @@ -646,6 +646,9 @@ using namespace cc; #define cc_scene_RenderScene_models_get(self_) self_->getModels() +#define cc_scene_RenderScene_lodGroups_get(self_) self_->getLODGroups() + + #define cc_scene_Skybox_model_get(self_) self_->getModel() @@ -20322,6 +20325,25 @@ static bool js_cc_scene_RenderScene_models_get(se::State& s) } SE_BIND_PROP_GET(js_cc_scene_RenderScene_models_get) +static bool js_cc_scene_RenderScene_lodGroups_get(se::State& s) +{ + CC_UNUSED bool ok = true; + cc::scene::RenderScene *arg1 = (cc::scene::RenderScene *) NULL ; + ccstd::vector< cc::IntrusivePtr< cc::scene::LODGroup > > *result = 0 ; + + arg1 = SE_THIS_OBJECT(s); + SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + result = (ccstd::vector< cc::IntrusivePtr< cc::scene::LODGroup > > *) &cc_scene_RenderScene_lodGroups_get(arg1); + // %typemap(out) SWIGTYPE& + ok &= nativevalue_to_se(*result, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "RenderScene_lodGroups_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(*result, s.thisObject(), s.rval()); + + + return true; +} +SE_BIND_PROP_GET(js_cc_scene_RenderScene_lodGroups_get) + bool js_register_cc_scene_RenderScene(se::Object* obj) { auto* cls = se::Class::create("RenderScene", obj, nullptr, _SE(js_new_cc_scene_RenderScene)); @@ -20330,6 +20352,7 @@ bool js_register_cc_scene_RenderScene(se::Object* obj) { cls->defineProperty("sphereLights", _SE(js_cc_scene_RenderScene_sphereLights_get), nullptr); cls->defineProperty("spotLights", _SE(js_cc_scene_RenderScene_spotLights_get), nullptr); cls->defineProperty("models", _SE(js_cc_scene_RenderScene_models_get), nullptr); + cls->defineProperty("lodGroups", _SE(js_cc_scene_RenderScene_lodGroups_get), nullptr); cls->defineFunction("initialize", _SE(js_cc_scene_RenderScene_initialize)); cls->defineFunction("update", _SE(js_cc_scene_RenderScene_update)); diff --git a/native/tools/swig-config/scene.i b/native/tools/swig-config/scene.i index 3c4cc69ba46..791411f6ddd 100644 --- a/native/tools/swig-config/scene.i +++ b/native/tools/swig-config/scene.i @@ -397,6 +397,8 @@ using namespace cc; %attribute(cc::scene::RenderScene, ccstd::vector>&, sphereLights, getSphereLights); %attribute(cc::scene::RenderScene, ccstd::vector>&, spotLights, getSpotLights); %attribute(cc::scene::RenderScene, ccstd::vector>&, models, getModels); +%attribute(cc::scene::RenderScene, ccstd::vector>&, lodGroups, getLODGroups); + %attribute(cc::scene::Skybox, cc::scene::Model*, model, getModel); %attribute(cc::scene::Skybox, bool, enabled, isEnabled, setEnabled); From dac7417c1e9a2d451678b73d31a84a06e8a32cf0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leslie=20Leigh=20=28=E6=9D=8E=E7=9A=84=E5=BA=8F=29?= Date: Thu, 3 Nov 2022 10:39:51 +0800 Subject: [PATCH 133/829] Add some tests for animation mask in animation graph (#13218) * Add some tests for animation mask in animation graph * Tweak --- .../__snapshots__/newgenanim.test.ts.snap | 46 +++ .../new-gen-anim/utils/mask-test-helper.ts | 172 ++++++++++++ tests/animation/newgenanim.test.ts | 261 +++++++++++++++++- 3 files changed, 478 insertions(+), 1 deletion(-) create mode 100644 tests/animation/__snapshots__/newgenanim.test.ts.snap create mode 100644 tests/animation/new-gen-anim/utils/mask-test-helper.ts diff --git a/tests/animation/__snapshots__/newgenanim.test.ts.snap b/tests/animation/__snapshots__/newgenanim.test.ts.snap new file mode 100644 index 00000000000..83ba15c4fea --- /dev/null +++ b/tests/animation/__snapshots__/newgenanim.test.ts.snap @@ -0,0 +1,46 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`NewGen Anim Animation mask Multiple layers _ 1`] = ` +Object { + "1": 1.1688000000000003, + "1_1": 0.7440000000000001, + "1_1_1": 1.3688000000000002, + "1_2": 1.3920000000000001, +} +`; + +exports[`NewGen Anim Animation mask Single layer Leaf is masked 1`] = ` +Object { + "1": 0.42000000000000004, + "1_1": 0.52, + "1_1_1": 0.30000000000000004, + "1_2": 0.7200000000000001, +} +`; + +exports[`NewGen Anim Animation mask Single layer Middle is masked 1`] = ` +Object { + "1": 0.42000000000000004, + "1_1": 0.2, + "1_1_1": 0.62, + "1_2": 0.7200000000000001, +} +`; + +exports[`NewGen Anim Animation mask Single layer Root and leaf are masked 1`] = ` +Object { + "1": 0.1, + "1_1": 0.52, + "1_1_1": 0.30000000000000004, + "1_2": 0.7200000000000001, +} +`; + +exports[`NewGen Anim Animation mask Single layer Root is masked 1`] = ` +Object { + "1": 0.1, + "1_1": 0.52, + "1_1_1": 0.62, + "1_2": 0.7200000000000001, +} +`; diff --git a/tests/animation/new-gen-anim/utils/mask-test-helper.ts b/tests/animation/new-gen-anim/utils/mask-test-helper.ts new file mode 100644 index 00000000000..71199bac979 --- /dev/null +++ b/tests/animation/new-gen-anim/utils/mask-test-helper.ts @@ -0,0 +1,172 @@ +import { VectorTrack } from "../../../../cocos/animation/animation"; +import { AnimationClip } from "../../../../cocos/animation/animation-clip"; +import { AnimationMask } from "../../../../cocos/animation/marionette/animation-mask"; +import { approx, lerp } from "../../../../cocos/core"; +import { Node } from "../../../../cocos/scene-graph"; + +export enum NodeName { + _1 = '1', + _1_1 = '1_1', + _1_1_1 = '1_1_1', + _1_2 = '1_2', +} + +export function generateTestData(layerCount: number) { + const rootNode = generateSceneHierarchy(); + + const nodes = [...(function* visitDFS(node: Node): Generator { + yield node; + for (const child of node.children) { + yield* visitDFS(child); + } + })(rootNode)]; + + // Generate node default values in [0.1, 0.5). + const defaultValues = generateDefaultValues(nodes.length, 0.1, 0.5); + nodes.forEach((node, nodeIndex) => { + node.setPosition(defaultValues[nodeIndex], 0.0, 0.0); + }); + + // Generate node animation values in [0.5, 0.5 + 0.4 * layerCount). + const animationValueMin = 0.5; + const animationValueMax = animationValueMin + 0.4 * layerCount; + const layersData = Array.from({ length: layerCount }, (_, layerIndex) => { + const layerAnimationValueExtent = (animationValueMax - animationValueMin) / layerCount; + return generateTestDataForNodes( + rootNode, + nodes, + animationValueMin + layerAnimationValueExtent * layerIndex, + animationValueMin + layerAnimationValueExtent * (layerIndex + 1), + ); + }); + + const animationValues = nodes.map((_, nodeIndex) => + layersData.map(({ animationValues }) => animationValues[nodeIndex]) as ReadonlyArray); + + return { + /** Generated root node. */ + rootNode, + + /** Generated fixtures for each node. */ + layerFixtures: layersData.map(({ clip }) => ({ + /** Sample this animation clip at any time gives each node's corresponding animation value. */ + clip, + })), + + /** Generated fixtures for each node. */ + nodeFixtures: nodes.map((node, nodeIndex) => { + return { + /** The node's name. */ + name: node.name, + /** The node's default value. */ + get defaultValue() { + return defaultValues[nodeIndex]; + }, + /** The node's current value. */ + get actualValue() { + return node.position.x; + }, + /** The node's animation value at each layer. */ + get animationValues() { + return animationValues[nodeIndex]; + }, + }; + }), + + /** Get all nodes' actual value. */ + getActualNodeValues() { + return nodes.reduce((result, node) => { + result[node.name] = node.position.x; + return result; + }, {} as Record); + }, + } as const; +} + +export type MaskItem = [nodeName: string, enabled: boolean]; + +export function createMask(items: readonly Readonly[]) { + const mask = new AnimationMask(); + for (const [nodeName, enabled] of items) { + const nodePath = nameToPath(nodeName); + mask.addJoint(nodePath, enabled); + } + return mask; + + function nameToPath(name: string) { + const i = name.lastIndexOf('_'); + if (i < 0) { + return ''; + } else { + const prefix = nameToPath(name.slice(0, i)); + return prefix ? `${prefix}/${name}` : name; + } + } +} + +function generateSceneHierarchy() { + /** + * Scene hierarchy: + * ``` + * (1) + * (1-1) + * (1-1-1) + * (1-2) + * ``` + */ + const _note = undefined; + + const rootNode = new Node(NodeName._1); + { + const node_1_1 = new Node(NodeName._1_1); + node_1_1.parent = rootNode; + { + const node_1_1_1 = new Node(NodeName._1_1_1); + node_1_1_1.parent = node_1_1; + } + const node_1_2 = new Node(NodeName._1_2); + node_1_2.parent = rootNode; + } + + return rootNode; +} + +function generateDefaultValues(count: number, min: number, max: number) { + return Array.from({ length: count }, (_, i) => { + const t = i / count; + return lerp(min, max, t); + }); +} + +function generateTestDataForNodes(root: Node, nodes: Node[], min: number, max: number) { + const clip = new AnimationClip(); + clip.duration = 1.0; + const animationValues = nodes.map((node, nodeIndex) => { + const t = nodeIndex / nodes.length; // [0, 1) + const track = new VectorTrack(); + track.path.toHierarchy(getPathExcludeFrom(root, node)).toProperty('position'); + track.componentsCount = 3; + + const animationValue = lerp(min, max, t); + track.channels()[0].curve.addKeyFrame(0.0, animationValue); + clip.addTrack(track); + + return animationValue; + }); + return { + clip, + animationValues, + }; +} + +function getPathExcludeFrom(from: Node, to: Node) { + const path: string[] = []; + let node: Node | null = to + for (; node && node !== from; node = node.parent) { + path.unshift(node.name); + } + if (node !== from) { + throw new Error(`Unclosed path.`); + } + return path.join('/'); +} diff --git a/tests/animation/newgenanim.test.ts b/tests/animation/newgenanim.test.ts index bd419216414..bf736f200a4 100644 --- a/tests/animation/newgenanim.test.ts +++ b/tests/animation/newgenanim.test.ts @@ -1,6 +1,6 @@ import { lerp, Vec3, warnID } from '../../cocos/core'; -import { AnimationBlend1D, AnimationBlend2D, Condition, InvalidTransitionError, VariableNotDefinedError, ClipMotion, AnimationBlendDirect, VariableType } from '../../cocos/animation/marionette/asset-creation'; +import { AnimationBlend1D, AnimationBlend2D, Condition, InvalidTransitionError, VariableNotDefinedError, ClipMotion, AnimationBlendDirect, VariableType, AnimationMask } from '../../cocos/animation/marionette/asset-creation'; import { AnimationGraph, StateMachine, Transition, isAnimationTransition, AnimationTransition, TransitionInterruptionSource } from '../../cocos/animation/marionette/animation-graph'; import { VariableTypeMismatchedError } from '../../cocos/animation/marionette/errors'; import { AnimationGraphEval, MotionStateStatus, ClipStatus } from '../../cocos/animation/marionette/graph-eval'; @@ -26,6 +26,7 @@ import { AnimationClip } from '../../cocos/animation/animation-clip'; import { TriggerResetMode } from '../../cocos/animation/marionette/variable'; import { MotionState } from '../../cocos/animation/marionette/motion-state'; import { Node, Component } from '../../cocos/scene-graph'; +import * as maskTestHelper from './new-gen-anim/utils/mask-test-helper'; describe('NewGen Anim', () => { test('Defaults', () => { @@ -3204,6 +3205,264 @@ describe('NewGen Anim', () => { ); }); }); + + describe('Animation mask', () => { + const { + _1, _1_1, _1_1_1, _1_2, + } = maskTestHelper.NodeName; + describe(`Single layer`, () => { + test(`Root is masked`, () => { + checkMask([ + [_1, false], + [_1_1, true], // No effect at all + ], _1); + }); + + test(`Middle is masked`, () => { + checkMask([ + [_1_1, false], + [_1_2, true], // No effect at all + ], _1_1); + }); + + test(`Leaf is masked`, () => { + checkMask([ + [_1_1_1, false], + [_1_1, true], // No effect at all + ], _1_1_1); + }); + + test(`Root and leaf are masked`, () => { + checkMask([ + ['', false], + [_1_1, true], // No effect at all + [_1_1_1, false], + ], _1, _1_1_1); + }); + + function checkMask(inputMaskItems: maskTestHelper.MaskItem[], ...expectedFilteredNodeNames: readonly maskTestHelper.NodeName[]) { + const { + rootNode, + nodeFixtures, + getActualNodeValues, + layerFixtures, + } = maskTestHelper.generateTestData(1); + + // Create the animation graph and evaluate. + const g = new AnimationGraph(); + generateLayer(g, 0.8, inputMaskItems, layerFixtures[0].clip); + const graphEval = createAnimationGraphEval(g, rootNode); + graphEval.update(0.2 /* CAN BE ANY */); + + // Compute the expected node values. + const expectedNodeValues = nodeFixtures.reduce((result, { name, defaultValue, animationValues }) => { + // If a node is filtered, its value should remain default in single layer case. + result[name] = (expectedFilteredNodeNames as string[]).includes(name) + ? defaultValue + : lerp(defaultValue, animationValues[0], 0.8); + return result; + }, {} as Record); + + // Snapshot the node values so we can manually check. + expect(expectedNodeValues).toMatchSnapshot(); + + // Check if the result matches. + expect(getActualNodeValues()).toBeDeepCloseTo(expectedNodeValues); + } + }); + + describe(`Multiple layers`, () => { + test(`_`, () => { + checkMasks( + [ + { weight: 0.4, maskItems: null }, + { weight: 0.6, maskItems: [[_1_2, false]] }, // The mask at non-last layer takes no effect + { weight: 0.8, maskItems: [[_1_1, false]] }, + ], + { + [_1_1]: [false, false, true], + [_1_2]: [false, true, false], + }, + ); + }); + + function checkMasks( + inputLayerConfigs: { + weight: number; + maskItems: (maskTestHelper.MaskItem[] | null); + }[], + expectedMaskEffects: Record, + ) { + for (const state of Object.values(expectedMaskEffects)) { + expect(state).toHaveLength(inputLayerConfigs.length); + } + + const { + rootNode, + nodeFixtures, + getActualNodeValues, + layerFixtures, + } = maskTestHelper.generateTestData(inputLayerConfigs.length); + + // Create the animation graph and evaluate. + const g = new AnimationGraph(); + for (let i = 0; i < inputLayerConfigs.length; ++i) { + generateLayer(g, inputLayerConfigs[i].weight, inputLayerConfigs[i].maskItems, layerFixtures[i].clip); + } + const graphEval = createAnimationGraphEval(g, rootNode); + graphEval.update(0.2 /* CAN BE ANY */); + + // Compute the expected node values. + const expectedNodeValues = nodeFixtures.reduce((result, { name, defaultValue, animationValues }) => { + const expectedMaskEffect = expectedMaskEffects[name]; + let expectedValue = defaultValue; + layerFixtures.forEach((_, layerIndex) => { + if (!expectedMaskEffect || !expectedMaskEffect[layerIndex]) { + // If the node has no mask at this layer, it will take effect. + expectedValue = lerp(expectedValue, animationValues[layerIndex], inputLayerConfigs[layerIndex].weight); + } + // Otherwise, the value is not changed. + }); + result[name] = expectedValue; + return result; + }, {} as Record); + + // Snapshot the node values so we can manually check. + expect(expectedNodeValues).toMatchSnapshot(); + + // Check if the result matches. + expect(getActualNodeValues()).toBeDeepCloseTo(expectedNodeValues); + } + }); + + test('Cooperate with empty state', () => { + const { + rootNode, + nodeFixtures, + getActualNodeValues, + layerFixtures, + } = maskTestHelper.generateTestData(2); + + const animationGraph = new AnimationGraph(); + // Layer 0 + generateLayer(animationGraph, 0.4, null, layerFixtures[0].clip); + // Layer 1 + { + const l = animationGraph.addLayer(); + l.weight = 0.6; + l.mask = maskTestHelper.createMask([[_1_1, false]]); + + const motion = l.stateMachine.addMotion(); + const clipMotion = motion.motion = new ClipMotion(); + const clip = clipMotion.clip = layerFixtures[1].clip; + clip.enableTrsBlending = true; // 👀 + + const emptyState = l.stateMachine.addEmpty(); + + // Entry -> Empty + l.stateMachine.connect(l.stateMachine.entryState, emptyState); + + // Boolean variable b. Which make Empty->Motion if true, make Motion->Empty otherwise. + animationGraph.addBoolean('b', false); + + // Empty -> Motion + const tEmptyToMotion = l.stateMachine.connect(emptyState, motion); + { + tEmptyToMotion.duration = 0.2; + const [condition] = tEmptyToMotion.conditions = [new UnaryCondition()]; + condition.operator = UnaryCondition.Operator.TRUTHY; + condition.operand.variable = 'b'; + } + + // Motion -> Empty + const tMotionToEmpty = l.stateMachine.connect(motion, emptyState); + { + tMotionToEmpty.duration = 0.2; + tMotionToEmpty.exitConditionEnabled = false; + const [condition] = tMotionToEmpty.conditions = [new UnaryCondition()]; + condition.operator = UnaryCondition.Operator.FALSY; + condition.operand.variable = 'b'; + } + } + + const graphEval = createAnimationGraphEval(animationGraph, rootNode); + const graphUpdater = new GraphUpdater(graphEval); + + // Initially, since layer1 is in empty state, it is as if only layer 0 is running. + // The mask takes no effect at all. + graphUpdater.step(0.2); + { + const expectedNodeValues = nodeFixtures.reduce((result, { name, defaultValue, animationValues }) => { + result[name] = lerp(defaultValue, animationValues[0], 0.4); + return result; + }, {} as Record); + expect(getActualNodeValues()).toBeDeepCloseTo(expectedNodeValues); + } + + // Then we trigger Empty->Motion, during the transition, mask shall take effect. + graphEval.setValue('b', true); + graphUpdater.step(0.15); + { + const expectedNodeValues = nodeFixtures.reduce((result, { name, defaultValue, animationValues }) => { + let expectedValue = result[name] = lerp(defaultValue, animationValues[0], 0.4); + if (name === _1_1) { // Masked + ; + } else { + const layer1Result = lerp( + expectedValue, // Empty state + animationValues[1], // Motion state + 0.15 / 0.2, + ); + expectedValue = lerp(expectedValue, layer1Result, 0.6); + } + result[name] = expectedValue; + return result; + }, {} as Record); + expect(getActualNodeValues()).toBeDeepCloseTo(expectedNodeValues); + } + + // Finish the transition. Skip check on this easy case. + graphUpdater.step(0.1); + + // Trigger Motion->Empty, during the transition, mask shall take effect. + graphEval.setValue('b', false); + graphUpdater.step(0.15); + { + const expectedNodeValues = nodeFixtures.reduce((result, { name, defaultValue, animationValues }) => { + let expectedValue = result[name] = lerp(defaultValue, animationValues[0], 0.4); + if (name === _1_1) { // Masked + ; + } else { + const layer1Result = lerp( + animationValues[1], // Motion state + expectedValue, // Empty state + 0.15 / 0.2, + ); + expectedValue = lerp(expectedValue, layer1Result, 0.6); + } + result[name] = expectedValue; + return result; + }, {} as Record); + expect(getActualNodeValues()).toBeDeepCloseTo(expectedNodeValues); + } + }); + + function generateLayer( + graph: AnimationGraph, + weight: number, + maskItems: maskTestHelper.MaskItem[] | null, + clip: AnimationClip, + ) { + const l = graph.addLayer(); + l.weight = weight; + l.mask = maskItems ? maskTestHelper.createMask(maskItems) : null; + const motion = l.stateMachine.addMotion(); + const clipMotion = motion.motion = new ClipMotion(); + clipMotion.clip = clip; + clip.enableTrsBlending = true; // 👀 + l.stateMachine.connect(l.stateMachine.entryState, motion); + } + }); }); function assertivelyGetGraphVariable(graph: AnimationGraph, name: string) { From 9d3280eeffbea27f9cf1d6ba55334edb7b5493f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leslie=20Leigh=20=28=E6=9D=8E=E7=9A=84=E5=BA=8F=29?= Date: Thu, 3 Nov 2022 10:45:56 +0800 Subject: [PATCH 134/829] Add component-wise animation test (#13204) * Add component-wise animation test * update * Specially handle Vec3 --- .../__snapshots__/animation-clip.test.ts.snap | 81 +++++++ tests/animation/animation-clip.test.ts | 207 +++++++++++++++++- 2 files changed, 285 insertions(+), 3 deletions(-) create mode 100644 tests/animation/__snapshots__/animation-clip.test.ts.snap diff --git a/tests/animation/__snapshots__/animation-clip.test.ts.snap b/tests/animation/__snapshots__/animation-clip.test.ts.snap new file mode 100644 index 00000000000..dc2710730b6 --- /dev/null +++ b/tests/animation/__snapshots__/animation-clip.test.ts.snap @@ -0,0 +1,81 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Component-wise animation Animation graph 1`] = ` +Array [ + Object { + "defaultProperties": Object { + "x": 0.1, + "y": 0.23333333333333334, + "z": 0.3666666666666667, + }, + "expectedAnimatedProperties": Object { + "x": 0.5, + "z": 0.75, + }, + "specName": "Vec3", + }, +] +`; + +exports[`Component-wise animation Traditional 1`] = ` +Array [ + Object { + "defaultProperties": Object { + "x": 0.1, + "y": 0.30000000000000004, + }, + "expectedAnimatedProperties": Object { + "y": 0.5, + }, + "specName": "Vec2", + }, + Object { + "defaultProperties": Object { + "x": 0.1, + "y": 0.23333333333333334, + "z": 0.3666666666666667, + }, + "expectedAnimatedProperties": Object { + "x": 0.5, + "z": 0.75, + }, + "specName": "Vec3", + }, + Object { + "defaultProperties": Object { + "w": 0.1, + "x": 0.2, + "y": 0.30000000000000004, + "z": 0.4, + }, + "expectedAnimatedProperties": Object { + "w": 0.75, + "x": 0.5, + }, + "specName": "Vec4", + }, + Object { + "defaultProperties": Object { + "a": 25, + "b": 51, + "g": 76, + "r": 102, + }, + "expectedAnimatedProperties": Object { + "a": 191, + "r": 127, + }, + "specName": "Color", + }, + Object { + "defaultProperties": Object { + "height": 0.1, + "width": 0.30000000000000004, + }, + "expectedAnimatedProperties": Object { + "width": 0.5, + }, + "specName": "Size", + }, +] +`; diff --git a/tests/animation/animation-clip.test.ts b/tests/animation/animation-clip.test.ts index 55978943b1e..6aadcf78eb9 100644 --- a/tests/animation/animation-clip.test.ts +++ b/tests/animation/animation-clip.test.ts @@ -1,9 +1,13 @@ -import { js, Vec3 } from '../../cocos/core'; +import { Color, js, lerp, Quat, Rect, Size, Vec2, Vec3, Vec4 } from '../../cocos/core'; import { AnimationClip, AnimationState, AnimationManager } from '../../cocos/animation'; -import { ComponentPath, HierarchyPath, IValueProxyFactory, RealTrack, VectorTrack } from '../../cocos/animation/animation'; +import { AnimationController, ColorTrack, ComponentPath, HierarchyPath, IValueProxyFactory, RealTrack, SizeTrack, Track, VectorTrack } from '../../cocos/animation/animation'; import { ccclass } from 'cc.decorator'; import { captureErrorIDs, captureWarnIDs } from '../utils/log-capture'; import { Node,Component } from '../../cocos/scene-graph'; +import { LegacyBlendStateBuffer } from '../../cocos/3d/skeletal-animation/skeletal-animation-blending'; +import { AnimationGraph } from '../../cocos/animation/marionette/animation-graph'; +import { ClipMotion } from '../../cocos/animation/marionette/clip-motion'; +import { AnimationGraphEval } from '../../cocos/animation/marionette/graph-eval'; test('Common target', () => { @ccclass('TestComponent') @@ -258,4 +262,201 @@ test('Warn on track binding failure', () => { node.name, ]); warnIDWatcher.stop(); -}); \ No newline at end of file +}); + +describe(`Component-wise animation`, () => { + /** + * This test the component-wise animation capability of animation clips. + * Both traditional environment(animation state) and marionette environment(animation graph) are tested. + * + * Our test goal includes `Vec2`, `Vec3`, `Vec4`, `Color`, `Size` objects. + * For animation graph environment, we only tested `Vec3` since animation graph only interests on `Vec3`. + * Other types of track have no such component-wise animation capabilities. + */ + const _note = undefined; + + const newVecXTrack = (x: 2 | 3 | 4) => { const track = new VectorTrack(); track.componentsCount = x; return track; }; + + /** The specs for each value type. See `Spec` for description. */ + const SPECS = [ + { // vec2 + constructor: Vec2, + defaultKeys: [['x', 0]] as const, + animatedKeys: [['y', 1]] as const, + createTrack: () => newVecXTrack(2), + } as Spec, + { // vec3 + constructor: Vec3, + defaultKeys: [['y', 1]] as const, + animatedKeys: [['x', 0], ['z', 2]] as const, + createTrack: () => newVecXTrack(3), + } as Spec, + { // vec4 + constructor: Vec4, + defaultKeys: [['y', 1], ['z', 2]] as const, + animatedKeys: [['x', 0], ['w', 3]] as const, + createTrack: () => newVecXTrack(4), + } as Spec, + { // color + constructor: Color, + range: [0, 255], + defaultKeys: [['g', 1], ['b', 2]] as const, + animatedKeys: [['r', 0], ['a', 3]] as const, + createTrack: () => new ColorTrack(), + } as Spec, + { // size + constructor: Size, + defaultKeys: [['height', 1]] as const, + animatedKeys: [['width', 0]] as const, + createTrack: () => new SizeTrack() + } as Spec, + ]; + + test(`Traditional`, () => { + check(evaluateClipSingleFrameTraditional, SPECS); + }); + + test(`Animation graph`, () => { + // For animation graph we only check vec3 since currently we don't want to support other type of value types. + check( + evaluateClipSingleFrameMarionette, + SPECS.filter((spec) => spec.constructor === Vec3), + ); + }); + + function check(evaluate: EvaluateClipSingleFrame, specs: typeof SPECS) { + const node = new Node(); + + @ccclass('DummyComponent') + class DummyComponent extends Component { } + const component = node.addComponent(DummyComponent); + + const clip = new AnimationClip(); + clip.duration = 1.0; + + const TIME = 0.2; + + // Generate test data. + const expects = specs.map(({ constructor, defaultKeys, animatedKeys, range, createTrack }) => { + /** Generates a fixed value at [tMin, tMax) according to array index and array length. */ + const gen = (keyIndex: number, keyCount: number, tMin: number, tMax: number) => { + const t = tMin + (tMax - tMin) * (keyIndex / keyCount); + return range ? lerp(range[0], range[1], t) : t; + }; + + // Generate default value for each key at [0.1, 0.5). + const defaultValue = new constructor(); + const defaultProperties: Record = {}; + [...defaultKeys, ...animatedKeys].sort().forEach(([propertyKey, _], keyIndex, keys) => { + const propertyValue = gen(keyIndex, keys.length, 0.1, 0.5); + defaultValue[propertyKey] = propertyValue; + defaultProperties[propertyKey] = defaultValue[propertyKey]; // Don't use `= propertyValue` here since for example, color matters + }); + + // Register the value to the dummy component so animation system can animate it. + if (constructor === Vec3) { // Specially handle `Vec3` + node.position = (defaultValue as Vec3).clone(); + } else { + Object.defineProperty(component, constructor.name, { value: defaultValue.clone(), writable: true }); + } + + // Create the track and generate some animation values at [0.5, 1.0) for animated keys. + const track = createTrack(); + if (constructor === Vec3) { + track.path.toProperty('position'); + } else { + track.path.toComponent(DummyComponent).toProperty(constructor.name); + } + const expectedAnimatedProperties: Record = {}; + [...animatedKeys].forEach(([propertyKey, channelIndex], keyIndex, keys) => { + const propertyAnimationValue = gen(keyIndex, keys.length, 0.5, 1.0); + [...track.channels()][channelIndex].curve.addKeyFrame(0.0, propertyAnimationValue); + const o = new constructor(); + o[propertyKey] = propertyAnimationValue; + expectedAnimatedProperties[propertyKey] = o[propertyKey]; + }); + clip.addTrack(track); + + return { + specName: constructor.name, // To showup in snapshot + defaultProperties, + expectedAnimatedProperties, + }; + }); + + // Let's inline the expectation so we can check manually 👀. + expect(expects).toMatchSnapshot(); + + // Evaluate. + evaluate(clip, node, TIME); + + // Check test data. + specs.forEach(({ constructor, defaultKeys, animatedKeys }, specIndex) => { + const { + defaultProperties, + expectedAnimatedProperties, + } = expects[specIndex]; + const object = constructor === Vec3 + ? node.position + : component[constructor.name]; + // These properties should keep default. + for (const [propertyKey] of defaultKeys) { + expect(object[propertyKey]).toBe(defaultProperties[propertyKey]); + } + // These properties should be animated. + for (const [propertyKey] of animatedKeys) { + expect(object[propertyKey]).toBeCloseTo(expectedAnimatedProperties[propertyKey]); + } + }); + + js.unregisterClass(DummyComponent); + } + + type PropertyKeyAndChannelIndex = [ + /** The property key we're going to observe. */ + propertyKey: keyof T, + + /** The corresponding channel index in created track. */ + channelIndex: number, + ]; + + /** Describes a spec to test "component-wise animation". */ + interface Spec { + /** The value's constructor. */ + constructor: new () => T; + + /** These keys of the value will be checked to remain default. */ + defaultKeys: readonly Readonly>[]; + + /** These keys of the value will be checked to be corresponding animation values. */ + animatedKeys: readonly Readonly>[]; + + /** Creates a track which yields such a value. */ + createTrack: () => Track; + + /** By default, the test routine generates values at (0, 1). Use this field to map the value into specified range. */ + range?: [min: number, max:number]; + } +}); + +type EvaluateClipSingleFrame = (clip: AnimationClip, node: Node, time: number) => void; + +function evaluateClipSingleFrameTraditional(clip: AnimationClip, node: Node, time: number) { + const blendStateBuffer = new LegacyBlendStateBuffer(); + const animationState = new AnimationState(clip); + animationState.initialize(node, blendStateBuffer); + animationState.time = time; + animationState.sample(); +} + +function evaluateClipSingleFrameMarionette (clip: AnimationClip, node: Node, time: number) { + const animationGraph = new AnimationGraph(); + const layer = animationGraph.addLayer(); + const motion = layer.stateMachine.addMotion(); + const clipMotion = motion.motion = new ClipMotion(); + clipMotion.clip = clip; + layer.stateMachine.connect(layer.stateMachine.entryState, motion); + const controller = node.addComponent(AnimationController) as AnimationController; + const graphEval = new AnimationGraphEval(animationGraph, node, controller); + graphEval.update(time); +} \ No newline at end of file From 726af0b5d70bc782bc8a47489b0df807fad5fa10 Mon Sep 17 00:00:00 2001 From: SijieWang Date: Thu, 3 Nov 2022 20:11:49 +0800 Subject: [PATCH 135/829] [Feature] Optimize high-quality mode parameters (#13228) * [Feature] Optimize high-quality mode parameters * review code * review code --- cocos/3d/framework/mesh-renderer.ts | 8 + .../3d/lights/directional-light-component.ts | 11 + .../assets/default_file_content/scene-quality | 407 ++++++++++++++++++ .../default_file_content/scene-quality.meta | 12 + 4 files changed, 438 insertions(+) create mode 100644 editor/assets/default_file_content/scene-quality create mode 100644 editor/assets/default_file_content/scene-quality.meta diff --git a/cocos/3d/framework/mesh-renderer.ts b/cocos/3d/framework/mesh-renderer.ts index 5f4c459c6c1..860b71faad7 100644 --- a/cocos/3d/framework/mesh-renderer.ts +++ b/cocos/3d/framework/mesh-renderer.ts @@ -41,6 +41,7 @@ import { property } from '../../core/data/class-decorator'; import { NodeEventType } from '../../scene-graph/node-event'; import { Texture } from '../../gfx'; import { builtinResMgr } from '../../asset/asset-manager/builtin-res-mgr'; +import { settings, Settings } from '../../core/settings'; const USE_REFLECTION_PROBE = 'USE_REFLECTION_PROBE'; /** @@ -433,6 +434,13 @@ export class MeshRenderer extends ModelRenderer { constructor () { super(); this._modelType = scene.Model; + + const highQualityMode = settings.querySettings(Settings.Category.RENDERING, 'highQualityMode'); + if (highQualityMode) { + this._shadowCastingMode = ModelShadowCastingMode.ON; + this.lightmapSettings.castShadow = true; + this.lightmapSettings.receiveShadow = true; + } } public onLoad () { diff --git a/cocos/3d/lights/directional-light-component.ts b/cocos/3d/lights/directional-light-component.ts index 1a036d5a26a..39e884e41d3 100644 --- a/cocos/3d/lights/directional-light-component.ts +++ b/cocos/3d/lights/directional-light-component.ts @@ -31,6 +31,7 @@ import { cclegacy, clamp, warnID, CCBoolean, CCFloat } from '../../core'; import { Camera, PCFType, Shadows, ShadowType, CSMOptimizationMode, CSMLevel } from '../../render-scene/scene'; import { Root } from '../../root'; import { property } from '../../core/data/class-decorator'; +import { settings, Settings } from '../../core/settings'; /** * @en The directional light component, only one real time directional light is permitted in one scene, it act as the main light of the scene. @@ -460,6 +461,16 @@ export class DirectionalLight extends Light { constructor () { super(); this._lightType = scene.DirectionalLight; + + const highQualityMode = settings.querySettings(Settings.Category.RENDERING, 'highQualityMode'); + + if (highQualityMode) { + this._shadowPcf = PCFType.SOFT_2X; + this._shadowDistance = 50; + this.enableCSM = true; + this.staticSettings.bakeable = true; + this.staticSettings.castShadow = true; + } } protected _createLight () { diff --git a/editor/assets/default_file_content/scene-quality b/editor/assets/default_file_content/scene-quality new file mode 100644 index 00000000000..eb5b2c23e7e --- /dev/null +++ b/editor/assets/default_file_content/scene-quality @@ -0,0 +1,407 @@ +[ + { + "__type__": "cc.SceneAsset", + "_name": "", + "_objFlags": 0, + "_native": "", + "scene": { + "__id__": 1 + } + }, + { + "__type__": "cc.Scene", + "_name": "scene-quality", + "_objFlags": 0, + "_parent": null, + "_children": [ + { + "__id__": 2 + }, + { + "__id__": 5 + } + ], + "_active": true, + "_components": [], + "_prefab": null, + "_lpos": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_mobility": 0, + "_layer": 1073741824, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "autoReleaseAssets": false, + "_globals": { + "__id__": 7 + }, + "_reflectionProbeId": 0, + "_id": "19323c5d-5d36-438a-86ee-8288c690e5b0" + }, + { + "__type__": "cc.Node", + "_name": "Main Light", + "_objFlags": 0, + "_parent": { + "__id__": 1 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 3 + } + ], + "_prefab": null, + "_lpos": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": -0.06397656665577071, + "y": -0.44608233363525845, + "z": -0.8239028751062036, + "w": -0.3436591377065261 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_mobility": 0, + "_layer": 1073741824, + "_euler": { + "__type__": "cc.Vec3", + "x": -117.894, + "y": -194.909, + "z": 38.562 + }, + "_id": "c0y6F5f+pAvI805TdmxIjx" + }, + { + "__type__": "cc.DirectionalLight", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 2 + }, + "_enabled": true, + "__prefab": null, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 250, + "b": 240, + "a": 255 + }, + "_useColorTemperature": false, + "_colorTemperature": 6550, + "_staticSettings": { + "__id__": 4 + }, + "_visibility": -325058561, + "_illuminanceHDR": 65000, + "_illuminance": 65000, + "_illuminanceLDR": 1.6927083333333335, + "_shadowEnabled": true, + "_shadowPcf": 2, + "_shadowBias": 0.00001, + "_shadowNormalBias": 0, + "_shadowSaturation": 1, + "_shadowDistance": 50, + "_shadowInvisibleOcclusionRange": 200, + "_csmLevel": 4, + "_csmLayerLambda": 0.75, + "_csmOptimizationMode": 2, + "_shadowFixedArea": false, + "_shadowNear": 0.1, + "_shadowFar": 10, + "_shadowOrthoSize": 5, + "_id": "597uMYCbhEtJQc0ffJlcgA" + }, + { + "__type__": "cc.StaticLightSettings", + "_baked": false, + "_editorOnly": false, + "_bakeable": true, + "_castShadow": true + }, + { + "__type__": "cc.Node", + "_name": "Main Camera", + "_objFlags": 0, + "_parent": { + "__id__": 1 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 6 + } + ], + "_prefab": null, + "_lpos": { + "__type__": "cc.Vec3", + "x": -10, + "y": 10, + "z": 10 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": -0.27781593346944056, + "y": -0.36497167621709875, + "z": -0.11507512748638377, + "w": 0.8811195706053617 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_mobility": 0, + "_layer": 1073741824, + "_euler": { + "__type__": "cc.Vec3", + "x": -35, + "y": -45, + "z": 0 + }, + "_id": "c9DMICJLFO5IeO07EPon7U" + }, + { + "__type__": "cc.Camera", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 5 + }, + "_enabled": true, + "__prefab": null, + "_projection": 1, + "_priority": 0, + "_fov": 45, + "_fovAxis": 0, + "_orthoHeight": 10, + "_near": 1, + "_far": 1000, + "_color": { + "__type__": "cc.Color", + "r": 51, + "g": 51, + "b": 51, + "a": 255 + }, + "_depth": 1, + "_stencil": 0, + "_clearFlags": 14, + "_rect": { + "__type__": "cc.Rect", + "x": 0, + "y": 0, + "width": 1, + "height": 1 + }, + "_aperture": 19, + "_shutter": 7, + "_iso": 0, + "_screenScale": 1, + "_visibility": 1822425087, + "_targetTexture": null, + "_cameraType": -1, + "_trackingType": 0, + "_id": "7dWQTpwS5LrIHnc1zAPUtf" + }, + { + "__type__": "cc.SceneGlobals", + "ambient": { + "__id__": 8 + }, + "shadows": { + "__id__": 9 + }, + "_skybox": { + "__id__": 10 + }, + "fog": { + "__id__": 11 + }, + "octree": { + "__id__": 12 + }, + "lightProbeInfo": { + "__id__": 13 + } + }, + { + "__type__": "cc.AmbientInfo", + "_skyColorHDR": { + "__type__": "cc.Vec4", + "x": 0.21465, + "y": 0.34977, + "z": 0.576641, + "w": 0.520833125 + }, + "_skyColor": { + "__type__": "cc.Vec4", + "x": 0.21465, + "y": 0.34977, + "z": 0.576641, + "w": 0.520833125 + }, + "_skyIllumHDR": 20000, + "_skyIllum": 20000, + "_groundAlbedoHDR": { + "__type__": "cc.Vec4", + "x": 0.245603, + "y": 0.246646, + "z": 0.251197, + "w": 0 + }, + "_groundAlbedo": { + "__type__": "cc.Vec4", + "x": 0.245603, + "y": 0.246646, + "z": 0.251197, + "w": 0 + }, + "_skyColorLDR": { + "__type__": "cc.Vec4", + "x": 0.36244, + "y": 0.486029, + "z": 0.632565, + "w": 0.5208 + }, + "_skyIllumLDR": 0.5208, + "_groundAlbedoLDR": { + "__type__": "cc.Vec4", + "x": 0.437391, + "y": 0.436011, + "z": 0.436589, + "w": 0 + } + }, + { + "__type__": "cc.ShadowsInfo", + "_enabled": true, + "_type": 1, + "_normal": { + "__type__": "cc.Vec3", + "x": 0, + "y": 1, + "z": 0 + }, + "_distance": 0, + "_shadowColor": { + "__type__": "cc.Color", + "r": 76, + "g": 76, + "b": 76, + "a": 255 + }, + "_maxReceived": 4, + "_size": { + "__type__": "cc.Vec2", + "x": 2048, + "y": 2048 + } + }, + { + "__type__": "cc.SkyboxInfo", + "_envLightingType": 1, + "_envmapHDR": { + "__uuid__": "d032ac98-05e1-4090-88bb-eb640dcb5fc1@b47c0", + "__expectedType__": "cc.TextureCube" + }, + "_envmap": { + "__uuid__": "d032ac98-05e1-4090-88bb-eb640dcb5fc1@b47c0", + "__expectedType__": "cc.TextureCube" + }, + "_envmapLDR": { + "__uuid__": "6f01cf7f-81bf-4a7e-bd5d-0afc19696480@b47c0", + "__expectedType__": "cc.TextureCube" + }, + "_diffuseMapHDR": null, + "_diffuseMapLDR": null, + "_enabled": true, + "_useHDR": true, + "_editableMaterial": null, + "_reflectionHDR": null, + "_reflectionLDR": null, + "_rotationAngle": 0 + }, + { + "__type__": "cc.FogInfo", + "_type": 0, + "_fogColor": { + "__type__": "cc.Color", + "r": 200, + "g": 200, + "b": 200, + "a": 255 + }, + "_enabled": false, + "_fogDensity": 0.3, + "_fogStart": 0.5, + "_fogEnd": 300, + "_fogAtten": 5, + "_fogTop": 1.5, + "_fogRange": 1.2, + "_accurate": false + }, + { + "__type__": "cc.OctreeInfo", + "_enabled": false, + "_minPos": { + "__type__": "cc.Vec3", + "x": -1024, + "y": -1024, + "z": -1024 + }, + "_maxPos": { + "__type__": "cc.Vec3", + "x": 1024, + "y": 1024, + "z": 1024 + }, + "_depth": 8 + }, + { + "__type__": "cc.LightProbeInfo", + "_enabled": false, + "_giScale": 1, + "_giSamples": 1024, + "_bounces": 2, + "_reduceRinging": 0, + "_showProbe": true, + "_showWireframe": true, + "_showConvex": false, + "_data": null, + "_lightProbeGroups": [] + } + ] diff --git a/editor/assets/default_file_content/scene-quality.meta b/editor/assets/default_file_content/scene-quality.meta new file mode 100644 index 00000000000..cc1028935a9 --- /dev/null +++ b/editor/assets/default_file_content/scene-quality.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.0.0", + "importer": "*", + "imported": true, + "uuid": "1d5e3139-1826-4b4a-8c4c-2e7b6874a474", + "files": [ + "", + ".json" + ], + "subMetas": {}, + "userData": {} +} From 809f3a8c3600020120405c8f31ffc5f7cb0ce5be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=90=89=E6=9E=97?= <798080536@qq.com> Date: Fri, 4 Nov 2022 09:56:18 +0800 Subject: [PATCH 136/829] light probe optimization the 2nd iteration (#13235) --- cocos/gi/light-probe/delaunay.ts | 223 ++++++++++++++------- cocos/gi/light-probe/light-probe-group.ts | 3 +- cocos/scene-graph/scene-globals.ts | 6 +- native/cocos/bindings/auto/jsb_gi_auto.cpp | 54 ++--- native/cocos/gi/light-probe/Delaunay.cpp | 12 +- native/cocos/gi/light-probe/Delaunay.h | 97 +++++++-- 6 files changed, 272 insertions(+), 123 deletions(-) diff --git a/cocos/gi/light-probe/delaunay.ts b/cocos/gi/light-probe/delaunay.ts index 33c41f76889..656057ce8d2 100644 --- a/cocos/gi/light-probe/delaunay.ts +++ b/cocos/gi/light-probe/delaunay.ts @@ -26,6 +26,16 @@ import { ccclass, serializable } from 'cc.decorator'; import { Mat3, EPSILON, Vec3, warnID } from '../../core'; +const _mat = new Mat3(); +const _n = new Vec3(0.0, 0.0, 0.0); + +const _a = new Vec3(0.0, 0.0, 0.0); +const _ap = new Vec3(0.0, 0.0, 0.0); +const _b = new Vec3(0.0, 0.0, 0.0); +const _bp = new Vec3(0.0, 0.0, 0.0); +const _p2 = new Vec3(0.0, 0.0, 0.0); +const _cp = new Vec3(0.0, 0.0, 0.0); + @ccclass('cc.Vertex') export class Vertex { @serializable @@ -53,20 +63,31 @@ class Edge { public constructor (tet: number, i: number, v0: number, v1: number) { this.tetrahedron = tet; this.index = i; - this.vertex0 = v0; - this.vertex1 = v1; + + if (v0 < v1) { + this.vertex0 = v0; + this.vertex1 = v1; + } else { + this.vertex0 = v1; + this.vertex1 = v0; + } } public set (tet: number, i: number, v0: number, v1: number) { this.tetrahedron = tet; this.index = i; - this.vertex0 = v0; - this.vertex1 = v1; + + if (v0 < v1) { + this.vertex0 = v0; + this.vertex1 = v1; + } else { + this.vertex0 = v1; + this.vertex1 = v0; + } } public isSame (other: Edge) { - return ((this.vertex0 === other.vertex0 && this.vertex1 === other.vertex1) - || (this.vertex0 === other.vertex1 && this.vertex1 === other.vertex0)); + return (this.vertex0 === other.vertex0 && this.vertex1 === other.vertex1); } } @@ -91,31 +112,78 @@ class Triangle { public constructor (tet: number, i: number, v0: number, v1: number, v2: number, v3: number) { this.tetrahedron = tet; this.index = i; - this.vertex0 = v0; - this.vertex1 = v1; - this.vertex2 = v2; this.vertex3 = v3; + + if (v0 < v1 && v0 < v2) { + this.vertex0 = v0; + if (v1 < v2) { + this.vertex1 = v1; + this.vertex2 = v2; + } else { + this.vertex1 = v2; + this.vertex2 = v1; + } + } else if (v1 < v0 && v1 < v2) { + this.vertex0 = v1; + if (v0 < v2) { + this.vertex1 = v0; + this.vertex2 = v2; + } else { + this.vertex1 = v2; + this.vertex2 = v0; + } + } else { + this.vertex0 = v2; + if (v0 < v1) { + this.vertex1 = v0; + this.vertex2 = v1; + } else { + this.vertex1 = v1; + this.vertex2 = v0; + } + } } public set (tet: number, i: number, v0: number, v1: number, v2: number, v3: number) { + this.invalid = false; + this.isOuterFace = true; + this.tetrahedron = tet; this.index = i; - this.vertex0 = v0; - this.vertex1 = v1; - this.vertex2 = v2; this.vertex3 = v3; - this.invalid = false; - this.isOuterFace = true; + if (v0 < v1 && v0 < v2) { + this.vertex0 = v0; + if (v1 < v2) { + this.vertex1 = v1; + this.vertex2 = v2; + } else { + this.vertex1 = v2; + this.vertex2 = v1; + } + } else if (v1 < v0 && v1 < v2) { + this.vertex0 = v1; + if (v0 < v2) { + this.vertex1 = v0; + this.vertex2 = v2; + } else { + this.vertex1 = v2; + this.vertex2 = v0; + } + } else { + this.vertex0 = v2; + if (v0 < v1) { + this.vertex1 = v0; + this.vertex2 = v1; + } else { + this.vertex1 = v1; + this.vertex2 = v0; + } + } } public isSame (other: Triangle) { - return ((this.vertex0 === other.vertex0 && this.vertex1 === other.vertex1 && this.vertex2 === other.vertex2) - || (this.vertex0 === other.vertex0 && this.vertex1 === other.vertex2 && this.vertex2 === other.vertex1) - || (this.vertex0 === other.vertex1 && this.vertex1 === other.vertex0 && this.vertex2 === other.vertex2) - || (this.vertex0 === other.vertex1 && this.vertex1 === other.vertex2 && this.vertex2 === other.vertex0) - || (this.vertex0 === other.vertex2 && this.vertex1 === other.vertex0 && this.vertex2 === other.vertex1) - || (this.vertex0 === other.vertex2 && this.vertex1 === other.vertex1 && this.vertex2 === other.vertex0)); + return (this.vertex0 === other.vertex0 && this.vertex1 === other.vertex1 && this.vertex2 === other.vertex2); } } @@ -128,21 +196,21 @@ export class CircumSphere { public init (p0: Vec3, p1: Vec3, p2: Vec3, p3: Vec3) { // calculate circumsphere of 4 points in R^3 space. - const mat = new Mat3( + _mat.set( p1.x - p0.x, p1.y - p0.y, p1.z - p0.z, p2.x - p0.x, p2.y - p0.y, p2.z - p0.z, p3.x - p0.x, p3.y - p0.y, p3.z - p0.z, ); - mat.invert(); - mat.transpose(); + _mat.invert(); + _mat.transpose(); - const n = new Vec3( + _n.set( ((p1.x + p0.x) * (p1.x - p0.x) + (p1.y + p0.y) * (p1.y - p0.y) + (p1.z + p0.z) * (p1.z - p0.z)) * 0.5, ((p2.x + p0.x) * (p2.x - p0.x) + (p2.y + p0.y) * (p2.y - p0.y) + (p2.z + p0.z) * (p2.z - p0.z)) * 0.5, ((p3.x + p0.x) * (p3.x - p0.x) + (p3.y + p0.y) * (p3.y - p0.y) + (p3.z + p0.z) * (p3.z - p0.z)) * 0.5, ); - Vec3.transformMat3(this.center, n, mat); + Vec3.transformMat3(this.center, _n, _mat); this.radiusSquared = Vec3.squaredDistance(p0, this.center); } } @@ -326,11 +394,12 @@ export class Delaunay { private addProbe (vertexIndex: number) { const probe = this._probes[vertexIndex]; + const position = probe.position; let triangleIndex = 0; for (let i = 0; i < this._tetrahedrons.length; i++) { const tetrahedron = this._tetrahedrons[i]; - if (tetrahedron.isInCircumSphere(probe.position)) { + if (tetrahedron.isInCircumSphere(position)) { tetrahedron.invalid = true; this.addTriangle(triangleIndex, i, 0, tetrahedron.vertex1, tetrahedron.vertex3, tetrahedron.vertex2, tetrahedron.vertex0); @@ -342,10 +411,15 @@ export class Delaunay { } for (let i = 0; i < triangleIndex; i++) { + if (this._triangles[i].invalid) { + continue; + } + for (let k = i + 1; k < triangleIndex; k++) { if (this._triangles[i].isSame(this._triangles[k])) { this._triangles[i].invalid = true; this._triangles[k].invalid = true; + break; } } } @@ -386,6 +460,10 @@ export class Delaunay { } for (let i = 0; i < triangleIndex; i++) { + if (!this._triangles[i].isOuterFace) { + continue; + } + for (let k = i + 1; k < triangleIndex; k++) { if (this._triangles[i].isSame(this._triangles[k])) { // update adjacency between tetrahedrons @@ -497,61 +575,56 @@ export class Delaunay { p[1] = this._probes[tetrahedron.vertex1].position; p[2] = this._probes[tetrahedron.vertex2].position; - const a = new Vec3(0.0, 0.0, 0.0); - Vec3.subtract(a, p[0], p[2]); - const ap = new Vec3(0.0, 0.0, 0.0); - Vec3.subtract(ap, v[0], v[2]); - const b = new Vec3(0.0, 0.0, 0.0); - Vec3.subtract(b, p[1], p[2]); - const bp = new Vec3(0.0, 0.0, 0.0); - Vec3.subtract(bp, v[1], v[2]); - const p2 = new Vec3(p[2]); - const cp = new Vec3(0.0, 0.0, 0.0); - Vec3.negate(cp, v[2]); + Vec3.subtract(_a, p[0], p[2]); + Vec3.subtract(_ap, v[0], v[2]); + Vec3.subtract(_b, p[1], p[2]); + Vec3.subtract(_bp, v[1], v[2]); + _p2.set(p[2]); + Vec3.negate(_cp, v[2]); const m: number[] = []; - m[0] = ap.y * bp.z - ap.z * bp.y; - m[3] = -ap.x * bp.z + ap.z * bp.x; - m[6] = ap.x * bp.y - ap.y * bp.x; - m[9] = a.x * bp.y * cp.z - - a.y * bp.x * cp.z - + ap.x * b.y * cp.z - - ap.y * b.x * cp.z - + a.z * bp.x * cp.y - - a.z * bp.y * cp.x - + ap.z * b.x * cp.y - - ap.z * b.y * cp.x - - a.x * bp.z * cp.y - + a.y * bp.z * cp.x - - ap.x * b.z * cp.y - + ap.y * b.z * cp.x; - m[9] -= p2.x * m[0] + p2.y * m[3] + p2.z * m[6]; - - m[1] = ap.y * b.z + a.y * bp.z - ap.z * b.y - a.z * bp.y; - m[4] = -a.x * bp.z - ap.x * b.z + a.z * bp.x + ap.z * b.x; - m[7] = a.x * bp.y - a.y * bp.x + ap.x * b.y - ap.y * b.x; - m[10] = a.x * b.y * cp.z - - a.y * b.x * cp.z - - a.x * b.z * cp.y - + a.y * b.z * cp.x - + a.z * b.x * cp.y - - a.z * b.y * cp.x; - m[10] -= p2.x * m[1] + p2.y * m[4] + p2.z * m[7]; - - m[2] = -a.z * b.y + a.y * b.z; - m[5] = -a.x * b.z + a.z * b.x; - m[8] = a.x * b.y - a.y * b.x; + m[0] = _ap.y * _bp.z - _ap.z * _bp.y; + m[3] = -_ap.x * _bp.z + _ap.z * _bp.x; + m[6] = _ap.x * _bp.y - _ap.y * _bp.x; + m[9] = _a.x * _bp.y * _cp.z + - _a.y * _bp.x * _cp.z + + _ap.x * _b.y * _cp.z + - _ap.y * _b.x * _cp.z + + _a.z * _bp.x * _cp.y + - _a.z * _bp.y * _cp.x + + _ap.z * _b.x * _cp.y + - _ap.z * _b.y * _cp.x + - _a.x * _bp.z * _cp.y + + _a.y * _bp.z * _cp.x + - _ap.x * _b.z * _cp.y + + _ap.y * _b.z * _cp.x; + m[9] -= _p2.x * m[0] + _p2.y * m[3] + _p2.z * m[6]; + + m[1] = _ap.y * _b.z + _a.y * _bp.z - _ap.z * _b.y - _a.z * _bp.y; + m[4] = -_a.x * _bp.z - _ap.x * _b.z + _a.z * _bp.x + _ap.z * _b.x; + m[7] = _a.x * _bp.y - _a.y * _bp.x + _ap.x * _b.y - _ap.y * _b.x; + m[10] = _a.x * _b.y * _cp.z + - _a.y * _b.x * _cp.z + - _a.x * _b.z * _cp.y + + _a.y * _b.z * _cp.x + + _a.z * _b.x * _cp.y + - _a.z * _b.y * _cp.x; + m[10] -= _p2.x * m[1] + _p2.y * m[4] + _p2.z * m[7]; + + m[2] = -_a.z * _b.y + _a.y * _b.z; + m[5] = -_a.x * _b.z + _a.z * _b.x; + m[8] = _a.x * _b.y - _a.y * _b.x; m[11] = 0.0; - m[11] -= p2.x * m[2] + p2.y * m[5] + p2.z * m[8]; + m[11] -= _p2.x * m[2] + _p2.y * m[5] + _p2.z * m[8]; // coefficient of t^3 - const c = ap.x * bp.y * cp.z - - ap.y * bp.x * cp.z - + ap.z * bp.x * cp.y - - ap.z * bp.y * cp.x - + ap.y * bp.z * cp.x - - ap.x * bp.z * cp.y; + const c = _ap.x * _bp.y * _cp.z + - _ap.y * _bp.x * _cp.z + + _ap.z * _bp.x * _cp.y + - _ap.z * _bp.y * _cp.x + + _ap.y * _bp.z * _cp.x + - _ap.x * _bp.z * _cp.y; if (Math.abs(c) > EPSILON) { // t^3 + p * t^2 + q * t + r = 0 diff --git a/cocos/gi/light-probe/light-probe-group.ts b/cocos/gi/light-probe/light-probe-group.ts index 3319ffa9c3d..e0ca192b19f 100644 --- a/cocos/gi/light-probe/light-probe-group.ts +++ b/cocos/gi/light-probe/light-probe-group.ts @@ -203,7 +203,8 @@ export class LightProbeGroup extends Component { return; } + const updateTet = !this.node.scene.globals.lightProbeInfo.isUniqueGroup(); this.node.updateWorldTransform(); - this.onProbeChanged(); + this.onProbeChanged(updateTet); } } diff --git a/cocos/scene-graph/scene-globals.ts b/cocos/scene-graph/scene-globals.ts index 35b2400d981..f4ece68fdf0 100644 --- a/cocos/scene-graph/scene-globals.ts +++ b/cocos/scene-graph/scene-globals.ts @@ -1103,7 +1103,7 @@ export class LightProbeInfo { * @zh GI 采样数量 */ @editable - @range([64, 4096, 1]) + @range([64, 65536, 1]) @type(CCInteger) @tooltip('i18n:light_probe.giSamples') @displayName('GISamples') @@ -1263,6 +1263,10 @@ export class LightProbeInfo { } } + public isUniqueGroup (): boolean { + return this._lightProbeGroups.length === 1; + } + public addGroup (group: LightProbeGroup): boolean { if (!group) { return false; diff --git a/native/cocos/bindings/auto/jsb_gi_auto.cpp b/native/cocos/bindings/auto/jsb_gi_auto.cpp index 0dfd047a593..750f77ce3f0 100644 --- a/native/cocos/bindings/auto/jsb_gi_auto.cpp +++ b/native/cocos/bindings/auto/jsb_gi_auto.cpp @@ -406,7 +406,7 @@ se::Class* __jsb_cc_gi_CircumSphere_class = nullptr; se::Object* __jsb_cc_gi_CircumSphere_proto = nullptr; SE_DECLARE_FINALIZE_FUNC(js_delete_cc_gi_CircumSphere) -static bool js_cc_gi_CircumSphere_center_set(se::State& s) +static bool js_cc_gi_CircumSphere_radiusSquared_set(se::State& s) { CC_UNUSED bool ok = true; const auto& args = s.args(); @@ -415,36 +415,32 @@ static bool js_cc_gi_CircumSphere_center_set(se::State& s) arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - - // %typemap(in) SWIGTYPE value in - ok &= sevalue_to_native(args[0], &arg1->center, s.thisObject()); - SE_PRECONDITION2(ok, false, "CircumSphere_center_set,2,SWIGTYPE_Vec3"); - + // %typemap(in) int, short, long, signed char, float, double + ok &= sevalue_to_native(args[0], &arg1->radiusSquared, nullptr); + SE_PRECONDITION2(ok, false, "CircumSphere_radiusSquared_set,2,SWIGTYPE_float"); return true; } -SE_BIND_PROP_SET(js_cc_gi_CircumSphere_center_set) +SE_BIND_PROP_SET(js_cc_gi_CircumSphere_radiusSquared_set) -static bool js_cc_gi_CircumSphere_center_get(se::State& s) +static bool js_cc_gi_CircumSphere_radiusSquared_get(se::State& s) { CC_UNUSED bool ok = true; cc::gi::CircumSphere *arg1 = (cc::gi::CircumSphere *) NULL ; arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(out) SWIGTYPE - ok &= nativevalue_to_se(arg1->center, s.rval(), s.thisObject() /*ctx*/); - SE_PRECONDITION2(ok, false, "CircumSphere_center_get, Error processing arguments"); - SE_HOLD_RETURN_VALUE(arg1->center, s.thisObject(), s.rval()); + // out 1 + ok &= nativevalue_to_se(arg1->radiusSquared, s.rval(), s.thisObject() /*ctx*/); return true; } -SE_BIND_PROP_GET(js_cc_gi_CircumSphere_center_get) +SE_BIND_PROP_GET(js_cc_gi_CircumSphere_radiusSquared_get) -static bool js_cc_gi_CircumSphere_radiusSquared_set(se::State& s) +static bool js_cc_gi_CircumSphere_center_set(se::State& s) { CC_UNUSED bool ok = true; const auto& args = s.args(); @@ -453,30 +449,34 @@ static bool js_cc_gi_CircumSphere_radiusSquared_set(se::State& s) arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); - // %typemap(in) int, short, long, signed char, float, double - ok &= sevalue_to_native(args[0], &arg1->radiusSquared, nullptr); - SE_PRECONDITION2(ok, false, "CircumSphere_radiusSquared_set,2,SWIGTYPE_float"); + + // %typemap(in) SWIGTYPE value in + ok &= sevalue_to_native(args[0], &arg1->center, s.thisObject()); + SE_PRECONDITION2(ok, false, "CircumSphere_center_set,2,SWIGTYPE_Vec3"); + return true; } -SE_BIND_PROP_SET(js_cc_gi_CircumSphere_radiusSquared_set) +SE_BIND_PROP_SET(js_cc_gi_CircumSphere_center_set) -static bool js_cc_gi_CircumSphere_radiusSquared_get(se::State& s) +static bool js_cc_gi_CircumSphere_center_get(se::State& s) { CC_UNUSED bool ok = true; cc::gi::CircumSphere *arg1 = (cc::gi::CircumSphere *) NULL ; arg1 = SE_THIS_OBJECT(s); SE_PRECONDITION2(arg1, false, "%s: Invalid Native Object", __FUNCTION__); + // %typemap(out) SWIGTYPE + ok &= nativevalue_to_se(arg1->center, s.rval(), s.thisObject() /*ctx*/); + SE_PRECONDITION2(ok, false, "CircumSphere_center_get, Error processing arguments"); + SE_HOLD_RETURN_VALUE(arg1->center, s.thisObject(), s.rval()); - // out 1 - ok &= nativevalue_to_se(arg1->radiusSquared, s.rval(), s.thisObject() /*ctx*/); return true; } -SE_BIND_PROP_GET(js_cc_gi_CircumSphere_radiusSquared_get) +SE_BIND_PROP_GET(js_cc_gi_CircumSphere_center_get) // js_ctor static bool js_new_cc_gi_CircumSphere(se::State& s) // NOLINT(readability-identifier-naming) @@ -565,15 +565,15 @@ bool sevalue_to_native(const se::Value &from, cc::gi::CircumSphere * to, se::Obj se::Value field; bool ok = true; - json->getProperty("center", &field, true); + json->getProperty("radiusSquared", &field, true); if (!field.isNullOrUndefined()) { - ok &= sevalue_to_native(field, &(to->center), ctx); + ok &= sevalue_to_native(field, &(to->radiusSquared), ctx); } - json->getProperty("radiusSquared", &field, true); + json->getProperty("center", &field, true); if (!field.isNullOrUndefined()) { - ok &= sevalue_to_native(field, &(to->radiusSquared), ctx); + ok &= sevalue_to_native(field, &(to->center), ctx); } @@ -584,8 +584,8 @@ bool sevalue_to_native(const se::Value &from, cc::gi::CircumSphere * to, se::Obj bool js_register_cc_gi_CircumSphere(se::Object* obj) { auto* cls = se::Class::create("CircumSphere", obj, nullptr, _SE(js_new_cc_gi_CircumSphere)); - cls->defineProperty("center", _SE(js_cc_gi_CircumSphere_center_get), _SE(js_cc_gi_CircumSphere_center_set)); cls->defineProperty("radiusSquared", _SE(js_cc_gi_CircumSphere_radiusSquared_get), _SE(js_cc_gi_CircumSphere_radiusSquared_set)); + cls->defineProperty("center", _SE(js_cc_gi_CircumSphere_center_get), _SE(js_cc_gi_CircumSphere_center_set)); cls->defineFunction("init", _SE(js_cc_gi_CircumSphere_init)); diff --git a/native/cocos/gi/light-probe/Delaunay.cpp b/native/cocos/gi/light-probe/Delaunay.cpp index 56d013a4852..73bc4bea0e2 100644 --- a/native/cocos/gi/light-probe/Delaunay.cpp +++ b/native/cocos/gi/light-probe/Delaunay.cpp @@ -164,11 +164,12 @@ void Delaunay::addEdge(uint32_t index, int32_t tet, int32_t i, int32_t v0, int32 void Delaunay::addProbe(int32_t vertexIndex) { const auto &probe = _probes[vertexIndex]; + const auto position = probe.position; auto triangleIndex = 0; for (auto i = 0; i < static_cast(_tetrahedrons.size()); i++) { auto &tetrahedron = _tetrahedrons[i]; - if (tetrahedron.isInCircumSphere(probe.position)) { + if (tetrahedron.isInCircumSphere(position)) { tetrahedron.invalid = true; addTriangle(triangleIndex, i, 0, tetrahedron.vertex1, tetrahedron.vertex3, tetrahedron.vertex2, tetrahedron.vertex0); @@ -180,10 +181,15 @@ void Delaunay::addProbe(int32_t vertexIndex) { } for (auto i = 0; i < triangleIndex; i++) { + if (_triangles[i].invalid) { + continue; + } + for (auto k = i + 1; k < triangleIndex; k++) { if (_triangles[i].isSame(_triangles[k])) { _triangles[i].invalid = true; _triangles[k].invalid = true; + break; } } } @@ -225,6 +231,10 @@ void Delaunay::computeAdjacency() { } for (auto i = 0; i < triangleIndex; i++) { + if (!_triangles[i].isOuterFace) { + continue; + } + for (auto k = i + 1; k < triangleIndex; k++) { if (_triangles[i].isSame(_triangles[k])) { // update adjacency between tetrahedrons diff --git a/native/cocos/gi/light-probe/Delaunay.h b/native/cocos/gi/light-probe/Delaunay.h index 95a35d9dd3c..3978c0852ee 100644 --- a/native/cocos/gi/light-probe/Delaunay.h +++ b/native/cocos/gi/light-probe/Delaunay.h @@ -56,19 +56,31 @@ struct Edge { Edge() = default; Edge(int32_t tet, int32_t i, int32_t v0, int32_t v1) - : tetrahedron(tet), index(i), vertex0(v0), vertex1(v1) { + : tetrahedron(tet), index(i) { + if (v0 < v1) { + vertex0 = v0; + vertex1 = v1; + } else { + vertex0 = v1; + vertex1 = v0; + } } inline void set(int32_t tet, int32_t i, int32_t v0, int32_t v1) { tetrahedron = tet; index = i; - vertex0 = v0; - vertex1 = v1; + + if (v0 < v1) { + vertex0 = v0; + vertex1 = v1; + } else { + vertex0 = v1; + vertex1 = v0; + } } inline bool isSame(const Edge &other) const { - return ((vertex0 == other.vertex0 && vertex1 == other.vertex1) || - (vertex0 == other.vertex1 && vertex1 == other.vertex0)); + return (vertex0 == other.vertex0 && vertex1 == other.vertex1); } }; @@ -84,34 +96,83 @@ struct Triangle { Triangle() = default; Triangle(int32_t tet, int32_t i, int32_t v0, int32_t v1, int32_t v2, int32_t v3) - : tetrahedron(tet), index(i), vertex0(v0), vertex1(v1), vertex2(v2), vertex3(v3) { + : tetrahedron(tet), index(i), vertex3(v3) { + if (v0 < v1 && v0 < v2) { + vertex0 = v0; + if (v1 < v2) { + vertex1 = v1; + vertex2 = v2; + } else { + vertex1 = v2; + vertex2 = v1; + } + } else if (v1 < v0 && v1 < v2) { + vertex0 = v1; + if (v0 < v2) { + vertex1 = v0; + vertex2 = v2; + } else { + vertex1 = v2; + vertex2 = v0; + } + } else { + vertex0 = v2; + if (v0 < v1) { + vertex1 = v0; + vertex2 = v1; + } else { + vertex1 = v1; + vertex2 = v0; + } + } } inline void set(int32_t tet, int32_t i, int32_t v0, int32_t v1, int32_t v2, int32_t v3) { + invalid = false; + isOuterFace = true; + tetrahedron = tet; index = i; - vertex0 = v0; - vertex1 = v1; - vertex2 = v2; vertex3 = v3; - invalid = false; - isOuterFace = true; + if (v0 < v1 && v0 < v2) { + vertex0 = v0; + if (v1 < v2) { + vertex1 = v1; + vertex2 = v2; + } else { + vertex1 = v2; + vertex2 = v1; + } + } else if (v1 < v0 && v1 < v2) { + vertex0 = v1; + if (v0 < v2) { + vertex1 = v0; + vertex2 = v2; + } else { + vertex1 = v2; + vertex2 = v0; + } + } else { + vertex0 = v2; + if (v0 < v1) { + vertex1 = v0; + vertex2 = v1; + } else { + vertex1 = v1; + vertex2 = v0; + } + } } inline bool isSame(const Triangle &other) const { - return ((vertex0 == other.vertex0 && vertex1 == other.vertex1 && vertex2 == other.vertex2) || - (vertex0 == other.vertex0 && vertex1 == other.vertex2 && vertex2 == other.vertex1) || - (vertex0 == other.vertex1 && vertex1 == other.vertex0 && vertex2 == other.vertex2) || - (vertex0 == other.vertex1 && vertex1 == other.vertex2 && vertex2 == other.vertex0) || - (vertex0 == other.vertex2 && vertex1 == other.vertex0 && vertex2 == other.vertex1) || - (vertex0 == other.vertex2 && vertex1 == other.vertex1 && vertex2 == other.vertex0)); + return (vertex0 == other.vertex0 && vertex1 == other.vertex1 && vertex2 == other.vertex2); } }; struct CircumSphere { - Vec3 center; float radiusSquared{0.0F}; + Vec3 center; CircumSphere() = default; void init(const Vec3 &p0, const Vec3 &p1, const Vec3 &p2, const Vec3 &p3); From f3a37084580f898fefeec561d9d4bb4c9643a54d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=90=89=E6=9E=97?= <798080536@qq.com> Date: Fri, 4 Nov 2022 14:29:13 +0800 Subject: [PATCH 137/829] Support depth test gizmo rendering (#13240) --- editor/assets/effects/editor/gizmo.effect | 46 ++++++++++++++++++++++- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/editor/assets/effects/editor/gizmo.effect b/editor/assets/effects/editor/gizmo.effect index a55cfccb3f8..d086428fc7b 100644 --- a/editor/assets/effects/editor/gizmo.effect +++ b/editor/assets/effects/editor/gizmo.effect @@ -4,7 +4,7 @@ CCEffect %{ techniques: - passes: - vert: gizmo-vs:vert - frag: gizmo-fs:frag + frag: gizmo-fs:front priority: max - 10 rasterizerState: cullMode: none @@ -52,6 +52,27 @@ CCEffect %{ cullMode: none depthStencilState: *disable_depth blendState: *enable_blend + + - passes: + - vert: gizmo-vs:vert + frag: gizmo-fs:front + priority: max - 10 + rasterizerState: + cullMode: none + depthStencilState: + depthTest: true + depthWrite: false + blendState: *enable_blend + - vert: gizmo-vs:vert + frag: gizmo-fs:back + priority: max - 10 + rasterizerState: + cullMode: none + depthStencilState: + depthTest: true + depthWrite: false + depthFunc: greater + blendState: *enable_blend }% CCProgram gizmo-vs %{ @@ -101,7 +122,7 @@ CCProgram gizmo-fs %{ vec4 mainColor; }; - vec4 frag () { + vec4 front () { vec3 N = normalize(normal_w) * (float(gl_FrontFacing) * 2.0 - 1.0); vec3 V = normalize(cc_cameraPos.xyz - pos_w); @@ -121,6 +142,27 @@ CCProgram gizmo-fs %{ return vec4(diffuse, mainColor.a); #endif } + + vec4 back () { + vec3 N = normalize(normal_w) * (float(gl_FrontFacing) * 2.0 - 1.0); + vec3 V = normalize(cc_cameraPos.xyz - pos_w); + + // vec3 L = normalize(cross(forward, vec3(0, 1, 0))); + // vec3 diffuse = color.rgb * (0.2 + max(0.0, dot(N, L)) * 0.8); + + vec3 points [4]; + //vec3 up = vec3(0, 1, 0); + points[0] = (forward * 3.0 + right + up) * 40.0; + points[1] = (forward * 3.0 - right + up) * 40.0; + points[2] = (forward * 3.0 - right - up) * 40.0; + points[3] = (forward * 3.0 + right - up) * 40.0; + vec3 diffuse = LinearToSRGB(mainColor.rgb * LTC_Evaluate(N, V, pos_l, mat3(1), points)); + #if USE_FORWARD_PIPELINE + return CCFragOutput(vec4(diffuse, mainColor.a * 0.2)); + #else + return vec4(diffuse, mainColor.a * 0.2); + #endif + } }% CCProgram line-vs %{ From 23bae83dca16c6275d6da77c11851cda39d6cf68 Mon Sep 17 00:00:00 2001 From: Yiwen <15225434259xue@gmail.com> Date: Fri, 4 Nov 2022 17:17:05 +0800 Subject: [PATCH 138/829] fix a bug in Native physics engine (#13243) * fix a bug in Native physics engine * add missing modifications --- native/cocos/physics/physx/PhysXRigidBody.cpp | 5 +---- native/cocos/physics/physx/PhysXRigidBody.h | 2 +- native/cocos/physics/physx/joints/PhysXJoint.cpp | 5 +---- native/cocos/physics/physx/joints/PhysXJoint.h | 2 +- native/cocos/physics/physx/shapes/PhysXShape.cpp | 5 +---- native/cocos/physics/physx/shapes/PhysXShape.h | 2 +- 6 files changed, 6 insertions(+), 15 deletions(-) diff --git a/native/cocos/physics/physx/PhysXRigidBody.cpp b/native/cocos/physics/physx/PhysXRigidBody.cpp index 12c1d30e603..856da7c02c4 100644 --- a/native/cocos/physics/physx/PhysXRigidBody.cpp +++ b/native/cocos/physics/physx/PhysXRigidBody.cpp @@ -41,10 +41,6 @@ PhysXRigidBody::PhysXRigidBody() { _mObjectID = PhysXWorld::getInstance().addWrapperObject(reinterpret_cast(this)); } -PhysXRigidBody::~PhysXRigidBody() { - PhysXWorld::getInstance().removeWrapperObject(_mObjectID); -} - void PhysXRigidBody::initialize(Node *node, ERigidBodyType t, uint32_t g) { _mGroup = g; PhysXWorld &ins = PhysXWorld::getInstance(); @@ -65,6 +61,7 @@ void PhysXRigidBody::onDisable() { void PhysXRigidBody::onDestroy() { getSharedBody().reference(false); + PhysXWorld::getInstance().removeWrapperObject(_mObjectID); } bool PhysXRigidBody::isAwake() { diff --git a/native/cocos/physics/physx/PhysXRigidBody.h b/native/cocos/physics/physx/PhysXRigidBody.h index e6184a38054..3d7afaea643 100644 --- a/native/cocos/physics/physx/PhysXRigidBody.h +++ b/native/cocos/physics/physx/PhysXRigidBody.h @@ -36,7 +36,7 @@ namespace physics { class PhysXRigidBody final : public IRigidBody { public: PhysXRigidBody(); - ~PhysXRigidBody() override; + ~PhysXRigidBody() override = default; inline bool isEnabled() const { return _mEnabled; } inline const PhysXSharedBody &getSharedBody() const { return *_mSharedBody; } inline PhysXSharedBody &getSharedBody() { return *_mSharedBody; } diff --git a/native/cocos/physics/physx/joints/PhysXJoint.cpp b/native/cocos/physics/physx/joints/PhysXJoint.cpp index e97cb985365..53f314152a6 100644 --- a/native/cocos/physics/physx/joints/PhysXJoint.cpp +++ b/native/cocos/physics/physx/joints/PhysXJoint.cpp @@ -37,10 +37,6 @@ PhysXJoint::PhysXJoint() { _mObjectID = PhysXWorld::getInstance().addWrapperObject(reinterpret_cast(this)); }; -PhysXJoint::~PhysXJoint() { - PhysXWorld::getInstance().removeWrapperObject(_mObjectID); -} - void PhysXJoint::initialize(Node *node) { auto &ins = PhysXWorld::getInstance(); _mSharedBody = ins.getSharedBody(node); @@ -66,6 +62,7 @@ void PhysXJoint::onDisable() { void PhysXJoint::onDestroy() { _mSharedBody->reference(false); + PhysXWorld::getInstance().removeWrapperObject(_mObjectID); } void PhysXJoint::setConnectedBody(uint32_t rigidBodyID) { diff --git a/native/cocos/physics/physx/joints/PhysXJoint.h b/native/cocos/physics/physx/joints/PhysXJoint.h index 9878d6305cc..fceb3c520f6 100644 --- a/native/cocos/physics/physx/joints/PhysXJoint.h +++ b/native/cocos/physics/physx/joints/PhysXJoint.h @@ -39,7 +39,7 @@ class PhysXJoint : virtual public IBaseJoint { public: PhysXJoint(); - ~PhysXJoint() override; + ~PhysXJoint() override = default; void initialize(Node *node) override; void onEnable() override; void onDisable() override; diff --git a/native/cocos/physics/physx/shapes/PhysXShape.cpp b/native/cocos/physics/physx/shapes/PhysXShape.cpp index 19154c285fe..907b22cff9e 100644 --- a/native/cocos/physics/physx/shapes/PhysXShape.cpp +++ b/native/cocos/physics/physx/shapes/PhysXShape.cpp @@ -36,10 +36,6 @@ PhysXShape::PhysXShape() : _mCenter(physx::PxIdentity), _mRotation(physx::PxIden _mObjectID = PhysXWorld::getInstance().addWrapperObject(reinterpret_cast(this)); }; -PhysXShape::~PhysXShape() { - PhysXWorld::getInstance().removeWrapperObject(_mObjectID); -} - void PhysXShape::initialize(Node *node) { PhysXWorld &ins = PhysXWorld::getInstance(); _mSharedBody = ins.getSharedBody(node); @@ -63,6 +59,7 @@ void PhysXShape::onDisable() { void PhysXShape::onDestroy() { getSharedBody().reference(false); eraseFromShapeMap(); + PhysXWorld::getInstance().removeWrapperObject(_mObjectID); } void PhysXShape::setMaterial(uint16_t id, float f, float df, float r, diff --git a/native/cocos/physics/physx/shapes/PhysXShape.h b/native/cocos/physics/physx/shapes/PhysXShape.h index a36169cab37..de714aca1ae 100644 --- a/native/cocos/physics/physx/shapes/PhysXShape.h +++ b/native/cocos/physics/physx/shapes/PhysXShape.h @@ -45,7 +45,7 @@ class PhysXShape : virtual public IBaseShape { PhysXShape(); public: - ~PhysXShape() override; + ~PhysXShape() override = default; void initialize(Node *node) override; void onEnable() override; void onDisable() override; From df797fdc0a73eaffbf2a729946aceed755e406c9 Mon Sep 17 00:00:00 2001 From: ycg <1670543365@qq.com> Date: Mon, 7 Nov 2022 10:33:16 +0800 Subject: [PATCH 139/829] Fix: Update the implementation of the Safe-area on Web. (#13153) --- pal/screen-adapter/web/screen-adapter.ts | 13 +++++++++---- templates/web-desktop/style.css | 7 +++++++ templates/web-mobile/style.css | 7 +++++++ 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/pal/screen-adapter/web/screen-adapter.ts b/pal/screen-adapter/web/screen-adapter.ts index cee9e4ca145..65ce9408248 100644 --- a/pal/screen-adapter/web/screen-adapter.ts +++ b/pal/screen-adapter/web/screen-adapter.ts @@ -119,11 +119,16 @@ class ScreenAdapter extends EventTarget { } public get safeAreaEdge (): SafeAreaEdge { + const _top = parseInt(getComputedStyle(document.documentElement).getPropertyValue('--safe-top') || '0'); + const _bottom = parseInt(getComputedStyle(document.documentElement).getPropertyValue('--safe-bottom') || '0'); + const _left = parseInt(getComputedStyle(document.documentElement).getPropertyValue('--safe-left') || '0'); + const _right = parseInt(getComputedStyle(document.documentElement).getPropertyValue('--safe-right') || '0'); + return { - top: 0, - bottom: 0, - left: 0, - right: 0, + top: _top, + bottom: _bottom, + left: _left, + right: _right, }; } public get isProportionalToFrame (): boolean { diff --git a/templates/web-desktop/style.css b/templates/web-desktop/style.css index 5b0730994b1..e7aa31b6a18 100644 --- a/templates/web-desktop/style.css +++ b/templates/web-desktop/style.css @@ -41,4 +41,11 @@ canvas { #Cocos3dGameContainer, #GameCanvas { width: 100%; height: 100%; +} + +:root { + --safe-top: env(safe-area-inset-top); + --safe-right: env(safe-area-inset-right); + --safe-bottom: env(safe-area-inset-bottom); + --safe-left: env(safe-area-inset-left); } \ No newline at end of file diff --git a/templates/web-mobile/style.css b/templates/web-mobile/style.css index 14d55d9a767..4e69d6bd2b9 100644 --- a/templates/web-mobile/style.css +++ b/templates/web-mobile/style.css @@ -52,3 +52,10 @@ canvas { width: 100%; height: 100%; } + +:root { + --safe-top: env(safe-area-inset-top); + --safe-right: env(safe-area-inset-right); + --safe-bottom: env(safe-area-inset-bottom); + --safe-left: env(safe-area-inset-left); +} From c11b4a0a7b4aa13980116b35f4e2d5a5e062935d Mon Sep 17 00:00:00 2001 From: bofeng-song Date: Mon, 7 Nov 2022 11:58:30 +0800 Subject: [PATCH 140/829] add lodGroup's unit test (#13231) * add lodGroup's unit test --- tests/core/components/lod-group.test.ts | 227 ++++++++++++++++++++++++ 1 file changed, 227 insertions(+) create mode 100644 tests/core/components/lod-group.test.ts diff --git a/tests/core/components/lod-group.test.ts b/tests/core/components/lod-group.test.ts new file mode 100644 index 00000000000..ceea7ea1a65 --- /dev/null +++ b/tests/core/components/lod-group.test.ts @@ -0,0 +1,227 @@ +import { LODGroup, LOD } from '../../../cocos/misc'; +import { Node, NodeActivator } from "../../../cocos/scene-graph" +import { MeshRenderer } from '../../../cocos/3d/framework/mesh-renderer'; +import { Vec3, cclegacy } from '../../../cocos/core'; +const fs = require('fs-extra'); + +describe('LOD', () => { + + test('set lod screenUsagePercentage', () => { + const lod = createLOD(); + lod.screenUsagePercentage = 0.02; + expect(lod.screenUsagePercentage).toBe(0.02); + }); + + test('lod renderers', () => { + const lod = createLOD(); + let renderers = createMeshRenderers(); + lod.renderers = renderers; + expect(lod.renderers).toEqual(renderers); + expect(lod.rendererCount).toBe(renderers.length); + }); + + test('lod renderers operate', () => { + const lod = createLOD(); + lod.renderers = createMeshRenderers(); + const renderer = new MeshRenderer(); + renderer.name = "inserted"; + lod.insertRenderer(2, renderer); + expect(lod.getRenderer(2)).toEqual(renderer); + + const renderer2 = new MeshRenderer(); + renderer2.name = "updated"; + lod.setRenderer(2, renderer2); + expect(lod.getRenderer(2)).toBe(renderer2); + + lod.deleteRenderer(2); + expect(lod.getRenderer(2)?.name).toContain("test"); + }); + + function createLOD() { + const lod = new LOD(); + return lod; + } + + function createMeshRenderers() { + const renderers : MeshRenderer[]= []; + for (let i = 0; i < 5; i++) { + renderers[i] = new MeshRenderer(); + renderers[i].name = "test_" + i; + } + return renderers; + } +}); + +describe('LodGroup', () => { + + test('LodGroup LODs attribute', () => { + const lodGroup = createLODGroup(); + let LODs = createLODs(); + lodGroup.LODs = LODs; + expect(lodGroup.LODs).toEqual(LODs); + expect(lodGroup.LODs.length).toEqual(lodGroup.lodCount); + }); + + test('LodGroup objectSize', () => { + const lodGroup = createLODGroup(); + lodGroup.objectSize = 2; + expect(lodGroup.objectSize).toBe(2); + }); + + test('LodGroup resetObjectSize', () => { + const lodGroup = createLODGroup(); + lodGroup.objectSize = 2; + lodGroup.resetObjectSize(); + expect(lodGroup.objectSize).toBe(1); + }); + + test('LodGroup forceLOD', () => { + const lodGroup = createLODGroup(); + lodGroup.LODs = createLODs(); + lodGroup.forceLOD(1); + expect(lodGroup.lodGroup.getLockedLODLevels()[0]).toBe(1); + + lodGroup.forceLOD(-1); + expect(lodGroup.lodGroup.getLockedLODLevels().length).toBe(0); + }); + + test('LodGroup localBoundaryCenter', () => { + const lodGroup = createLODGroup(); + const tmp = new Vec3(1, 0, 1); + lodGroup.localBoundaryCenter = tmp; + expect(lodGroup.localBoundaryCenter !== tmp).toBeTruthy(); + }); + + test('LodGroup recalculateBounds', async () => { + const node = new Node(); + node.addComponent(LODGroup); + const lodGroup: LODGroup|null = node.getComponent(LODGroup); + if (lodGroup !== null) { + const lod = new LOD(); + lodGroup.insertLOD(0, 0.1, lod); + const json = await fs.readFile("editor/assets/default_prefab/3d/Capsule.prefab", "utf-8"); + let prefab = cclegacy.deserialize(json); + const node = cclegacy.instantiate(prefab); + const renderer = node.getComponent(MeshRenderer); + + const meshJson = [{ + "__type__": "cc.Mesh", + "_name": "", + "_objFlags": 0, + "_native": ".bin", + "_struct": { + "primitives": [ + { + "primitiveMode": 7, + "vertexBundelIndices": [ + 0 + ], + "indexView": { + "offset": 73976, + "length": 24576, + "count": 6144, + "stride": 4 + } + } + ], + "vertexBundles": [ + { + "view": { + "offset": 0, + "length": 73976, + "count": 1321, + "stride": 56 + }, + "attributes": [ + { + "name": "a_position", + "format": 32, + "isNormalized": false + }, + { + "name": "a_normal", + "format": 32, + "isNormalized": false + }, + { + "name": "a_texCoord", + "format": 21, + "isNormalized": false + }, + { + "name": "a_tangent", + "format": 44, + "isNormalized": false + }, + { + "name": "a_texCoord1", + "format": 21, + "isNormalized": false + } + ] + } + ], + "minPosition": { + "__type__": "cc.Vec3", + "x": -0.5, + "y": -1, + "z": -0.5 + }, + "maxPosition": { + "__type__": "cc.Vec3", + "x": 0.5, + "y": 1, + "z": 0.5 + } + }, + "_hash": 2864929873, + "_allowDataAccess": true + }]; + let mesh = cclegacy.deserialize(meshJson); + const data = new ArrayBuffer(20000); + mesh.reset({data: data, struct: mesh.struct}); + renderer.mesh = mesh; + + const activator = new NodeActivator(); + activator.activateNode(node, true); + + lod.insertRenderer(0, renderer); + lodGroup.recalculateBounds(); + + expect(lodGroup.objectSize > 0).toBeTruthy(); + } + + }); + + + test('LodGroup operate', () => { + const lodGroup = createLODGroup(); + lodGroup.LODs = createLODs(); + + lodGroup.insertLOD(2, 0.001); + expect(lodGroup.getLOD(2)?.screenUsagePercentage).toBe(0.001); + + const lod = new LOD(); + lod.screenUsagePercentage = 0.065; + lodGroup.setLOD(2, lod); + expect(lodGroup.getLOD(2)).toEqual(lod); + + lodGroup.eraseLOD(2); + expect(lodGroup.getLOD(2)?.screenUsagePercentage).toBeGreaterThan(1); + }); + + + function createLODGroup() { + const lodGroup = new LODGroup(); + return lodGroup; + } + + function createLODs() { + const LODs : LOD[]= []; + for (let i = 0; i < 5; i++) { + LODs[i] = new LOD(); + LODs[i].screenUsagePercentage = i; + } + return LODs; + } +}); \ No newline at end of file From 7861f01ebc2f46bfd3a4988c407052c0921da885 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E6=A3=AE=E6=96=8C?= Date: Mon, 7 Nov 2022 13:14:01 +0800 Subject: [PATCH 141/829] [Optimize] asset editing on multiple and undo (#12950) * optimize edit asset undo * optimize multiple-select assets editing * optimize editing assets * optimize assets editing * optimize asset editing on readonly state * asset.js contentRender panels use Promise.all * remove material header hack action --- editor/i18n/en/assets.js | 2 +- editor/inspector/assets/animation-graph.js | 35 ++- editor/inspector/assets/animation-mask.js | 192 ++++++++------ editor/inspector/assets/audio-clip.js | 13 +- editor/inspector/assets/effect-header.js | 33 ++- editor/inspector/assets/effect.js | 170 ++++++------ editor/inspector/assets/erp-texture-cube.js | 134 ++++++---- editor/inspector/assets/fbx/animation.js | 126 ++++++--- .../assets/fbx/event-editor/event-item.js | 2 +- editor/inspector/assets/fbx/events/events.js | 2 +- editor/inspector/assets/fbx/events/index.js | 5 +- editor/inspector/assets/fbx/fbx.js | 100 +++---- editor/inspector/assets/fbx/index.js | 88 +++---- editor/inspector/assets/fbx/material.js | 118 ++++----- editor/inspector/assets/fbx/model.js | 188 +++++++------- editor/inspector/assets/fbx/preview.js | 192 +++++++------- editor/inspector/assets/image-preview.js | 58 ++--- editor/inspector/assets/image.js | 197 ++++++-------- editor/inspector/assets/javascript.js | 123 +++++---- editor/inspector/assets/json.js | 31 ++- editor/inspector/assets/label-atlas.js | 75 +++--- editor/inspector/assets/material-header.js | 82 +++--- editor/inspector/assets/material.js | 46 ++-- editor/inspector/assets/mesh-preview.js | 68 ++--- editor/inspector/assets/particle.js | 64 +++-- editor/inspector/assets/physics-material.js | 74 ++++-- editor/inspector/assets/prefab.js | 51 +--- editor/inspector/assets/render-pipeline.js | 66 +++-- editor/inspector/assets/render-texture.js | 18 +- editor/inspector/assets/skeleton-preview.js | 68 ++--- editor/inspector/assets/sprite-frame.js | 243 +++++++++++------- editor/inspector/assets/text.js | 4 +- editor/inspector/assets/texture-cube.js | 102 ++++---- editor/inspector/assets/texture/auto-atlas.js | 18 +- editor/inspector/assets/texture/index.js | 19 +- editor/inspector/assets/texture/texture.js | 180 +++++++------ editor/inspector/assets/typescript.js | 14 +- editor/inspector/assets/unknown.js | 9 +- editor/inspector/assets/video-clip.js | 10 +- .../contributions/asset-history/index.js | 8 - editor/inspector/contributions/asset.css | 5 +- editor/inspector/contributions/asset.js | 23 +- editor/inspector/utils/assets.js | 19 ++ 43 files changed, 1635 insertions(+), 1440 deletions(-) create mode 100644 editor/inspector/utils/assets.js diff --git a/editor/i18n/en/assets.js b/editor/i18n/en/assets.js index 498e80b769e..372a23aa67a 100644 --- a/editor/i18n/en/assets.js +++ b/editor/i18n/en/assets.js @@ -387,7 +387,7 @@ module.exports = { illegalFbx: 'Import Skeleton Failed: this fbx asset has not contained sub prefab asset.', nodeEnableTip: 'Whether to enable this joint and its descendants.;
Alt + Click only toggle the state of itself.', }, - multipleWarning: 'Multi-select editing of this type of asset is not supported', + multipleWarning: 'Multi-select editing of this type of asset is not supported.', check_is_saved: { message: 'The modified data has not been saved. Do you want to save it?', assetMessage: "${assetName} is modified, it's data has not been saved. Do you want to save it?", diff --git a/editor/inspector/assets/animation-graph.js b/editor/inspector/assets/animation-graph.js index 78ddfd850b5..eddcfb04f3d 100644 --- a/editor/inspector/assets/animation-graph.js +++ b/editor/inspector/assets/animation-graph.js @@ -1,25 +1,39 @@ -exports.template = ` +'use strict'; + +const { updateElementReadonly } = require('../utils/assets'); + +exports.template = /* html */`
- +
`; -exports.style = ` +exports.style = /* css */` .asset-animation-graph { padding-top: 10px; text-align: center; } -.asset-animation-graph .tip { +.asset-animation-graph[multiple-invalid] > *:not(.multiple-warn-tip) { + display: none!important; + } + + .asset-animation-graph[multiple-invalid] > .multiple-warn-tip { + display: block; + } + +.asset-animation-graph .multiple-warn-tip { + display: none; + text-align: center; color: var(--color-focus-contrast-weakest); } `; exports.$ = { - constainer: '.asset-animation-graph', + container: '.asset-animation-graph', button: '.open', tip: '.tip', }; @@ -36,12 +50,13 @@ exports.update = function(assetList, metaList) { this.meta = this.metaList[0]; this.asset = this.assetList[0]; - if (assetList.length !== 1) { - this.$.button.disabled = true; - this.$.tip.style.display = 'block'; + if (assetList.length > 1) { + this.$.container.setAttribute('multiple-invalid', ''); + return; } else { - this.$.button.disabled = false; - this.$.tip.style.display = 'none'; + this.$.container.removeAttribute('multiple-invalid'); } + + updateElementReadonly.call(this, this.$.button); }; diff --git a/editor/inspector/assets/animation-mask.js b/editor/inspector/assets/animation-mask.js index b9169ac4385..4eba65efcae 100644 --- a/editor/inspector/assets/animation-mask.js +++ b/editor/inspector/assets/animation-mask.js @@ -1,4 +1,8 @@ -exports.template = ` +'use strict'; + +const { updateElementReadonly } = require('../utils/assets'); + +exports.template = /* html */`
@@ -13,9 +17,66 @@ exports.template = `
+
`; +exports.style = /* css */` +.asset-animation-mask { + display: flex; + height: 100%; + flex-direction: column; +} + +.asset-animation-mask[multiple-invalid] > *:not(.multiple-warn-tip) { + display: none!important; + } + + .asset-animation-mask[multiple-invalid] > .multiple-warn-tip { + display: block; + } + +.asset-animation-mask .multiple-warn-tip { + display: none; + text-align: center; + color: var(--color-focus-contrast-weakest); +} + +.asset-animation-mask > .header { + margin-top: 10px; + display: flex; +} + +.asset-animation-mask > .header ui-button { + text-align: center; +} + +.asset-animation-mask > .header .import { + flex: 1; + margin-left: 10px; +} + +.asset-animation-mask > .header .clear { + margin-left: 10px; +} + +.asset-animation-mask > .content { + flex: 1; + margin-top: 10px; +} + +.asset-animation-mask > .content .tree { + height: 100%; +} +`; + +exports.$ = { + container: '.asset-animation-mask', + import: '.import', + clear: '.clear', + tree: '.tree', +}; + exports.methods = { record() { return JSON.stringify(this.queryData); @@ -27,29 +88,60 @@ exports.methods = { return false; } - this.queryData = await Editor.Message.request('scene', 'change-animation-mask', { - method: 'change-dump', - dump: record, - }); - await this.changed({ snapshot: false }); + await this.change(record); return true; }, async query(uuid) { return await Editor.Message.request('scene', 'query-animation-mask', uuid); }, + async apply() { this.reset(); await Editor.Message.request('scene', 'apply-animation-mask', this.asset.uuid); }, + reset() { this.dirtyData.uuid = ''; }, - async changed(state) { + + async clear() { + this.queryData = await Editor.Message.request('scene', 'change-animation-mask', { + method: 'clear-nodes', + uuid: this.asset.uuid, + }); + + this.changed(); + }, + async import(info) { + this.queryData = await Editor.Message.request('scene', 'change-animation-mask', { + method: 'import-skeleton', + uuid: info.redirect.uuid, + }); + + this.changed(); + }, + + async change(dump) { + this.queryData = await Editor.Message.request('scene', 'change-animation-mask', { + method: 'change-dump', + dump, + }); + + this.changed(); + }, + + changed() { this.updateInterface(); this.setDirtyData(); - this.dispatch('change', state); + this.dispatch('change'); + + /** + * 由于编辑项中不需要区分 change 和 confirm 的情况, + * 所以可以在 change 后 snapshot + */ + this.dispatch('snapshot'); }, updateInterface() { @@ -57,30 +149,16 @@ exports.methods = { this.flatData = convertData.flatData; this.$.tree.tree = convertData.treeData; - - this.updateReadonly(this.$.import); - this.updateReadonly(this.$.clear); - this.updateReadonly(this.$.tree); + updateElementReadonly.call(this, this.$.import); + updateElementReadonly.call(this, this.$.clear); + updateElementReadonly.call(this, this.$.tree); }, - updateReadonly(element) { - if (this.asset.readonly) { - element.setAttribute('disabled', true); - } else { - element.removeAttribute('disabled'); - } - }, - - /** - * Detection of data changes only determines the currently selected technique - */ setDirtyData() { this.dirtyData.realtime = JSON.stringify(this.queryData); if (!this.dirtyData.origin) { this.dirtyData.origin = this.dirtyData.realtime; - - this.dispatch('snapshot'); } }, @@ -187,44 +265,6 @@ exports.methods = { }, }; -exports.$ = { - container: '.asset-animation-mask', - import: '.import', - clear: '.clear', - tree: '.tree', -}; - -exports.style = ` -.asset-animation-mask { - display: flex; - height: 100%; - flex-direction: column; -} - -.header { - margin-top: 10px; - display: flex; -} - -.header ui-button { - flex: 1; - text-align: center; -} - -.header .clear { - margin-left: 10px; -} - -.content { - flex: 1; - margin-top: 10px; -} - -.content .tree { - height: 100%; -} -`; - exports.ready = function() { const panel = this; @@ -245,12 +285,8 @@ exports.ready = function() { console.error(Editor.I18n.t('ENGINE.assets.animationMask.illegalFbx') + ` {asset(${uuid})}`); return; } - panel.queryData = await Editor.Message.request('scene', 'change-animation-mask', { - method: 'import-skeleton', - uuid: info.redirect.uuid, - }); - panel.changed(); + await panel.import(info); }, }, }); @@ -265,12 +301,7 @@ exports.ready = function() { }); if (result.response === 0) { - panel.queryData = await Editor.Message.request('scene', 'change-animation-mask', { - method: 'clear-nodes', - uuid: this.asset.uuid, - }); - - this.changed(); + await this.clear(); } }); @@ -289,12 +320,7 @@ exports.ready = function() { const origin = panel.flatData[key].origin; panel.jointEnableChange(key, !origin.value.enabled.value, !event.altKey); - panel.queryData = await Editor.Message.request('scene', 'change-animation-mask', { - method: 'change-dump', - dump: panel.queryData, - }); - - panel.changed(); + await panel.change(this.queryData); }); }); panel.$.tree.setRender('left', ($left) => { @@ -328,9 +354,11 @@ exports.update = async function(assetList, metaList) { this.asset = assetList[0]; this.meta = metaList[0]; - if (assetList.length !== 1) { - this.$.container.innerText = Editor.I18n.t('ENGINE.assets.multipleWarning'); + if (assetList.length > 1) { + this.$.container.setAttribute('multiple-invalid', ''); return; + } else { + this.$.container.removeAttribute('multiple-invalid'); } if (this.dirtyData.uuid !== this.asset.uuid) { diff --git a/editor/inspector/assets/audio-clip.js b/editor/inspector/assets/audio-clip.js index beca784a2f2..f61b24c12f5 100644 --- a/editor/inspector/assets/audio-clip.js +++ b/editor/inspector/assets/audio-clip.js @@ -1,8 +1,11 @@ -exports.template = ` +'use strict'; + +exports.template = /* html */`
`; -exports.style = ` + +exports.style = /* css */` .asset-audio-clip .audio { outline: none; width: 100%; @@ -10,9 +13,11 @@ exports.style = ` margin-bottom: 16px; } `; + exports.$ = { - constainer: '.asset-audio-clip', + container: '.asset-audio-clip', }; + exports.update = function(assetList, metaList) { // Support multi-select list display, limit the number of display let html = ''; @@ -30,5 +35,5 @@ exports.update = function(assetList, metaList) { html += ``; }); - this.$.constainer.innerHTML = html; + this.$.container.innerHTML = html; }; diff --git a/editor/inspector/assets/effect-header.js b/editor/inspector/assets/effect-header.js index ad9219e85d7..52ed22eeb68 100644 --- a/editor/inspector/assets/effect-header.js +++ b/editor/inspector/assets/effect-header.js @@ -1,22 +1,40 @@ +'use strict'; + const { createReadStream } = require('fs'); const ReadLine = require('readline'); const MAX_LINES = 400; const MAX_LENGTH = 20000; -exports.template = ` +exports.template = /* html */`
+
`; -exports.style = ` +exports.style = /* css */` .asset-effect-header { flex: 1; display: flex; flex-direction: column; height: 0px; // it is necessary } + +.asset-effect-header[multiple-invalid] > *:not(.multiple-warn-tip) { + display: none!important; + } + + .asset-effect-header[multiple-invalid] > .multiple-warn-tip { + display: block; + } + +.asset-effect-header .multiple-warn-tip { + display: none; + text-align: center; + color: var(--color-focus-contrast-weakest); +} + .asset-effect-header > ui-code { flex: 1; } @@ -37,14 +55,11 @@ exports.update = function(assetList, metaList) { this.meta = metaList[0]; this.asset = assetList[0]; - let display = 'none'; - if (assetList.length === 1) { - display = 'flex'; - } - this.$.container.style.display = display; - - if (display === 'none') { + if (assetList.length > 1) { + this.$.container.setAttribute('multiple-invalid', ''); return; + } else { + this.$.container.removeAttribute('multiple-invalid'); } // Displays 400 lines or 20,000 characters diff --git a/editor/inspector/assets/effect.js b/editor/inspector/assets/effect.js index 84a9082e637..2291e9ea973 100644 --- a/editor/inspector/assets/effect.js +++ b/editor/inspector/assets/effect.js @@ -1,8 +1,9 @@ 'use strict'; const { readFileSync, existsSync } = require('fs'); +const { updateElementReadonly } = require('../utils/assets'); -exports.template = ` +exports.template = /* html */`
@@ -19,11 +20,28 @@ exports.template = `
+ +
`; -exports.style = ` +exports.style = /* css */` .asset-effect { } + + .asset-effect[multiple-invalid] > *:not(.multiple-warn-tip) { + display: none!important; + } + + .asset-effect[multiple-invalid] > .multiple-warn-tip { + display: block; + } + + .asset-effect .multiple-warn-tip { + display: none; + text-align: center; + color: var(--color-focus-contrast-weakest); + } + .asset-effect > * { margin-bottom: 8px; } @@ -98,13 +116,19 @@ const Elements = { ready() { const panel = this; + panel.shadersIndex = 0; + panel.$.shaderSelect.addEventListener('change', (event) => { - this.shadersIndex = event.target.value; + panel.shadersIndex = event.target.value; // There are other properties that are updated depending on its change Elements.combinations.update.call(panel); Elements.codes.update.call(panel); }); + + panel.$.shaderSelect.addEventListener('confirm', () => { + panel.dispatch('snapshot'); + }); }, update() { const panel = this; @@ -115,13 +139,17 @@ const Elements = { }); panel.$.shaderSelect.innerHTML = optionsHtml; + if (panel.shadersIndex > panel.shaders.length - 1) { + panel.shadersIndex = 0; + } + panel.$.shaderSelect.value = panel.shadersIndex; if (panel.shaders[panel.shadersIndex]) { panel.$.shaderSelect.setAttribute('tooltip', panel.shaders[panel.shadersIndex].name); } - panel.updateReadonly(panel.$.shaderSelect); + updateElementReadonly.call(this, panel.$.shaderSelect); }, }, combinations: { @@ -153,11 +181,9 @@ const Elements = { const name = typeof value === 'boolean' ? (value ? 'on' : 'off') : value.toString(); const button = document.createElement('ui-button'); - content.appendChild(button); - + updateElementReadonly.call(panel, button); button.setAttribute('class', 'tab'); button.setAttribute('checked', checked); - panel.updateReadonly(button); button.innerText = name; button.addEventListener('click', () => { if (!panel.combinations[panel.shadersIndex][define.name]) { @@ -175,9 +201,10 @@ const Elements = { button.setAttribute('checked', 'true'); } - panel.dataChange(); - panel.dispatch('change'); + panel.change(); }); + + content.appendChild(button); }); }); @@ -189,6 +216,18 @@ const Elements = { }, }, codes: { + ready() { + const panel = this; + + panel.glslNames = { + glsl3: 'GLSL 300 ES Output', + glsl1: 'GLSL 100 Output', + }; + panel.shaderNames = { + vert: 'Vertex Shader', + frag: 'Fragment Shader', + }; + }, update() { const panel = this; @@ -249,50 +288,17 @@ const Elements = { }, }; -/** - * A method to initialize the panel - */ -exports.ready = function() { - for (const prop in Elements) { - const element = Elements[prop]; - if (element.ready) { - element.ready.call(this); - } - } -}; - -/** - * Methods to automatically render components - * @param assetList - * @param metaList - */ -exports.update = function(assetList, metaList) { - this.assetList = assetList; - this.metaList = metaList; - this.asset = assetList[0]; - this.meta = metaList[0]; - - if (this.assetList.length !== 1) { - this.$.container.style.display = 'none'; - return; - } else { - this.$.container.style.display = 'block'; - } - - const isLegal = this.refresh(); - if (!isLegal) { - return; - } - - for (const prop in Elements) { - const element = Elements[prop]; - if (element.update) { - element.update.call(this); - } - } -}; - exports.methods = { + record() { + return JSON.stringify({ shadersIndex: this.shadersIndex }); + }, + restore(record) { + record = JSON.parse(record); + + this.$.shaderSelect.value = record.shadersIndex; + this.$.shaderSelect.dispatch('change'); + return true; + }, refresh() { const panel = this; @@ -317,16 +323,6 @@ exports.methods = { panel.shaders = dataSource.shaders; - panel.shadersIndex = 0; - panel.glslNames = { - glsl3: 'GLSL 300 ES Output', - glsl1: 'GLSL 100 Output', - }; - panel.shaderNames = { - vert: 'Vertex Shader', - frag: 'Fragment Shader', - }; - // The edited value of defines in each shader panel.combinations = []; if (Array.isArray(panel.meta.userData.combinations)) { @@ -376,17 +372,7 @@ exports.methods = { return true; }, - /** - * Update read-only status - */ - updateReadonly(element) { - if (this.asset.readonly) { - element.setAttribute('disabled', true); - } else { - element.removeAttribute('disabled'); - } - }, - dataChange() { + change() { const panel = this; // Need to exclude empty arrays, otherwise scene will report an error @@ -402,5 +388,43 @@ exports.methods = { }); panel.meta.userData.combinations = submitData; + + panel.dispatch('change'); + panel.dispatch('snapshot'); }, }; + +exports.ready = function() { + for (const prop in Elements) { + const element = Elements[prop]; + if (element.ready) { + element.ready.call(this); + } + } +}; + +exports.update = function(assetList, metaList) { + this.assetList = assetList; + this.metaList = metaList; + this.asset = assetList[0]; + this.meta = metaList[0]; + + if (assetList.length > 1) { + this.$.container.setAttribute('multiple-invalid', ''); + return; + } else { + this.$.container.removeAttribute('multiple-invalid'); + } + + const isLegal = this.refresh(); + if (!isLegal) { + return; + } + + for (const prop in Elements) { + const element = Elements[prop]; + if (element.update) { + element.update.call(this); + } + } +}; diff --git a/editor/inspector/assets/erp-texture-cube.js b/editor/inspector/assets/erp-texture-cube.js index 6ff0749a4ac..b530ea8fb69 100644 --- a/editor/inspector/assets/erp-texture-cube.js +++ b/editor/inspector/assets/erp-texture-cube.js @@ -1,3 +1,7 @@ +'use strict'; + +const { updateElementReadonly } = require('../utils/assets'); + exports.template = /* html */ `
@@ -55,7 +59,7 @@ exports.template = /* html */ `
`; -exports.style = ` +exports.style = /* css */` .asset-erp-texture-cube ui-prop{ margin-top: 4px; } @@ -84,27 +88,6 @@ exports.$ = { mipBakeMode: '#mipBakeMode', }; -exports.ready = function() { - for (const key in Elements) { - if (typeof Elements[key].ready === 'function') { - Elements[key].ready.call(this); - } - } -}; - -exports.update = function(assetList, metaList) { - this.assetList = assetList; - this.metaList = metaList; - this.asset = assetList[0]; - this.meta = metaList[0]; - - for (const key in Elements) { - if (typeof Elements[key].update === 'function') { - Elements[key].update.call(this); - } - } -}; - const ModeMap = { filter: { 'Nearest (None)': { @@ -147,27 +130,36 @@ const ModeMap = { const Elements = { anisotropy: { ready() { - this.$.anisotropy.addEventListener('change', this.dataChange.bind(this, 'anisotropy')); + this.$.anisotropy.addEventListener('change', this.change.bind(this, 'anisotropy')); + this.$.anisotropy.addEventListener('confirm', () => { + this.dispatch('snapshot'); + }); }, update() { this.$.anisotropy.value = this.meta.userData.anisotropy; this.updateInvalid(this.$.anisotropy, 'anisotropy'); - this.updateReadonly(this.$.anisotropy); + updateElementReadonly.call(this, this.$.anisotropy); }, }, faceSize: { ready() { - this.$.faceSize.addEventListener('change', this.dataChange.bind(this, 'faceSize')); + this.$.faceSize.addEventListener('change', this.change.bind(this, 'faceSize')); + this.$.faceSize.addEventListener('confirm', () => { + this.dispatch('snapshot'); + }); }, update() { this.$.faceSize.value = this.meta.userData.faceSize; this.updateInvalid(this.$.faceSize, 'faceSize'); - this.updateReadonly(this.$.faceSize); + updateElementReadonly.call(this, this.$.faceSize); }, }, filterMode: { ready() { - this.$.filterMode.addEventListener('change', this.dataChange.bind(this, 'filterMode')); + this.$.filterMode.addEventListener('change', this.change.bind(this, 'filterMode')); + this.$.filterMode.addEventListener('confirm', () => { + this.dispatch('snapshot'); + }); }, update() { let optionsHtml = ''; @@ -202,12 +194,15 @@ const Elements = { : (this.$.filterAdvancedSection.style.display = 'none'); this.updateInvalid(this.$.filterMode, 'filterMode'); - this.updateReadonly(this.$.filterMode); + updateElementReadonly.call(this, this.$.filterMode); }, }, minfilter: { ready() { - this.$.minfilter.addEventListener('change', this.dataChange.bind(this, 'minfilter')); + this.$.minfilter.addEventListener('change', this.change.bind(this, 'minfilter')); + this.$.minfilter.addEventListener('confirm', () => { + this.dispatch('snapshot'); + }); }, update() { let optionsHtml = ''; @@ -219,12 +214,15 @@ const Elements = { this.$.minfilter.value = this.meta.userData.minfilte || 'nearest'; this.updateInvalid(this.$.minfilter, 'minfilter'); - this.updateReadonly(this.$.minfilter); + updateElementReadonly.call(this, this.$.minfilter); }, }, magfilter: { ready() { - this.$.magfilter.addEventListener('change', this.dataChange.bind(this, 'magfilter')); + this.$.magfilter.addEventListener('change', this.change.bind(this, 'magfilter')); + this.$.magfilter.addEventListener('confirm', () => { + this.dispatch('snapshot'); + }); }, update() { let optionsHtml = ''; @@ -236,12 +234,15 @@ const Elements = { this.$.magfilter.value = this.meta.userData.magfilter || 'nearest'; this.updateInvalid(this.$.magfilter, 'magfilter'); - this.updateReadonly(this.$.magfilter); + updateElementReadonly.call(this, this.$.magfilter); }, }, generateMipmaps: { ready() { - this.$.generateMipmaps.addEventListener('change', this.dataChange.bind(this, 'generateMipmaps')); + this.$.generateMipmaps.addEventListener('change', this.change.bind(this, 'generateMipmaps')); + this.$.generateMipmaps.addEventListener('confirm', () => { + this.dispatch('snapshot'); + }); }, update() { this.$.generateMipmaps.value = this.meta.userData.mipfilter ? this.meta.userData.mipfilter !== 'none' : false; @@ -252,12 +253,15 @@ const Elements = { : (this.$.generateMipmapsSection.style.display = 'none'); this.updateInvalid(this.$.generateMipmaps, 'generateMipmaps'); - this.updateReadonly(this.$.generateMipmaps); + updateElementReadonly.call(this, this.$.generateMipmaps); }, }, mipfilter: { ready() { - this.$.mipfilter.addEventListener('change', this.dataChange.bind(this, 'mipfilter')); + this.$.mipfilter.addEventListener('change', this.change.bind(this, 'mipfilter')); + this.$.mipfilter.addEventListener('confirm', () => { + this.dispatch('snapshot'); + }); }, update() { let optionsHtml = ''; @@ -269,12 +273,15 @@ const Elements = { this.$.mipfilter.value = this.meta.userData.mipfilter || 'nearest'; this.updateInvalid(this.$.mipfilter, 'mipfilter'); - this.updateReadonly(this.$.mipfilter); + updateElementReadonly.call(this, this.$.mipfilter); }, }, wrapMode: { ready() { - this.$.wrapMode.addEventListener('change', this.dataChange.bind(this, 'wrapMode')); + this.$.wrapMode.addEventListener('change', this.change.bind(this, 'wrapMode')); + this.$.wrapMode.addEventListener('confirm', () => { + this.dispatch('snapshot'); + }); }, update() { let optionsHtml = ''; @@ -309,12 +316,15 @@ const Elements = { : (this.$.wrapAdvancedSection.style.display = 'none'); this.updateInvalid(this.$.wrapMode, 'wrapMode'); - this.updateReadonly(this.$.wrapMode); + updateElementReadonly.call(this, this.$.wrapMode); }, }, wrapModeS: { ready() { - this.$.wrapModeS.addEventListener('change', this.dataChange.bind(this, 'wrapModeS')); + this.$.wrapModeS.addEventListener('change', this.change.bind(this, 'wrapModeS')); + this.$.wrapModeS.addEventListener('confirm', () => { + this.dispatch('snapshot'); + }); }, update() { let optionsHtml = ''; @@ -330,12 +340,15 @@ const Elements = { this.$.wrapModeS.value = this.meta.userData.wrapModeS || 'repeat'; this.updateInvalid(this.$.wrapModeS, 'wrapModeS'); - this.updateReadonly(this.$.wrapModeS); + updateElementReadonly.call(this, this.$.wrapModeS); }, }, wrapModeT: { ready() { - this.$.wrapModeT.addEventListener('change', this.dataChange.bind(this, 'wrapModeT')); + this.$.wrapModeT.addEventListener('change', this.change.bind(this, 'wrapModeT')); + this.$.wrapModeT.addEventListener('confirm', () => { + this.dispatch('snapshot'); + }); }, update() { let optionsHtml = ''; @@ -351,17 +364,20 @@ const Elements = { this.$.wrapModeT.value = this.meta.userData.wrapModeT || 'repeat'; this.updateInvalid(this.$.wrapModeT, 'wrapModeT'); - this.updateReadonly(this.$.wrapModeT); + updateElementReadonly.call(this, this.$.wrapModeT); }, }, mipBakeMode: { ready() { - this.$.mipBakeMode.addEventListener('change', this.dataChange.bind(this, 'mipBakeMode')); + this.$.mipBakeMode.addEventListener('change', this.change.bind(this, 'mipBakeMode')); + this.$.mipBakeMode.addEventListener('confirm', () => { + this.dispatch('snapshot'); + }); }, update() { this.$.mipBakeMode.value = this.meta.userData.mipBakeMode === 2 ? true : false; this.updateInvalid(this.$.mipBakeMode, 'mipBakeMode'); - this.updateReadonly(this.$.mipBakeMode); + updateElementReadonly.call(this, this.$.mipBakeMode); }, }, }; @@ -404,14 +420,7 @@ exports.methods = { } element.invalid = invalid; }, - updateReadonly(element) { - if (this.asset.readonly) { - element.setAttribute('disabled', true); - } else { - element.removeAttribute('disabled'); - } - }, - dataChange(key, event) { + change(key, event) { let value = event.target.value; if (key === 'mipBakeMode') { value = event.target.value ? 2 : 1; @@ -460,3 +469,24 @@ exports.methods = { this.dispatch('change'); }, }; + +exports.ready = function() { + for (const key in Elements) { + if (typeof Elements[key].ready === 'function') { + Elements[key].ready.call(this); + } + } +}; + +exports.update = function(assetList, metaList) { + this.assetList = assetList; + this.metaList = metaList; + this.asset = assetList[0]; + this.meta = metaList[0]; + + for (const key in Elements) { + if (typeof Elements[key].update === 'function') { + Elements[key].update.call(this); + } + } +}; diff --git a/editor/inspector/assets/fbx/animation.js b/editor/inspector/assets/fbx/animation.js index b7493b80154..fe89ca6321c 100644 --- a/editor/inspector/assets/fbx/animation.js +++ b/editor/inspector/assets/fbx/animation.js @@ -1,4 +1,8 @@ -exports.template = ` +'use strict'; + +const { updateElementReadonly, updateElementInvalid } = require('../../utils/assets'); + +exports.template = /* html */`
@@ -68,14 +72,28 @@ exports.template = `
+
`; -exports.style = ` +exports.style = /* css */` ui-prop, ui-section { margin: 4px 0; } +.container[multiple-invalid] > *:not(.multiple-warn-tip) { + display: none!important; + } + + .container[multiple-invalid] > .multiple-warn-tip { + display: block; + } + +.container .multiple-warn-tip { + display: none; + text-align: center; + color: var(--color-focus-contrast-weakest); +} .container > .show-type-wrap { text-align: center; } @@ -104,6 +122,7 @@ ui-section { display: flex; line-height: 1.6em; padding: 2px 5px; + cursor: pointer; } .container > .clips > .clip > .table > .line[active] { background: var(--color-focus-fill); @@ -134,6 +153,16 @@ ui-section { background: var(--color-normal-fill); } +.container > .clips > .clip > .add-clip > .button > ui-icon[disabled] { + opacity: 0.55; + pointer-events: none; +} + +.container > .editor[disabled] { + opacity: 0.55; + pointer-events: none; +} + .container > .editor > .anim-name { display: flex; justify-content: space-between; @@ -446,6 +475,7 @@ const Elements = { const addIcon = document.createElement('ui-icon'); addIcon.setAttribute('value', 'add'); addIcon.setAttribute('tooltip', 'Duplicate Selected'); + updateElementReadonly.call(panel, addIcon); button.appendChild(addIcon); addIcon.addEventListener('click', () => { const newInfo = panel.newClipTemplate(); @@ -455,11 +485,13 @@ const Elements = { Elements.clips.update.call(panel); Elements.editor.update.call(panel); panel.dispatch('change'); + panel.dispatch('snapshot'); }); const miniIcon = document.createElement('ui-icon'); miniIcon.setAttribute('value', 'mini'); miniIcon.setAttribute('tooltip', 'Remove Selected'); + updateElementReadonly.call(panel, miniIcon); button.appendChild(miniIcon); miniIcon.addEventListener('click', () => { panel.updateCurrentClipInfo(); @@ -476,6 +508,7 @@ const Elements = { Elements.clips.update.call(panel); Elements.editor.update.call(panel); panel.dispatch('change'); + panel.dispatch('snapshot'); }); }); }, @@ -557,6 +590,8 @@ const Elements = { panel.$.editor.style.display = 'block'; } + updateElementReadonly.call(panel, panel.$.editor); + panel.$.clipName.value = panel.currentClipInfo.name; // ruler making @@ -617,43 +652,6 @@ const Elements = { }, }; -exports.update = function(assetList, metaList) { - this.assetList = assetList; - this.metaList = metaList; - this.asset = assetList[0]; - this.meta = metaList[0]; - - for (const prop in Elements) { - const element = Elements[prop]; - if (element.update) { - element.update.call(this); - } - } - this.initAnimationNameToUUIDMap(); - this.initAnimationInfos(); - if (this.animationInfos) { - this.onSelect(this.rawClipIndex, this.splitClipIndex); - } -}; - -exports.ready = function() { - for (const prop in Elements) { - const element = Elements[prop]; - if (element.ready) { - element.ready.call(this); - } - } -}; - -exports.close = function() { - for (const prop in Elements) { - const element = Elements[prop]; - if (element.close) { - element.close.call(this); - } - } -}; - async function callModelPreviewFunction(funcName, ...args) { return await Editor.Message.request('scene', 'call-preview-function', 'scene:model-preview', funcName, ...args); } @@ -1000,6 +998,7 @@ exports.methods = { const curClipInfo = panel.getCurClipInfo(); Editor.Message.broadcast('fbx-inspector:animation-change', curClipInfo); panel.dispatch('change'); + panel.dispatch('snapshot'); }, updateVirtualControl() { const panel = this; @@ -1038,6 +1037,7 @@ exports.methods = { panel.clipNames.add(name); panel.dispatch('change'); + panel.dispatch('snapshot'); Elements.clips.update.call(panel); }, onCutClip(event) { @@ -1050,6 +1050,7 @@ exports.methods = { Elements.editor.update.call(panel); panel.dispatch('change'); + panel.dispatch('snapshot'); }, onFpsChange(event) { const panel = this; @@ -1058,6 +1059,7 @@ exports.methods = { Elements.editor.update.call(panel); panel.dispatch('change'); + panel.dispatch('snapshot'); }, onWrapModeChange(event) { const panel = this; @@ -1072,6 +1074,7 @@ exports.methods = { ); Elements.editor.update.call(panel); panel.dispatch('change'); + panel.dispatch('snapshot'); }, onSpeedChange(event) { const panel = this; @@ -1087,5 +1090,50 @@ exports.methods = { Elements.editor.update.call(panel); panel.dispatch('change'); + panel.dispatch('snapshot'); }, }; + +exports.ready = function() { + for (const prop in Elements) { + const element = Elements[prop]; + if (element.ready) { + element.ready.call(this); + } + } +}; + +exports.update = function(assetList, metaList) { + this.assetList = assetList; + this.metaList = metaList; + this.asset = assetList[0]; + this.meta = metaList[0]; + + if (assetList.length > 1) { + this.$.container.setAttribute('multiple-invalid', ''); + return; + } else { + this.$.container.removeAttribute('multiple-invalid'); + } + + for (const prop in Elements) { + const element = Elements[prop]; + if (element.update) { + element.update.call(this); + } + } + this.initAnimationNameToUUIDMap(); + this.initAnimationInfos(); + if (this.animationInfos) { + this.onSelect(this.rawClipIndex, this.splitClipIndex); + } +}; + +exports.close = function() { + for (const prop in Elements) { + const element = Elements[prop]; + if (element.close) { + element.close.call(this); + } + } +}; diff --git a/editor/inspector/assets/fbx/event-editor/event-item.js b/editor/inspector/assets/fbx/event-editor/event-item.js index 74a68166dc2..e3e17db8e41 100644 --- a/editor/inspector/assets/fbx/event-editor/event-item.js +++ b/editor/inspector/assets/fbx/event-editor/event-item.js @@ -6,7 +6,7 @@ const defaultParams = { boolean: false, }; -exports.template = ` +exports.template = /* html */`
diff --git a/editor/inspector/assets/fbx/events/events.js b/editor/inspector/assets/fbx/events/events.js index 917102e60ca..47093dda60b 100644 --- a/editor/inspector/assets/fbx/events/events.js +++ b/editor/inspector/assets/fbx/events/events.js @@ -1,6 +1,6 @@ 'use strict'; -exports.template = ` +exports.template = /* html */`