C++輕量級(jí)界面開(kāi)發(fā)框架ImGUI介紹小結(jié)
??如果從事過(guò)C++ Windows客戶端開(kāi)發(fā),大家對(duì)MFC、Qt、DuiLib等各種DirectUI應(yīng)該有了解,本篇給大家介紹一個(gè)超級(jí)輕量級(jí)的C++開(kāi)源跨平臺(tái)圖形界面框架ImGUI.
ImGUI簡(jiǎn)介
??ImGUI主要用于游戲行業(yè),所有的控件都需要手繪實(shí)現(xiàn),當(dāng)然性能也是滿滿的,畢竟是直接用dx/opengl來(lái)實(shí)現(xiàn)。
ImGUI倉(cāng)庫(kù):https://github.com/ocornut/imgui
??ImGUI又稱為Dear ImGui,它是與平臺(tái)無(wú)關(guān)的C++輕量級(jí)跨平臺(tái)圖形界面庫(kù),沒(méi)有任何第三方依賴,可以將ImGUI的源碼直接加到項(xiàng)目中使用,也可以編譯成dll, ImGUI使用DX或者OpenGL進(jìn)行界面渲染,對(duì)于畫(huà)面質(zhì)量要求較高,例如客戶端游戲,4k/8k視頻播放時(shí),用ImGUI是很好的選擇,當(dāng)然,你得非常熟悉DirectX或者OpenGL,不然就是寶劍在手,屠龍無(wú)力。相對(duì)于Qt、MFC、DuiLib、SOUI等,ImGUI的拓展性更好,也更輕量級(jí),當(dāng)然對(duì)于開(kāi)發(fā)者的要求也更高.
??下載ImGUI代碼后,用vs2019可以直接打開(kāi),編譯,運(yùn)行,sln路徑如下:

sln路徑:imgui/examples/imgui_examples.sln
??運(yùn)行win32_dx12界面如下:

ImGUI沒(méi)有類似于Qt/MFC這種,可以拖拽控件進(jìn)行搭建界面,ImGUI的所有控件都必須手寫(xiě)實(shí)現(xiàn)。ImGUI的demo基本提供了所有控件、圖表等的實(shí)現(xiàn),源碼也有,可以對(duì)照的學(xué)習(xí)。
關(guān)于ImGUI的詳細(xì)介紹,可以參考github.
??注意這段話
This library is available under a free and permissive license, but needs financial support to sustain its continued improvements. In addition to maintenance and stability there are many desirable features yet to be added. If your company is using Dear ImGui, please consider reaching out.
ImGUI的界面實(shí)現(xiàn)
??基本控件:label、text、checkbox、slider

窗體控件:樹(shù)形控件、圖片控件、ComboBox、列表控件、菜單欄等

根據(jù)官方提供的demo來(lái)看,基本滿足開(kāi)發(fā)要求。
技術(shù)選型
??在PC端技術(shù)選型時(shí),如果公司有音視頻、圖形圖像、4k/8k視頻業(yè)務(wù),可以考慮一下使用ImGUI,畢竟是直接使用DX/OpenGL來(lái)進(jìn)行繪制渲染,其它功能就直接使用C++來(lái)實(shí)現(xiàn)。
如何使用ImGUI
??參考imgui的示例代碼,如下所示:

imgui github也有一些簡(jiǎn)單的介紹,可以參考,例如:集成
在大多數(shù)平臺(tái)上,當(dāng)使用c++時(shí),你應(yīng)該能夠使用imgui_impl_xxxx后端的組合而不需要修改(例如imgui_impl_win32.cpp + imgui_impl_dx11.cpp)。如果你的引擎支持多個(gè)平臺(tái),考慮使用更多的imgui_impl_xxxx文件,而不是重寫(xiě)它們:這將為你減少工作,你可以讓親愛(ài)的ImGui立即運(yùn)行。如果您愿意,可以稍后決定使用自定義引擎函數(shù)重寫(xiě)自定義后端。
將ImGui整合到你的自定義引擎中需要1)連接鼠標(biāo)/鍵盤/手柄輸入2)將紋理上傳到你的GPU/渲染引擎3)提供能夠綁定紋理并渲染紋理三角形的渲染功能。示例/文件夾中填充的應(yīng)用程序就是這樣做的。如果你是熟練掌握這些概念的資深程序員,那么將Dear ImGui集成到定制引擎中應(yīng)該不需要2個(gè)小時(shí)。請(qǐng)務(wù)必花時(shí)間閱讀FAQ、評(píng)論和一些示例/應(yīng)用程序!
官方維護(hù)的后端/綁定(在存儲(chǔ)庫(kù)中):
- 渲染器:DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2, SDL_Renderer, Vulkan, WebGPU。
- 平臺(tái):GLFW, SDL2, Win32, Glut, OSX, Android。
- 框架:Emscripten, Allegro5, Marmalade。
第三方后端/綁定wiki頁(yè)面:
- 語(yǔ)言:C, c#和:Beef, ChaiScript, Crystal, D, Go, Haskell, Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Odin, Pascal, PureBasic, Python, Ruby, Rust, Swift…
- 框架:AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder, Cocos2d-x,勤奮引擎,F(xiàn)lexium, GML/Game Maker studi2, GLEQ, Godot, GTK3+OpenGL3, Irrlicht引擎,L?VE+LUA, Magnum, Monogame, NanoRT, cine, niine Game Lib,任天堂3DS & Switch (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop, px_render, Qt/QtDirect3D,SDL_Renderer, sml, Sokol, Unity,虛幻引擎4,vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets。
- 注意,C綁定(cimgui)是自動(dòng)生成的,你可以使用它的json/lua輸出來(lái)生成其他語(yǔ)言的綁定。
到此這篇關(guān)于C++輕量級(jí)界面開(kāi)發(fā)框架ImGUI介紹小結(jié)的文章就介紹到這了,更多相關(guān)C++ ImGUI框架內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
約瑟夫環(huán)問(wèn)題(數(shù)組法)c語(yǔ)言實(shí)現(xiàn)
這篇文章主要介紹了約瑟夫環(huán)問(wèn)題(數(shù)組法)c語(yǔ)言實(shí)現(xiàn),有需要的朋友可以參考一下2013-12-12
C語(yǔ)言使用ffmpeg和sdl實(shí)現(xiàn)多路音頻播放
這篇文章主要為大家詳細(xì)介紹了一種基于ffmpeg和sdl實(shí)現(xiàn)的音頻多路混合的方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考一下2023-06-06
C++標(biāo)準(zhǔn)模板庫(kù)STL深入講解
STL提供了一組表示容器、迭代器、函數(shù)對(duì)象和算法的模板。容器是一個(gè)與數(shù)組類似的單元,可以存儲(chǔ)若干個(gè)值。STL容器是同質(zhì)的,即存儲(chǔ)的值的類型相同:算法是完成特定任務(wù)(如對(duì)數(shù)組進(jìn)行排序或在鏈表中查找特定值)的處方2022-12-12
C++實(shí)現(xiàn)LeetCode(692.前K個(gè)高頻詞)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(692.前K個(gè)高頻詞),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08
Windows注冊(cè)表中修改UAC(用戶賬號(hào)控制)及批處理腳本
今天小編就為大家分享一篇關(guān)于Windows注冊(cè)表中修改UAC(用戶賬號(hào)控制)及批處理腳本,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-12-12
C++?Protobuf實(shí)現(xiàn)接口參數(shù)自動(dòng)校驗(yàn)詳解
用C++做業(yè)務(wù)發(fā)開(kāi)的同學(xué)是否還在不厭其煩的編寫(xiě)大量if-else模塊來(lái)做接口參數(shù)校驗(yàn)?zāi)兀拷裉?,我們就模擬Java里面通過(guò)注解實(shí)現(xiàn)參數(shù)校驗(yàn)的方式來(lái)針對(duì)C++?protobuf接口實(shí)現(xiàn)一個(gè)更加方便、快捷的參數(shù)校驗(yàn)自動(dòng)工具,希望對(duì)大家有所幫助2023-04-04
C語(yǔ)言實(shí)現(xiàn)學(xué)生獎(jiǎng)學(xué)金評(píng)定系統(tǒng)
這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)學(xué)生獎(jiǎng)學(xué)金評(píng)定系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
C++實(shí)現(xiàn)拼圖游戲代碼(graphics圖形庫(kù))
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)拼圖游戲代碼,帶有g(shù)raphics圖形庫(kù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05

