2023-02-06 12:06:34 +08:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 由于RenderEntity未暴露,所以修改就只有另辟蹊径
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
import { Graphics } from "cc";
|
|
|
|
|
import { UIRenderer } from "cc";
|
|
|
|
|
import { TiledLayer } from "cc";
|
|
|
|
|
import { UIMeshRenderer } from "cc";
|
|
|
|
|
import { __private,dragonBones,sp } from "cc";
|
|
|
|
|
import { JSB } from "cc/env";
|
|
|
|
|
import { DEFAULT_SORTING_PRIORITY } from "../sorting-define";
|
|
|
|
|
|
|
|
|
|
export enum RenderEntityFloatSharedBufferView {
|
|
|
|
|
localOpacity,
|
|
|
|
|
sortingPriority,
|
|
|
|
|
count,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export enum RenderEntityUInt8SharedBufferView {
|
|
|
|
|
colorR,
|
|
|
|
|
colorG,
|
|
|
|
|
colorB,
|
|
|
|
|
colorA,
|
|
|
|
|
maskMode,
|
|
|
|
|
count,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export enum RenderEntityBoolSharedBufferView {
|
|
|
|
|
colorDirty,
|
|
|
|
|
enabled,
|
|
|
|
|
useLocal,
|
|
|
|
|
count,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* RenderEntity类
|
|
|
|
|
*/
|
|
|
|
|
let RenderEntityClass:typeof __private._cocos_2d_renderer_render_entity__RenderEntity = null;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 更新RenderEntity实体
|
|
|
|
|
*/
|
|
|
|
|
export function UpdateRenderEntity(renderEntity:__private._cocos_2d_renderer_render_entity__RenderEntity){
|
|
|
|
|
if(renderEntity && !RenderEntityClass){
|
|
|
|
|
RenderEntityClass = renderEntity.constructor as typeof __private._cocos_2d_renderer_render_entity__RenderEntity;
|
|
|
|
|
|
|
|
|
|
// @ts-ignore
|
|
|
|
|
RenderEntityClass.prototype.initSharedBuffer = function(){
|
|
|
|
|
this._sortingPriority = DEFAULT_SORTING_PRIORITY;
|
|
|
|
|
if (JSB) {
|
|
|
|
|
//this._sharedBuffer = new Float32Array(RenderEntitySharedBufferView.count);
|
|
|
|
|
const buffer = this._nativeObj.getEntitySharedBufferForJS();
|
|
|
|
|
let offset = 0;
|
|
|
|
|
this._floatSharedBuffer = new Float32Array(buffer, offset, RenderEntityFloatSharedBufferView.count);
|
|
|
|
|
offset += RenderEntityFloatSharedBufferView.count * 4;
|
|
|
|
|
this._uint8SharedBuffer = new Uint8Array(buffer, offset, RenderEntityUInt8SharedBufferView.count);
|
|
|
|
|
offset += RenderEntityUInt8SharedBufferView.count * 1;
|
|
|
|
|
this._boolSharedBuffer = new Uint8Array(buffer, offset, RenderEntityBoolSharedBufferView.count);
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
if(!('sortingPriority' in RenderEntityClass.prototype)){
|
|
|
|
|
Object.defineProperty(RenderEntityClass.prototype, 'sortingPriority', {
|
|
|
|
|
get: function() {
|
|
|
|
|
return this._sortingPriority;
|
|
|
|
|
},
|
|
|
|
|
set: function(value) {
|
2023-02-06 22:06:27 +08:00
|
|
|
|
this._sortingPriority = value;
|
|
|
|
|
// console.log(`JSB sortingPriority ${value}`);
|
2023-02-06 12:06:34 +08:00
|
|
|
|
if (JSB) {
|
|
|
|
|
this._floatSharedBuffer[RenderEntityFloatSharedBufferView.sortingPriority] = value;
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
enumerable: true
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// @ts-ignore
|
|
|
|
|
renderEntity.initSharedBuffer();
|
|
|
|
|
|
|
|
|
|
console.log('Update RenderEntity Class');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// @ts-ignore
|
|
|
|
|
const Graphics_createRenderEntity = Graphics.prototype.createRenderEntity;
|
|
|
|
|
// @ts-ignore
|
|
|
|
|
Graphics.prototype.createRenderEntity = function(){
|
|
|
|
|
let entity = Graphics_createRenderEntity.call(this);
|
|
|
|
|
UpdateRenderEntity(entity);
|
|
|
|
|
return entity;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const UIMeshRenderer_onLoad = UIMeshRenderer.prototype.onLoad;
|
|
|
|
|
UIMeshRenderer.prototype.onLoad = function(){
|
|
|
|
|
UpdateRenderEntity(this._renderEntity);
|
|
|
|
|
return UIMeshRenderer_onLoad.call(this);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// @ts-ignore
|
|
|
|
|
const UIRenderer_createRenderEntity = UIRenderer.prototype.createRenderEntity;
|
|
|
|
|
// @ts-ignore
|
|
|
|
|
UIRenderer.prototype.createRenderEntity = function(){
|
|
|
|
|
let entity = UIRenderer_createRenderEntity.call(this);
|
|
|
|
|
UpdateRenderEntity(entity);
|
|
|
|
|
return entity;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(dragonBones){
|
|
|
|
|
// @ts-ignore
|
|
|
|
|
const ArmatureDisplay_createRenderEntity = dragonBones.ArmatureDisplay.prototype.createRenderEntity;
|
|
|
|
|
// @ts-ignore
|
|
|
|
|
dragonBones.ArmatureDisplay.prototype.createRenderEntity = function(){
|
|
|
|
|
let entity = ArmatureDisplay_createRenderEntity.call(this);
|
|
|
|
|
UpdateRenderEntity(entity);
|
|
|
|
|
return entity;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(sp){
|
|
|
|
|
// @ts-ignore
|
|
|
|
|
const Skeleton_createRenderEntity = sp.Skeleton.prototype.createRenderEntity;
|
|
|
|
|
// @ts-ignore
|
|
|
|
|
sp.Skeleton.prototype.createRenderEntity = function(){
|
|
|
|
|
let entity = Skeleton_createRenderEntity.call(this);
|
|
|
|
|
UpdateRenderEntity(entity);
|
|
|
|
|
return entity;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(TiledLayer){
|
|
|
|
|
// @ts-ignore
|
|
|
|
|
const TiledLayer_createRenderEntity = TiledLayer.prototype.createRenderEntity;
|
|
|
|
|
// @ts-ignore
|
|
|
|
|
TiledLayer.prototype.createRenderEntity = function(){
|
|
|
|
|
let entity = TiledLayer_createRenderEntity.call(this);
|
|
|
|
|
UpdateRenderEntity(entity);
|
|
|
|
|
return entity;
|
|
|
|
|
}
|
|
|
|
|
}
|