国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

在CPF里使用OpenGL做跨平臺桌面應用開發(fā)

這篇具有很好參考價值的文章主要介紹了在CPF里使用OpenGL做跨平臺桌面應用開發(fā)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

CPF 是開源的C#跨平臺UI框架,支持使用OpenGL來渲染,可以用來硬件加速播放視頻或者顯示3D模型

實現(xiàn)原理其實就是Skia用OpenGL后端,Skia里綁定GLView的OpenGL紋理,將紋理作為Skia的圖像混合繪制。

在CPF里使用OpenGL,不能選擇NetCore3.0和Net4,需要選擇Netcore3.1以及之后的版本。

Nuget里安裝最新版的CPF。另外安裝Silk.NET或者OpenTK來調用OpenGL繪制。

Program里需要開啟GPU,設置 UseGPU = true

    class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            Application.Initialize(
                (OperatingSystemType.Windows, new WindowsPlatform(), new SkiaDrawingFactory { UseGPU = true })
                , (OperatingSystemType.OSX, new CPF.Mac.MacPlatform(), new SkiaDrawingFactory { UseGPU = true })//如果需要支持Mac才需要
                , (OperatingSystemType.Linux, new CPF.Linux.LinuxPlatform(), new SkiaDrawingFactory { UseGPU = true })//如果需要支持Linux才需要
            );
            Application.Run(new Window2_1_Colors());
        }
    }

界面上添加 CPF.Skia.GLView 控件,GLLoaded為GL加載完成事件,GLRender為GL繪制事件。OpenGL就在這兩個事件里處理

            Children.Add(new WindowFrame(this, new GLView
            {
                Width = "100%",
                Height = "100%",
                [nameof(GLView.GLLoaded)] = new CommandDescribe((s, e) => GLLoaded((GLView)s, (GLEventArgs)e)),
                [nameof(GLView.GLRender)] = new CommandDescribe((s, e) => GLRender((GLView)s, (GLEventArgs)e)),
                [nameof(GLView.MouseDown)] = new CommandDescribe((s, e) => MouseEvent((GLView)s, (MouseEventArgs)e)),
                [nameof(GLView.MouseUp)] = new CommandDescribe((s, e) => MouseEvent((GLView)s, (MouseEventArgs)e)),
                [nameof(GLView.MouseMove)] = new CommandDescribe((s, e) => MouseEvent((GLView)s, (MouseEventArgs)e)),
            })
            {
                MaximizeBox = true
            });

Silk.Net初始化API

        GL gl;//可以保存為全局的字段
        void GLLoaded(GLView view, GLEventArgs args)
        {
            gl = GL.GetApi(args.Context.GetProcAddress);
        }

OpenTk初始化API

    class Context : OpenTK.IBindingsContext
    {//定義API綁定的上下文
        public IGlContext context;
        public IntPtr GetProcAddress(string procName)
        {
            return context.GetProcAddress(procName);
        }
    }

        void GLLoaded(GLView view, GLEventArgs args)
        {//初始化一次就行
             GL.LoadBindings(new Context { context = args.Context });
        }

在GLRender事件里繪制。默認情況下GLRender不會一直調用,因為繪制方式不是游戲那種實時刷新的。需要刷新的時候要主動調用Invalidate(),或者用定時器來實時調用Invalidate()。

        void GLRender(GLView view, GLEventArgs args)
        {
            gl.Enable(GLEnum.DepthTest);//開啟深度測試
            gl.DepthMask(true);

            //其他繪制代碼。。。。


            //開啟深度測試之后要關閉,否則會無法顯示界面,同樣的,如果開啟了其他功能,繪制結束后記得關閉,否則可能影響界面繪制。因為和界面共享OpenGL的上下文。
            gl.Disable(GLEnum.DepthTest);
        }

?

具體OpenGL的繪制教程你可以直接找Silk.NET或者OpenTK的教程就行。

運行效果

在CPF里使用OpenGL做跨平臺桌面應用開發(fā)

在CPF里使用OpenGL做跨平臺桌面應用開發(fā)

在CPF里使用OpenGL做跨平臺桌面應用開發(fā)

?

案例源碼下載:CPF_OpenGL

CPF開源地址:https://gitee.com/csharpui/CPF文章來源地址http://www.zghlxwxcb.cn/news/detail-748512.html

到了這里,關于在CPF里使用OpenGL做跨平臺桌面應用開發(fā)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Vue.js + Electron 的跨平臺桌面應用程序開發(fā)

    本文介紹了 Vue.js 和 Electron 的基本特點和原理,并分析了它們在桌面應用程序開發(fā)中的優(yōu)勢和應用場景。在基于 Vue.js 和 Electron 的桌面應用程序開發(fā)實踐中,本文詳細介紹了項目的搭建和配置,包括環(huán)境的準備、項目的初始化和依賴的安裝等步驟。然后,本文介紹了使用 Vu

    2024年02月13日
    瀏覽(20)
  • CPF C#跨平臺UI框架開源了

    CPF C#跨平臺UI框架開源了

    C#跨平臺UI框架 提供NETStandard2.0和net4的庫,通過Netcore可以跨平臺,支持Windows、Mac、Linux,Net4的可以支持XP。 各個平臺運行效果一致,不依賴系統(tǒng)控件。 支持窗體,控件任意透明,支持異形窗體,支持SVG圖標顯示。 支持動畫,數(shù)據(jù)綁定,Mvvm模式,CSS等,簡化依賴屬性,數(shù)據(jù)綁

    2024年02月05日
    瀏覽(93)
  • NativePHP:使用PHP構建跨平臺桌面應用的新框架

    NativePHP是一個用于使用PHP構建桌面應用的框架。它允許PHP開發(fā)人員使用熟悉的工具和技術創(chuàng)建跨平臺的原生應用。NativePHP具有一系列易于使用的類,一套用于構建和打包應用程序的工具以及一個靜態(tài)跨平臺PHP運行時。 官網地址:https://nativephp.com PHP究竟是什么?嚴格地說,N

    2024年02月14日
    瀏覽(30)
  • C++輕量級跨平臺桌面GUI庫FLTK的簡單使用

    C++輕量級跨平臺桌面GUI庫FLTK的簡單使用

    C++的跨平臺桌面GUI庫有很多,大體上分成兩種流派:retained mode和immediate mode。 其中前者是主流的桌面GUI機制框架,包括:Qt、wxwidgets、gtk、juce等 后者是一些游戲引擎編輯器常用的GUI機制框架,包括:imgui、nanogui等 使用這些框架都支持構建在windows、mac、linux上面能運行的桌面

    2024年02月08日
    瀏覽(87)
  • web前端項目使用electron打包成跨平臺桌面端程序(Windows)

    web前端項目使用electron打包成跨平臺桌面端程序(Windows)

    Electron是一個使用 JavaScript、HTML 和 CSS 構建桌面應用程序的框架。 嵌入 Chromium 和 Node.js 到 二進制的 Electron 允許您保持一個 JavaScript 代碼代碼庫并創(chuàng)建 在Windows上運行的跨平臺應用 macOS和Linux——不需要本地開發(fā) 經驗。 在使用Electron進行開發(fā)之前,您需要安裝 Node.js。 我們建

    2024年02月16日
    瀏覽(26)
  • Flutter:跨平臺移動應用開發(fā)的未來

    Flutter:跨平臺移動應用開發(fā)的未來

    Flutter的背景和概述 Flutter是由Google開發(fā)的一個開源UI工具包,用于構建漂亮、快速且高度可定制的移動應用程序。它于2017年首次發(fā)布,并迅速引起了開發(fā)者們的關注。Flutter采用了一種全新的方法來構建用戶界面,通過使用自繪UI技術,可以實現(xiàn)高性能的跨平臺應用開發(fā)。 Fl

    2024年01月22日
    瀏覽(92)
  • 跨平臺桌面應用小記

    跨平臺桌面應用小記

    不管是出于產品定位、多平臺統(tǒng)一亦或是國產化要求??缙脚_都是桌面開發(fā)都是必須要面對的一個課題,下面簡單列舉下主流或一些新興的跨平臺方案,以備后續(xù)使用。 1、Qt Qt是一個跨平臺的C++圖形用戶界面庫,可以部署在Windows、Mac、Linux、嵌入式系統(tǒng)(QNX等)、Android等平

    2024年02月05日
    瀏覽(93)
  • 構建跨設備3D應用:HOOPS的跨平臺開發(fā)能力

    構建跨設備3D應用:HOOPS的跨平臺開發(fā)能力

    在當今數(shù)字化和可視化需求不斷提升的時代,三維技術的應用越來越廣泛,尤其在制造、建筑、工程及媒體行業(yè)。HOOPS,由Tech Soft 3D開發(fā),是一套全面的軟件開發(fā)工具包,用于構建高性能的三維應用程序。該工具包涵蓋了從三維渲染到復雜數(shù)據(jù)交換的多個方面,支持廣泛的文

    2024年04月25日
    瀏覽(97)
  • 【前端進階】跨平臺開發(fā)與原生應用:技術融合的未來

    在移動設備的快速普及和大規(guī)模應用的背景下,開發(fā)應用程序的跨平臺能力已成為前端開發(fā)人員不可或缺的技能??缙脚_開發(fā)允許我們使用統(tǒng)一的代碼庫構建應用程序,同時在多個平臺上實現(xiàn)原生應用的性能和體驗。在本文中,我們將探討跨平臺開發(fā)的概念、優(yōu)勢以及目前流

    2024年02月11日
    瀏覽(93)
  • 跨平臺應用開發(fā)進階(三十二) :AK/SK鑒權原理簡介

    跨平臺應用開發(fā)進階(三十二) :AK/SK鑒權原理簡介

    ak/sk 是一種身份認證方式,常用于系統(tǒng)間接口調用時的身份驗證,其中 ak 為 Access Key ID , sk 為 Secret Access Key ??蛻舳撕头斩藘烧邥f(xié)商保存一份相同的 sk ,其中 sk 必須保密。 AK : Access Key Id ,?于標??戶; SK : Secret Access Key ,是?戶?于加密認證字符串和?來驗證認證

    2024年02月13日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包