Skip to content

Commit

Permalink
🐛 added aerfaying support
Browse files Browse the repository at this point in the history
  • Loading branch information
FurryR committed Apr 21, 2024
1 parent e8765f1 commit 5cb1c3b
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 28 deletions.
33 changes: 5 additions & 28 deletions src/compiler/renderer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -272,7 +272,7 @@ export default function patchRenderer(vm: VM) {
}
const renderer = vm.runtime.renderer
if ((renderer as any)._gandiShaderManager) {
// you won gandi, i will keep your shader manager.
// Gandi modifies renderer (incompatible changes) for a lot -- because of Quake. As it reimplemented Turbowarp APIs, we just keep it.
return
}
const { canvas, _xLeft, _xRight, _yBottom, _yTop, _events } =
Expand All @@ -291,14 +291,6 @@ export default function patchRenderer(vm: VM) {
_yBottom,
_yTop
)

// const newRenderer: RenderWebGL = new (RenderWebGL as any)(
// renderer.canvas,
// renderer._xLeft,
// renderer._xRight,
// renderer._yBottom,
// renderer._yTop
// )
const nativeSize = renderer.getNativeSize()
;(vm.runtime as any).stageWidth = nativeSize[0]
;(vm.runtime as any).stageHeight = nativeSize[1]
Expand All @@ -313,23 +305,6 @@ export default function patchRenderer(vm: VM) {
if (vm.runtime.renderer) {
onReady()
} else {
// Object.defineProperty(vm.runtime, 'renderer', {
// get() {
// return null
// },
// set(renderer: RenderWebGL) {
// console.error('renderer set')
// Object.defineProperty(vm.runtime, 'renderer', {
// value: renderer,
// writable: true,
// configurable: true,
// enumerable: true
// })
// onReady()
// },
// configurable: true,
// enumerable: true
// })
const _attachRenderer = vm.runtime.constructor.prototype.attachRenderer
vm.runtime.constructor.prototype.attachRenderer = function (
renderer: RenderWebGL
Expand All @@ -339,11 +314,13 @@ export default function patchRenderer(vm: VM) {
_attachRenderer.call(this, renderer)
// Xiaomawang attaches renderer twice.
if (originalRenderer !== renderer && !(renderer instanceof RenderWebGL)) {
const isXiaomawang = !!(renderer as any).clearAllSkins
if (isXiaomawang) {
if (!!(renderer as any).clearAllSkins) {
// Patch Xiaomawang private APIs
const { clearAllSkins } = renderer as any
onReady()
// clearAllSkins() is used to dispose all skins. This API exists because Xiaomawang's developers have skill issue.
renderer.constructor.prototype.clearAllSkins = clearAllSkins
// extractDrawable() is used to extract the drawable (for dragging or something else). It slows down the renderer for a lot, so replace it with a no-op function would be fine.
renderer.constructor.prototype.extractDrawable = function () {
return {
data: '',
Expand Down
25 changes: 25 additions & 0 deletions src/compiler/runtime.ts
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,31 @@ export default function patchRuntime(vm: VM) {
name: string,
extensionObject: object
) {
if (name === 'pen' && (extensionObject as any).print) {
// Aerfaying private APIs
const { _getPenLayerID } = extensionObject as any
extensionObject.constructor.prototype._getPenLayerID = function () {
if (this._penSkinId < 0) {
const id = _getPenLayerID.call(this)
if (runtime.renderer) {
;(runtime.renderer as any)._penSkinId = id
;(runtime.renderer as any)._watermarkSkinId = this._watermarkSkinId
const _updateRenderQuality =
runtime.renderer.constructor.prototype._updateRenderQuality
runtime.renderer.constructor.prototype._updateRenderQuality =
function () {
const penSkinId = this._penSkinId
const watermarkSkinId = this._watermarkSkinId
_updateRenderQuality.call(this)
this._penSkinId = watermarkSkinId
_updateRenderQuality.call(this)
this._penSkinId = penSkinId
}
}
return id
} else return _getPenLayerID.call(this)
}
}
this[`ext_${name}`] = extensionObject
}
const _registerBlockPackages = runtime._registerBlockPackages
Expand Down

0 comments on commit 5cb1c3b

Please # to comment.