Optimize LUA Kodluyoruz #1

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı foreigner26

  • Yeni Üye
  • *
    • İleti: 34
: 19 Mayıs 2019, 11:21:26
Optimize LUA Kodluyoruz #1

Merhaba arkadaşlar, önceden de tanışmıştık ben Enes! LUA üzerindeki ana dalım "Client" bu yüzden ilk önce Client'de nasıl şık ve az CPU sömüren tasarımlar yapabiliriz buna değineceğim biraz daha.

Elbette "GUI" dediğinizi duyar gibiyim, ancak şahsen GUI kullanmıyorum, birçok kişi "DirectX" üzerindeki tasarımları şık bulduklarını söylüyorlar ancak şöyle bir gerçek var ki MTA'nın DirectX sürümü GTA:SA ile aynı yani 9.0c bu durumda maalesef DirectX ile tasarımlar yapmak birnevi bir kumar gibi.

öncelikle size basit eventlardan bahsediceğim bunlar sırası ile;

  • onClientRender
  • Conditions (if else, while, for)
  • Element Tree Options (MTA'nın event ağacı seçenekleri)


onClientRender için söyleyebiliceğim birçok şey var aslında, yaklaşık 2017 - 2018 yılları arasında bir DirectX framework yazmıştık bunu yaparken birçok kişiden yardım aldık elbette, bu kişiler hatrı sayılır kişilerdi (Jusonex, sbx320 ve Grozz) onClientRender'in mantığına indiğimizde ekranınızda oluşan her anlık birim için çalışıtırılan fonksiyon olarak geçiyor, bu da demek oluyor ki içine "if" "for" gibi Conditions koyduğumuz zaman CPU kullanımı %25 - %30 değerinde artıcak; (%3 > %5 - %7) bunun yanı sıra eğer onClientRender içerisinde bir tablodan veri çekiyorsanız bu miktar %30 miktarında sabitlenicektir;
her çizdiğimiz dxRectangle ve dxImage gibi bileşenler %1.25 - %0.5 arası CPU kullanır ve eğer Client taraflı CPU kullanımımız %40 civarında olursa oyuncularımız malesef 25 - 35 fps arasına kitlenmek zorunda kalırlar (dipnot: anlık değil, sürekli olarak %40) ve aynı zamanda çoklu onClientRender eventları malesef daha fazla CPU kullanmakta, bir onClientRender eventinde sadece çiziceğimiz şeyleri yapmalıyız, bu durumda eğer bir resim çizdiriyorsak dxTexture kullanabiliriz; bu bize yaklaşık %70'e yakın performans artışı sağlayacaktır, örnek kod altta mevcuttur..


Kod

--@texture Meta.xml içerisinde <oop>true</oop> olduğundan emin olun.
local image = DxTexture("Components/..resim.png","argb", false, "clamp")

addEventHandler('onClientRender',root,function()

      dxDrawImage(0,0,(resimboyutuw),(resimboyutuh),image..)

end,true,'low-10')

bunun yanında örnek kod üzerinde gördüğünüz gibi fonksiyonumuzun sonuna "true,'low-10'" gibi birtakım ayarlar ekledik, bunlar MTA'nın kendi ayarladığı kısmı devredışı bırakıp, kendimizin tanımlayacağını belirttiğimiz true değeri ve fonksiyonun önceliği, 'low-10' bunların seviyeleri mevcut.


Kod
"high-10"  "low-10"
"high-9"   "low-9"
"high-8"   "low-8"
"high-7"   "low-7"
"high-6"   "low-6"
"high-5"   "low-5"
"high-4"   "low-4"
"high-3"   "low-3"
"high-2"   "low-2"
"high-1"   "low-1"

aslında birnevi öncelik sırası diyebiliriz; bu olayı "low-10" olarak belirlemek bize herhangi bir performans kaybı yaşatmazken (çizim kalitesi olarak), kullanıcı taraflı %10 - %15 arası bilgisayardan bilgisayara değişebilicek şekilde performans artışını yakalamış oluyoruz.




S.S.S (Sıkca Sorulan Sorular)

peki DirectX'i bu kadar ezdik, bu kadar dikkatli olunması gerekiyorsa onun yerine ne kullanabiliriz; tabii ki CEF bunun içinde yakın bir zamanda
yeni bir konu paylaşıcağım.


peki ya OOP?
OOP kısaca Obje Tabanlı Kodlama dediğimiz fonksiyonları bir tablo içine gömüp, CPU kullanımını azaltıp, RAM kullanımını arttırdığımız bir methoddur, kodlarken bize daha fazla erişebilirlik kazandırsa bile yanlış eventlarla birlikte sunucu tarafını çökertmemize yol açabilir.
« Son Düzenleme: 30 Mayıs 2019, 07:16:00 Gönderen: Narkoz »
"It doesnt even matter"
 


MTASATURK

Optimize LUA Kodluyoruz #1
« : 19 Mayıs 2019, 11:21:26 »