<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Avalonia 跨平臺框架中如何以正確的姿勢使用 OpenGL ES 渲染。

      前言

      這是一篇很水的文章,沒有任何技術含量,在 Github 已經有很多人對 AvaloniaOpenGL ES 支持進行了討論,但是我還是想寫一篇文章來記錄一下我是如何在 Avalonia 中使用 OpenGL ES 的。

      介紹

      在介紹 AvaloniaOpenGL ES 之前,我們先來了解一下什么是 AvaloniaOpenGL ES 以及 Avalonia 是如何支持 OpenGL ES 的。

      Angle 和 OpenGL ES

      ANGLE 是一個開源的項目,它的目標是將 OpenGL ES 2.0、3.03.1 應用程序轉換為 Direct3D 11VulkanMetalOpenGL 3.0+ 應用程序。

      ANGLE 通過將 OpenGL ES API 調用轉換為 Direct3DVulkanMetal API 調用來實現這一目標。

      ANGLE 也提供了一個實現 OpenGL ES 2.0、3.03.1 的庫,這樣就可以在不支持 OpenGL ES 的平臺上運行 OpenGL ES 應用程序。

      以下是摘自 ANGLE 項目的介紹:

      Level of OpenGL ES support via backing renderers
      Direct3D 9 Direct3D 11 Desktop GL GL ES Vulkan Metal
      OpenGL ES 2.0 complete complete complete complete complete complete
      OpenGL ES 3.0 complete complete complete complete complete
      OpenGL ES 3.1 [incomplete][ES31OnD3D] complete complete complete
      OpenGL ES 3.2 in progress in progress complete
      Platform support via backing renderers
      Direct3D 9 Direct3D 11 Desktop GL GL ES Vulkan Metal
      Windows complete complete complete complete complete
      Linux complete complete
      Mac OS X complete complete [1]
      iOS complete [2]
      Chrome OS complete planned
      Android complete complete
      GGP (Stadia) complete
      Fuchsia complete

      ANGLE 項目的地址:https://github.com/google/angle

      Avalonia

      Avalonia 是一個 .NET 平臺的 XAMLC#UI 框架,它的目標是創建一個跨平臺的 UI 框架,支持 WindowsLinuxMacOS。(摘自 Avalonia 官網)

      Avalonia 渲染 API 的實現是基于 SkiaSharp 的,SkiaSharpGoogleSkia 圖形庫的 .NET 實現。
      為了實現硬件加速 SkiaSharp 是支持 OpenGLOpenGL ES 渲染的,為了統一平臺,Avalonia 選擇了 ANGLE 作為 OpenGL ES 的實現。

      Avalonia 項目的地址:https://github.com/AvaloniaUI/Avalonia

      如何使用 OpenGL ES

      Avalonia 中的 OpenGL ES 是通過 ANGLE 來實現的,在 Avalonia 項目中已經集成了 ANGLE,所以我們不需要再去關心 ANGLE 的集成問題。

      在該框架中使用 OpenGL ES 的方式是通過 Avalonia 提供的 OpenGlControlBase 控件來實現的,我們只需要集成 OpenGlControlBase 控件并重寫 OnOpenGlInit 方法就可以獲取到 OpenGL ESContext 以及函數指針了。

      Avalonia 中使用 OpenGL ES 的步驟如下:(我這邊使用的是 Silk.NET 來調用 OpenGL ES 的函數)

      using Silk.NET.OpenGLES;
      
      namespace GraphicsHostApp.Graphics.OpenGL;
      
      public class Renderer : OpenGlControlBase, IGraphicsHost<GL>
      {
      	private GL _gl;
      
      	protected override void OnOpenGlInit(GlInterface gl)
      	{
      		// 獲取 OpenGL ES 的 函數指針。
      		_gl ??= GL.GetApi(gl.GetProcAddress);
      
      		// 后續初始化操作。
      	}
      
      	protected override void OnOpenGlDeinit(GlInterface gl)
      	{
      		// 釋放 OpenGL ES 的資源。
      		Code ...
      
      		// 釋放函數指針。
      		_gl.Dispose();
      		_gl = null;
      	}
      
      	protected override void OnOpenGlRender(GlInterface gl, int fb)
      	{
      		// 更新操作。
      		Code ...
      
      		// 渲染操作。 注:這里需要注意的是,父類代碼并沒有更新視口,所以需要手動更新視口。gl.Viewport(0, 0, Width, Height);
      		Code ...
      
      		// 提交渲染到主循環中。
      		Dispatcher.UIThread.Post(RequestNextFrameRendering, DispatcherPriority.Render);
      	}
      }
      

      結語

      Avalonia 是一個很不錯的 UI 框架,它的 OpenGL ES 支持也是很完善的,但是在使用 OpenGL ES 的時候需要注意的是 OpenGL ESContext 是在 OpenGlControlBaseOnOpenGlInit 方法中創建的,所以在 OnOpenGlRender 方法中使用 OpenGL ES 的函數指針的時候需要注意 Context 是否已經創建了。

      其次,OpenGL ESContext 是線程相關的,所以在使用 OpenGL ES 的時候需要注意 Context 的線程問題。

      在使用 OpenGL ES 擴展的時候要注意 ANGLE 是否支持該擴展,如果不支持的話需要自己去實現。

      演示項目

      • GraphicsHostAppAvaloniaOpenGL ES 的演示項目,介紹了如何使用 C#C++ 來實現 OpenGL ES 渲染。)

      參考

      posted @ 2024-02-29 15:30  o王先生o  閱讀(3372)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产又爽又黄的精品视频| 男女做aj视频免费的网站| 国产精品一区二区三区日韩| 亚洲综合一区二区三区不卡| 日本高清一区二区三| 麻豆a级片| 人妻少妇精品视频二区| 欧美老熟妇乱子伦牲交视频| 四虎在线成人免费观看| 日本少妇被黑人xxxxx| 亚洲香蕉伊综合在人在线| 老熟妇欲乱一区二区三区| 九九热视频在线免费观看| 亚洲一区二区中文字幕| 欧美日韩一线| 国产又黄又硬又粗| 无码免费大香伊蕉在人线国产| 无遮挡aaaaa大片免费看| 99国产欧美另类久久久精品| 蜜臀av人妻国产精品建身房| 色婷婷欧美在线播放内射| 九九热在线精品视频免费| 国产老头多毛Gay老年男| 国产老头多毛Gay老年男| 亚洲天堂领先自拍视频网| 青柠影院免费观看高清电视剧丁香| 国产成人av电影在线观看第一页| 三上悠亚精品一区二区久久| 亚洲V天堂V手机在线| 日韩人妻一区二区三区蜜桃视频| av鲁丝一区鲁丝二区鲁丝三区| 成年女人片免费视频播放A| 成人午夜视频在线| 护士张开腿被奷日出白浆| 人妻系列无码专区免费| 午夜福利偷拍国语对白| 免费人成视频在线| 亚洲小说乱欧美另类| 亚洲欧美日韩综合一区在线| 中文字幕波多野不卡一区| 四虎国产精品久久免费地址|