Avalonia-Silk.NET-Example icon indicating copy to clipboard operation
Avalonia-Silk.NET-Example copied to clipboard

Render YUVJ420P is abnormal

Open qqJoker opened this issue 1 year ago • 0 comments

I use Silk.Net and Avalonia.OpenGL to play the rtsp stream, and add three textures for rendering, but the problem is here, avalonia will occasionally appear the following error:

Avalonia.OpenGL.OpenGlException: Unable to make the context current
   at Avalonia.Win32.OpenGl.WglRestoreContext..ctor(IntPtr gc, IntPtr context, Object monitor, Boolean takeMonitor) in /_/src/Windows/Avalonia.Win32/OpenGl/WglRestoreContext.cs:line 27
   at Avalonia.Win32.OpenGl.WglContext.MakeCurrent(IntPtr hdc) in /_/src/Windows/Avalonia.Win32/OpenGl/WglContext.cs:line 74
   at Avalonia.Win32.OpenGl.WglGlPlatformSurface.RenderTarget.BeginDraw() in /_/src/Windows/Avalonia.Win32/OpenGl/WglGlPlatformSurface.cs:line 47
   at Avalonia.Skia.GlRenderTarget.BeginRenderingSession() in /_/src/Skia/Avalonia.Skia/Gpu/OpenGl/GlRenderTarget.cs:line 63
   at Avalonia.Skia.SkiaGpuRenderTarget.CreateDrawingContext(IVisualBrushRenderer visualBrushRenderer) in /_/src/Skia/Avalonia.Skia/Gpu/SkiaGpuRenderTarget.cs:line 27
   at Avalonia.Rendering.DeferredRenderer.EnsureDrawingContext(IDrawingContextImpl& context) in /_/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs:line 617
   at Avalonia.Rendering.DeferredRenderer.UpdateRenderLayersAndConsumeSceneIfNeeded(IDrawingContextImpl& context, Boolean recursiveCall) in /_/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs:line 374
   at Avalonia.Rendering.DeferredRenderer.Render(Boolean forceComposite) in /_/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs:line 323
   at Avalonia.Rendering.DeferredRenderer.Avalonia.Rendering.IRenderLoopTask.Render() in /_/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs:line 275
   at Avalonia.Rendering.RenderLoop.TimerTick(TimeSpan time) in /_/src/Avalonia.Visuals/Rendering/RenderLoop.cs:line 147

My rendering code is as follows:

protected override unsafe void OnOpenGlRender(GlInterface gl, int fb)
 {
        this._gl.Viewport(0, 0, (uint)Bounds.Width, (uint)Bounds.Height);
         //Get YUVJ420P Frame
        if (this._playerBase != null && this._playerBase.OutputFrameCache(this._uniqueKey, out var frame))
        {
            this._texture.Bind(frame, this._shader);
            this._shader.Use();
            this._vao.Bind();
            this._gl.DrawElements(PrimitiveType.Triangles, (uint)_indices.Length, DrawElementsType.UnsignedInt, null);
        }
       Dispatcher.UIThread.InvokeAsync(InvalidateVisual);
    }

Can you tell me what caused this error, thank you very much!!

qqJoker avatar Mar 31 '23 06:03 qqJoker