oyun custom bir formatta efekt sistemi kullandığı için bildiğim kadarıyla direkt olarak alıp başka bir lib ile değiştirmek mümkün değil malesef, belki shader adamın bir önerisi olabilir
@Kaiser
En son nicki değiştirecem ShaderMan diye
Konuya gelince;
Ben text render yapısını farklı bir kütüphaneye tamamen taşıdım ancak şu an performans yönünden henüz optimizasyona dokunmadım. Oyun içinde hala çok ince noktalarda ufak tefek tutarsızlıklar mevcut, onları uyarladıktan sonra optimizasyona gireceğim.
Text rendererı değiştirmiş olmamın eski yapıya göre evet bir tık etkisi oldu ama hala optimize istiyor. Bu gibi güncel kütüphanelere geçişin bir diğer artısı ise, src içindeki diğer eski yapıların birini veya birkaçını artık boşa düşürüyor olması. Yani her halükarda bir miktar da olsa iş yükünü azaltıyor.
Performans konusunda ise, shaderın bu noktada en büyük görevi, çizim görevini CPU'dan devralıp üstlenmesi. Ama yine de çizim çağrılarını kontrol edemez. Çizim çağrısı gibi kontrolsüz faktörler söz konusu olduğunda shader ile de çizilse performans olumsuz etkileniyor.
Metin2'nin font render yapısı üzerinden konuşacak olursak,
Ufak bir random örnek ile;
Ekranda chat yazıları-karakter isimleri vb. dahil olmak üzere
her biri 5 karakter olan toplam 300 tane text var diyelim.
Outline kapalı: Her metnin her karakteri 1 defa çizilir. 300x5x1 den 1.500 çizim çağrısı yapılır.
Outline açık: Her metnin her karakteri yaklaşık 5 defa(fazla da olabilir) çizilir. Bu da 300x5x5 den 7.500 çizim çağrısı demek.
Outline gibi ufacık bir özelliğin bile bu senaryoda yarattığı fark: fazladan 6.000 çizim çağrısı..
Şimdi bu ufak örnek tabloyu zihninizde daha da büyütüp ortaya çıkan devasa sayıları tahmin edebilirsiniz.
Efektler,materyaller,şunlar bunlar bir kenara dursun, sadece text renderı bile binlerce kez CPU'yu (shader varsa GPU'yu) yoruyor.
Bir de üstüne diğer renderlar var...
Efektlerde de benzer durum söz konusu, onların da bu denli kötü çalışmasının sebebi text renderda olduğu gibi c++ tarafının tam bir performans düşmanı olması.
Özetle, textler ve efektler başta olmak üzere neredeyse metin2'nin geneli immediate render yapısına sahip. (Anında çizim)
Bu renderları batch render'a(toplu çizim) dönüştürmek ve bir buffer ile çizimleri tek seferde göndermek bu konudaki en büyük ilaç olacaktır.
Her ihtimale karşı fixed pipelıne yapıda ekstra dikkat ve titizlik gerektirebilir.