(Perpustakaan ini tersedia di bawah lisensi gratis dan permisif, namun memerlukan dukungan finansial untuk mempertahankan peningkatan berkelanjutan. Selain pemeliharaan dan stabilitas, masih banyak fitur yang diinginkan yang harus ditambahkan. Jika perusahaan Anda menggunakan Dear ImGui, harap pertimbangkan untuk menghubungi .)
Bisnis: mendukung pengembangan dan pemeliharaan berkelanjutan melalui kontrak sponsor/dukungan yang ditagih:
Email: hubungi @ dearimgui dot com
Individu: mendukung pengembangan dan pemeliharaan berkelanjutan di sini. Lihat juga halaman Pendanaan.
Pitch - Penggunaan - Cara kerjanya - Rilis & Log Perubahan - Demo - Memulai & Integrasi |
---|
Galeri - Dukungan, FAQ - Cara membantu - Pendanaan & Sponsor - Kredit - Lisensi |
Wiki - Ekstensi - Bahasa binding & kerangka backend - Perangkat lunak menggunakan Dear ImGui - Kutipan pengguna |
Dear ImGui adalah perpustakaan antarmuka pengguna grafis bebas mengasapi untuk C++ . Ini menghasilkan buffer vertex yang dioptimalkan yang dapat Anda render kapan saja di aplikasi yang mendukung pipeline 3D. Ini cepat, portabel, agnostik penyaji, dan mandiri (tidak ada ketergantungan eksternal).
ImGui yang terhormat dirancang untuk memungkinkan iterasi cepat dan memberdayakan pemrogram untuk membuat alat pembuatan konten dan alat visualisasi/debug (berbeda dengan UI untuk pengguna akhir rata-rata). Ini lebih menyukai kesederhanaan dan produktivitas untuk mencapai tujuan ini dan tidak memiliki fitur tertentu yang biasa ditemukan di perpustakaan tingkat tinggi. Antara lain, internasionalisasi penuh (teks kanan ke kiri, teks dua arah, pembentukan teks, dll.) dan fitur aksesibilitas tidak didukung.
ImGui yang terhormat sangat cocok untuk integrasi dalam mesin permainan (untuk perkakas), aplikasi 3D waktu nyata, aplikasi layar penuh, aplikasi tertanam, atau aplikasi apa pun pada platform konsol yang fitur sistem operasinya tidak standar.
Inti dari Dear ImGui mandiri dalam beberapa file platform-agnostik yang dapat Anda kompilasi dengan mudah di aplikasi/mesin Anda. Itu semua adalah file di folder root repositori (imgui*.cpp, imgui*.h). Tidak diperlukan proses pembangunan khusus . Anda dapat menambahkan file .cpp ke proyek Anda yang sudah ada.
Backend untuk berbagai API grafis dan platform rendering disediakan di folder backends/, bersama dengan contoh aplikasi di folder example/. Anda juga dapat membuat backend Anda sendiri. Di mana pun Anda dapat merender segitiga bertekstur, Anda dapat merender Dear ImGui.
Lihat bagian Memulai & Integrasi dokumen ini untuk detail selengkapnya.
Setelah Dear ImGui diatur di aplikasi Anda, Anda dapat menggunakannya dari _anywhere_ di loop program Anda:
ImGui::Text ( " Hello, world %d " , 123 );
if (ImGui::Button( " Save " ))
MySaveFunction ();
ImGui::InputText ( " string " , buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat ( " float " , &f, 0 . 0f , 1 . 0f );
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin ( " My First Tool " , &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
if ( ImGui::BeginMenu ( " File " ))
{
if ( ImGui::MenuItem ( " Open.. " , " Ctrl+O " )) { /* Do stuff */ }
if ( ImGui::MenuItem ( " Save " , " Ctrl+S " )) { /* Do stuff */ }
if ( ImGui::MenuItem ( " Close " , " Ctrl+W " )) { my_tool_active = false ; }
ImGui::EndMenu ();
}
ImGui::EndMenuBar ();
}
// Edit a color stored as 4 floats
ImGui::ColorEdit4 ( " Color " , my_color);
// Generate samples and plot them
float samples[ 100 ];
for ( int n = 0 ; n < 100 ; n++)
samples[n] = sinf(n * 0 . 2f + ImGui::GetTime() * 1 . 5f );
ImGui::PlotLines ( " Samples " , samples, 100 );
// Display contents in a scrolling region
ImGui::TextColored (ImVec4( 1 , 1 , 0 , 1 ), "Important Stuff");
ImGui::BeginChild ( " Scrolling " );
for ( int n = 0 ; n < 50 ; n++)
ImGui::Text ( " %04d: Some text " , n);
ImGui::EndChild ();
ImGui::End ();
ImGui yang terhormat memungkinkan Anda membuat alat yang rumit dan juga berumur pendek. Di sisi ekstrim dari umur yang pendek: dengan menggunakan fitur Edit&Lanjutkan (muat ulang kode panas) dari kompiler modern, Anda dapat menambahkan beberapa widget untuk mengubah variabel saat aplikasi Anda berjalan, dan menghapus kode tersebut semenit kemudian! Dear ImGui bukan hanya untuk mengubah nilai. Anda dapat menggunakannya untuk melacak algoritma yang sedang berjalan hanya dengan mengeluarkan perintah teks. Anda dapat menggunakannya bersama dengan data refleksi Anda sendiri untuk menelusuri kumpulan data Anda secara langsung. Anda dapat menggunakannya untuk mengekspos internal subsistem di mesin Anda, untuk membuat logger, alat inspeksi, profiler, debugger, seluruh editor/kerangka pembuatan game, dll.
Paradigma IMGUI melalui API-nya mencoba meminimalkan duplikasi negara yang berlebihan, sinkronisasi negara, dan retensi negara dari sudut pandang pengguna. Ini tidak terlalu rentan terhadap kesalahan (lebih sedikit kode dan lebih sedikit bug) dibandingkan antarmuka mode tetap tradisional, dan cocok untuk menciptakan antarmuka pengguna yang dinamis. Lihat bagian Tentang paradigma IMGUI di Wiki untuk lebih jelasnya.
Dear ImGui mengeluarkan buffer vertex dan daftar perintah yang dapat Anda render dengan mudah di aplikasi Anda. Jumlah panggilan undian dan perubahan status yang diperlukan untuk merendernya cukup kecil. Karena Dear ImGui tidak mengetahui atau menyentuh status grafik secara langsung, Anda dapat memanggil fungsinya di mana saja dalam kode Anda (misalnya di tengah algoritma yang sedang berjalan, atau di tengah proses rendering Anda sendiri). Lihat contoh aplikasi di folder contoh/ untuk petunjuk tentang cara mengintegrasikan Dear ImGui dengan basis kode Anda yang ada.
Kesalahpahaman yang umum adalah salah mengira GUI mode langsung sebagai rendering mode langsung, yang biasanya berarti memukul driver/GPU Anda dengan serangkaian panggilan draw yang tidak efisien dan perubahan status saat fungsi GUI dipanggil. Ini BUKAN yang dilakukan Dear ImGui. ImGui yang terhormat mengeluarkan buffer simpul dan daftar kecil kumpulan panggilan undian. Itu tidak pernah menyentuh GPU Anda secara langsung. Kumpulan panggilan undian cukup optimal dan Anda dapat merendernya nanti, di aplikasi Anda atau bahkan dari jarak jauh.
Lihat halaman Rilis untuk Changelog yang dihias. Membaca log perubahan adalah cara yang baik untuk tetap mendapatkan informasi terbaru tentang hal-hal yang ditawarkan ImGui, dan mungkin akan memberi Anda gambaran tentang beberapa fitur yang selama ini Anda abaikan!
Memanggil fungsi ImGui::ShowDemoWindow()
akan membuat jendela demo yang menampilkan berbagai fitur dan contoh. Kode selalu tersedia untuk referensi di imgui_demo.cpp
. Begini tampilan demonya.
Anda harus bisa membuat contoh dari sumber. Jika tidak, beri tahu kami! Jika Anda ingin melihat sekilas beberapa fitur Dear ImGui, Anda dapat mengunduh biner Windows dari aplikasi demo di sini:
Aplikasi demo tidak mengetahui DPI, jadi kemungkinan akan ada keburaman pada layar 4K. Untuk kesadaran DPI dalam aplikasi Anda, Anda dapat memuat/memuat ulang font Anda pada skala yang berbeda dan menskalakan gaya Anda dengan style.ScaleAllSizes()
(lihat FAQ).
Lihat panduan Memulai untuk detailnya.
Pada sebagian besar platform dan saat menggunakan C++, Anda seharusnya dapat menggunakan kombinasi backend imgui_impl_xxxx tanpa modifikasi (misalnya imgui_impl_win32.cpp
+ imgui_impl_dx11.cpp
). Jika mesin Anda mendukung banyak platform, pertimbangkan untuk menggunakan lebih banyak file imgui_impl_xxxx daripada menulis ulang: ini akan mengurangi pekerjaan Anda, dan Anda dapat segera menjalankan Dear ImGui. Anda nanti dapat memutuskan untuk menulis ulang backend khusus menggunakan fungsi mesin khusus jika Anda menginginkannya.
Mengintegrasikan Dear ImGui ke dalam mesin kustom Anda adalah masalah 1) memasang kabel input mouse/keyboard/gamepad 2) mengunggah tekstur ke GPU/mesin render Anda 3) menyediakan fungsi render yang dapat mengikat tekstur dan merender segitiga bertekstur, yang pada dasarnya adalah apa Backend berfungsi. Folder contoh/ diisi dengan aplikasi yang melakukan hal itu: menyiapkan jendela dan menggunakan backend. Jika Anda mengikuti panduan Memulai, secara teori Anda memerlukan waktu kurang dari satu jam untuk mengintegrasikan Dear ImGui. Pastikan untuk meluangkan waktu membaca FAQ, komentar, dan contoh aplikasi!
Backend/binding yang dikelola secara resmi (dalam repositori):
Halaman wiki backend/binding pihak ketiga:
Halaman wiki Ekstensi/Widget yang berguna:
Lihat juga Wiki untuk tautan dan ide lebih lanjut.
Contoh proyek yang menggunakan Dear ImGui: Tracy (profiler), ImHex (hex editor/analisis data), RemedyBG (debugger) dan ratusan lainnya.
Untuk lebih banyak tangkapan layar proyek yang dikirimkan pengguna menggunakan Dear ImGui, lihat Utas Galeri!
Untuk daftar widget dan ekstensi pihak ketiga, lihat halaman wiki Ekstensi/Widget yang Berguna.
Mesin kustom erhe (cabang docking) | Mesin khusus untuk Wonder Boy: The Dragon's Trap (2017) |
Mesin khusus (tanpa judul) | Tracy Profiler (github) |
Lihat: Pertanyaan yang Sering Diajukan (FAQ) yang berisi jawaban atas pertanyaan umum.
Lihat: Memulai dan Wiki untuk banyak tautan, referensi, artikel.
Lihat: Artikel tentang paradigma IMGUI untuk membaca/mempelajari paradigma GUI Mode Segera.
Lihat: Perubahan Mendatang.
Lihat: Mesin Tes ImGui yang Terhormat + Rangkaian Tes untuk Otomatisasi & Pengujian.
Untuk tujuan membuat mesin pencari merayapi wiki, berikut ini tautan ke Wiki yang Dapat Dirayapi (bukan untuk manusia, inilah alasannya).
Memulai? Untuk pengguna pertama kali yang mengalami masalah saat mengompilasi/menautkan/menjalankan atau masalah saat memuat font, silakan gunakan Diskusi GitHub. Untuk pertanyaan APAPUN lainnya, laporan bug, permintaan, umpan balik, silakan posting di Masalah GitHub. Harap membaca dan mengisi template Edisi Baru dengan cermat.
Dukungan pribadi tersedia untuk pelanggan bisnis yang membayar (Email: hubungi @ dearimgui dot com ).
Versi mana yang harus saya dapatkan?
Kami kadang-kadang memberi tag Rilis (dengan catatan rilis yang bagus) tetapi umumnya aman dan disarankan untuk disinkronkan ke master
terbaru atau cabang docking
. Pustaka ini cukup stabil dan regresi cenderung diperbaiki dengan cepat saat dilaporkan. Pengguna tingkat lanjut mungkin ingin menggunakan cabang docking
dengan fitur Multi-Viewport dan Docking. Cabang ini disinkronkan dengan master secara teratur.
Siapa yang menggunakan Dear ImGui?
Lihat Kutipan, Pendanaan & Sponsor, dan Perangkat Lunak menggunakan halaman Dear ImGui Wiki untuk mengetahui siapa yang menggunakan Dear ImGui. Silakan tambahkan game/perangkat lunak Anda jika Anda bisa! Lihat juga Galeri Thread!
Apa yang bisa saya bantu?
Pengembangan Dear ImGui yang sedang berlangsung telah dan telah didukung secara finansial oleh pengguna dan sponsor swasta.
Silakan lihat daftar rinci pendukung dan sponsor pendanaan Dear ImGui saat ini dan di masa lalu untuk rinciannya.
Dari November 2014 hingga Desember 2019, pengembangan yang sedang berlangsung juga didukung secara finansial oleh penggunanya di Patreon dan melalui sumbangan individu.
TERIMA KASIH kepada semua pendukung di masa lalu dan sekarang karena telah membantu menjaga proyek ini tetap hidup dan berkembang!
ImGui yang terhormat menggunakan perangkat lunak dan layanan yang disediakan gratis untuk proyek sumber terbuka:
Dikembangkan oleh Omar Cornut dan setiap kontributor langsung atau tidak langsung ke GitHub. Versi awal perpustakaan ini dikembangkan dengan dukungan Media Molecule dan pertama kali digunakan secara internal pada game Tearaway (PS Vita).
Kontributor berulang termasuk Rokas Kupstys @rokups (2020-2022): sebagian besar pekerjaan pada sistem otomasi dan pengujian regresi kini tersedia di Dear ImGui Test Engine.
Kontrak pemeliharaan/dukungan, faktur sponsor, dan transaksi B2B lainnya dihosting dan ditangani oleh Disco Hello.
Omar: "Saya pertama kali menemukan paradigma IMGUI di Q-Games ketika Atman Binstock telah menghentikan implementasi sederhananya di basis kode, yang saya habiskan cukup banyak waktu untuk memperbaikinya dan memikirkannya. Ternyata Atman mengenal konsep tersebut secara langsung dengan bekerja dengan Casey. Ketika saya pindah ke Media Molecule, saya menulis ulang perpustakaan baru untuk mencoba mengatasi kekurangan dan keterbatasan perpustakaan pertama yang saya kerjakan. Perpustakaan ini menjadi perpustakaan ini dan sejak itu saya menghabiskan banyak waktu untuk mengulangi dan meningkatkannya dia."
Sematkan font ProggyClean.ttf oleh Tristan Grimmer (lisensi MIT).
Sematkan stb_textedit.h, stb_truetype.h, stb_rect_pack.h oleh Sean Barrett (domain publik).
Inspirasi, masukan, dan pengujian untuk versi awal: Casey Muratori, Atman Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov, Matt Willis. Terima kasih juga kepada semua orang yang mengirimkan masukan, pertanyaan, dan perbaikan di GitHub.
ImGui yang terhormat dilisensikan di bawah Lisensi MIT, lihat LICENSE.txt untuk informasi lebih lanjut.