Skip to content

Commit 5a828f9

Browse files
obiotclaude
andcommitted
Renderer: add base setBlendMode/GPURenderer, clean up as-any casts
- Add setBlendMode() to base Renderer class for TypeScript compatibility - Add GPURenderer property to base Renderer (WebGL overrides with GPU string) - Remove renderer as-any casts in header.ts and resize.ts - Remove unused context param from Canvas setBlendMode and resize.ts Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 1c13008 commit 5a828f9

4 files changed

Lines changed: 22 additions & 9 deletions

File tree

packages/melonjs/src/application/header.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,11 @@ import type Application from "./application.ts";
88
export function consoleHeader(app: Application): void {
99
const renderType = app.renderer.type;
1010
const gpu_renderer =
11-
typeof (app.renderer as any).GPURenderer === "string"
12-
? ` (${(app.renderer as any).GPURenderer})`
11+
typeof app.renderer.GPURenderer === "string"
12+
? ` (${app.renderer.GPURenderer})`
1313
: "";
1414
const depthTesting =
15-
renderType.includes("WebGL") &&
16-
(app.renderer as any).depthTest === "z-buffer"
15+
renderType.includes("WebGL") && app.renderer.depthTest === "z-buffer"
1716
? "Depth Test | "
1817
: "";
1918
const audioType = device.hasWebAudio ? "Web Audio" : "HTML5 Audio";

packages/melonjs/src/application/resize.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import type Application from "./application.ts";
1212
function scale(game: Application, x: number, y: number): void {
1313
const renderer = game.renderer;
1414
const canvas = renderer.getCanvas();
15-
const context = renderer.getContext();
1615
const settings = renderer.settings as any;
1716
const pixelRatio = device.devicePixelRatio;
1817

@@ -28,7 +27,7 @@ function scale(game: Application, x: number, y: number): void {
2827

2928
// if anti-alias and blend mode were reset (e.g. Canvas mode)
3029
renderer.setAntiAlias(settings.antiAlias);
31-
(renderer as any).setBlendMode(settings.blendMode, context);
30+
renderer.setBlendMode(settings.blendMode);
3231

3332
// force repaint
3433
game.repaint();

packages/melonjs/src/video/canvas/canvas_renderer.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -140,11 +140,10 @@ export default class CanvasRenderer extends Renderer {
140140
* <img src="../images/exclusion-blendmode.png" width="180"/> <br>
141141
* @see https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/globalCompositeOperation
142142
* @param {string} [mode="normal"] - blend mode
143-
* @param {CanvasRenderingContext2D} [context]
144143
* @returns {string} the blend mode actually applied (may differ if the requested mode is unsupported)
145144
*/
146-
setBlendMode(mode = "normal", context) {
147-
context = context || this.getContext();
145+
setBlendMode(mode = "normal") {
146+
const context = this.getContext();
148147
this.currentBlendMode = mode;
149148
switch (mode) {
150149
case "lighter":

packages/melonjs/src/video/renderer.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,12 @@ export default class Renderer {
7373
*/
7474
this.depthTest = "sorting";
7575

76+
/**
77+
* The GPU renderer string (WebGL only, undefined for Canvas)
78+
* @type {string|undefined}
79+
*/
80+
this.GPURenderer = undefined;
81+
7682
/**
7783
* The Path2D instance used by the renderer to draw primitives
7884
* @type {Path2D}
@@ -240,6 +246,16 @@ export default class Renderer {
240246
return this.currentBlendMode;
241247
}
242248

249+
/**
250+
* set the current blend mode.
251+
* Subclasses (CanvasRenderer, WebGLRenderer) implement the actual GL/Canvas logic.
252+
* @param {string} [mode="normal"] - blend mode
253+
* @param {boolean} [premultipliedAlpha=true] - whether textures use premultiplied alpha (WebGL only)
254+
*/
255+
setBlendMode(mode = "normal") {
256+
this.currentBlendMode = mode;
257+
}
258+
243259
/**
244260
* get the current fill & stroke style color.
245261
* @returns {Color} current global color

0 commit comments

Comments
 (0)