Learn · concepts

ImGui Nedir? Dear ImGui Açıklandı

ImGui (Dear ImGui), C++ için anında modlu bir grafik kullanıcı arayüzü kütüphanesidir. Her karede menüleri çizerek, saklanan bir widget ağacı olmadan çalışır; oyun araçlarında ve yerel istemcilerde yaygın olarak kullanılır.

TRtrolPublished 4 min read

ImGui Nedir?

ImGui, Dear ImGui'nin kısaltmasıdır, C++ için küçük, anında modlu bir GUI kütüphanesidir. Widget nesnelerinin bir ağacını korumak yerine, her karede düz fonksiyon çağrıları aracılığıyla yeni bir menü çizer. Bu, kurulumunu hızlı ve mevcut bir oyunun render döngüsünün üzerine kolayca yerleştirmeyi sağlar; bu nedenle araçlar ve yerel istemciler düşük gecikmeli üst üste bindirmeler için onu kullanır.

Temel fikir "anında modluluktur": bir Düğme nesnesi oluşturmak ve saklamak yerine, "burada bir düğme çiz" diyen bir fonksiyonu çağırırsınız ve bu çağrı hem düğmeyi çizer hem de bu karede tıklanıp tıklanmadığını size bildirir.

Anında Modluluk Ne Anlama Gelir

ImGui arayüzü her karede yeniden oluşturur. Bir düğme nesnesi oluşturup saklamazsınız. "burada bir düğme çiz" diyen bir fonksiyonu çağırırsınız ve bu çağrı hem düğmeyi çizer hem de bu karede tıklanıp tıklanmadığını size bildirir.

Saklanan modlu bir araç seti tam tersi şekilde çalışır. Bellekte uzun ömürlü bir widget ağacı tutar ve durum değiştiğinde bu ağacı güncellersiniz. Anında modluluk, bu kalıcı yapıyı, kendi durumunuzun yanında yaşayan ve yukarıdan aşağıya okunan kodla takas eder.

  1. Uygulama çerçeve döngüsünü çalıştırır

    Oyun bir kare oluşturur ve bunu bir parçası olarak UI kodunu çağırır.

  2. UI kodu çalışıyor

    Menüyü tepeden alta oluşturmak için ImGui fonksiyonlarını çağırırsınız: butonlar, kaydırıcılar, onay kutuları.

  3. ImGui çizim yapar ve tepki verir

    Fonksiyonlar hem widget'ları oluşturur hem de bu çerçeveyle etkileşimde bulunulup bulunmadığını döndürür.

  4. Kodunuz tepki veriyor

    Dönüş değerlerini okuyup kendi durumunu güncelliyorsun, tıpkı bu karede butonun tıklanmasıyla do_thing() fonksiyonunu çağırmak gibi.

Neden araçlar ve müşteriler onu tercih ediyor

ImGui, 3 boyutlu bir sahnenin üzerine yerleştirilen menüler için popülerdir. Bunun nedenleri pratik:

  • Düşük gecikme süresi: programın zaten oluşturduğu bir çerçeveye bağlanır, böylece menü anında tepki verir.
  • Az ekleme: bir pencere ve birkaç kontrol, yalnızca birkaç fonksiyon çağrısıdır. Herhangi bir düzen dosyası veya yönetilmesi gereken ayrı bir kullanıcı arayüzü iş parçacığı yoktur.
  • Bağımsız: kütüphane az bağımlılığa sahiptir ve yaygın grafik arka uçlarına uyum sağlar, bu nedenle ağır bir çerçeve çekmez.
  • Hata ayıklamaya uygun: bir yayın menüsünü oluşturan aynı çağrılar, geliştiricilerin bir özellik oluştururken kullandıkları geçici hata ayıklama panellerini de oluşturur

Anlık mod ve kalıcı mod

YönAnında Mod (ImGui)Saklı Mod Araç Kiti
Durum sahipliğiKodunuz veriyi tutarAraç kiti bir widget ağacı tutar
Kare başına iş yüküHer karede kullanıcı arayüzünü yeniden oluşturunDeğişiklikte ağacı güncelleyin
Kurulum maliyetiBirkaç fonksiyon çağrısıÖnceden daha fazla yapı
En uygunÜst üste binenler, araçlar, oyun menüleriBüyük, belge tarzı uygulamalar

Anında mod, her kare güncellenmesi ve girişe anında yanıt vermesi gereken şeyler için idealdir. Saklı mod, çoğunlukla statik duran ve nadiren değişen şeyler için daha iyidir

Yerli bir müşteriye nasıl uyum sağladığı

Yerel bir yardımcı uygulama istemcisi genellikle C++ ile oluşturulur ve oyunun çerçevesi üzerinde ImGui ile menüsünü çizer. Menü kodu, render döngüsü içinde çalışır, istemcinin kendi ayarlarını okur ve değişiklikleri doğrudan geri yazar. Ayrı bir kullanıcı arayüzü süreci yoktur, bu nedenle bir özelliği etkinleştirmek, istemcinin zaten sahip olduğu bir değere karşı tek bir fonksiyon çağrısıdır.

Bu, bir C++ kalıbıdır. Java ile yazılmış bir Fabric modunun arayüzüne ulaşmak için oyunun kendi GUI bağlantı noktalarını kullanması nedeniyle, ImGui çoğunlukla yerel kod olarak gönderilen istemcilerde ortaya çıkar, Java modları olarak değil.

Sıkça Sorulan Sorular