From e3e0f3caef6d430ebeb67ba991ca9954bd12b6da Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Fri, 23 Sep 2022 18:46:13 +0100 Subject: [PATCH] working webgl and GRGl context initialisation. --- src/Web/Avalonia.Web.Sample/Program.cs | 5 +---- src/Web/Avalonia.Web.Sample/interop.js | 2 +- src/Web/Avalonia.Web/AvaloniaRuntime.cs | 5 ++++- .../Avalonia.Web/webapp/modules/avalonia/canvas.ts | 13 +++++++------ src/Web/Avalonia.Web/wwwroot/avalonia.js | 4 +++- 5 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/Web/Avalonia.Web.Sample/Program.cs b/src/Web/Avalonia.Web.Sample/Program.cs index 93516e65ed..3ad6db15dc 100644 --- a/src/Web/Avalonia.Web.Sample/Program.cs +++ b/src/Web/Avalonia.Web.Sample/Program.cs @@ -8,14 +8,11 @@ using Avalonia.Web; internal class Program { - [DllImport("libSkiaSharp", CallingConvention = CallingConvention.Cdecl)] - static extern JSObject example_initialize(); + private static void Main(string[] args) { Console.WriteLine("Hello, Browser!"); - example_initialize(); - Console.WriteLine(); diff --git a/src/Web/Avalonia.Web.Sample/interop.js b/src/Web/Avalonia.Web.Sample/interop.js index 2358c357d3..b75212e7a7 100644 --- a/src/Web/Avalonia.Web.Sample/interop.js +++ b/src/Web/Avalonia.Web.Sample/interop.js @@ -5,7 +5,7 @@ var LibraryExample = { } }, example_initialize: function () { - window["avalonia-helper-GL"] = GL + globalThis.AvaloniaGL = GL } } diff --git a/src/Web/Avalonia.Web/AvaloniaRuntime.cs b/src/Web/Avalonia.Web/AvaloniaRuntime.cs index c8ff75a77f..d5bcd7dd98 100644 --- a/src/Web/Avalonia.Web/AvaloniaRuntime.cs +++ b/src/Web/Avalonia.Web/AvaloniaRuntime.cs @@ -9,10 +9,13 @@ public partial class AvaloniaRuntime { public record GLInfo(int ContextId, uint FboId, int Stencils, int Samples, int Depth); + [DllImport("libSkiaSharp", CallingConvention = CallingConvention.Cdecl)] + static extern JSObject example_initialize(); + [JSExport] internal static void StartAvaloniaView(JSObject canvas) { - Init(); + example_initialize(); // setup, get gl context... var info = InitGL(canvas, "testCanvas"); diff --git a/src/Web/Avalonia.Web/webapp/modules/avalonia/canvas.ts b/src/Web/Avalonia.Web/webapp/modules/avalonia/canvas.ts index c8acf5e428..2e1443074d 100644 --- a/src/Web/Avalonia.Web/webapp/modules/avalonia/canvas.ts +++ b/src/Web/Avalonia.Web/webapp/modules/avalonia/canvas.ts @@ -1,6 +1,4 @@ -declare let GL: any; -declare let GLctx: WebGLRenderingContext; -declare let Module: EmscriptenModule; +declare let Module: EmscriptenModule; type SKGLViewInfo = { context: WebGLRenderingContext | WebGL2RenderingContext | undefined; @@ -64,9 +62,13 @@ export class Canvas { return; } + var GL = (globalThis as any).AvaloniaGL; + // make current GL.makeContextCurrent(ctx); + var GLctx = GL.currentContext.GLctx as WebGLRenderingContext; + // read values const fbo = GLctx.getParameter(GLctx.FRAMEBUFFER_BINDING); this.glInfo = { @@ -103,8 +105,7 @@ export class Canvas { renderViaOffscreenBackBuffer: 1, }; - - var context = htmlCanvas.getContext("webgl2", contextAttributes); + var GL = (globalThis as any).AvaloniaGL; let ctx: WebGLRenderingContext = GL.createContext(htmlCanvas, contextAttributes); if (!ctx && contextAttributes.majorVersion > 1) { @@ -116,4 +117,4 @@ export class Canvas { return ctx; } -} \ No newline at end of file +} diff --git a/src/Web/Avalonia.Web/wwwroot/avalonia.js b/src/Web/Avalonia.Web/wwwroot/avalonia.js index 8a44381e52..94c5e9d254 100644 --- a/src/Web/Avalonia.Web/wwwroot/avalonia.js +++ b/src/Web/Avalonia.Web/wwwroot/avalonia.js @@ -30,7 +30,9 @@ var Canvas = class { console.error(`Failed to create WebGL context: err ${ctx}`); return; } + var GL = globalThis.AvaloniaGL; GL.makeContextCurrent(ctx); + var GLctx = GL.currentContext.GLctx; const fbo = GLctx.getParameter(GLctx.FRAMEBUFFER_BINDING); this.glInfo = { context: ctx, @@ -82,7 +84,7 @@ var Canvas = class { explicitSwapControl: 0, renderViaOffscreenBackBuffer: 1 }; - var context = htmlCanvas.getContext("webgl2", contextAttributes); + var GL = globalThis.AvaloniaGL; let ctx = GL.createContext(htmlCanvas, contextAttributes); if (!ctx && contextAttributes.majorVersion > 1) { console.warn("Falling back to WebGL 1.0");