Pređi na sadržaj
Meni
← Nazad na blog

Ispravka Nova UI 8K greške u WebGL-u

Frustrated developer comparing broken glyph rows in the browser console and Unity Editor.

Ukratko

  • Simptom: tekst duži od oko 260 znakova prikazivao je neispravne glifove, ali samo na WebGL-u.
  • Uzrok: Nova rezervni renderer pakovao je vrhove u jednodimenzionalnu RGBA teksturu širu od WebGL ograničenja od 8192 piksela.
  • Rešenje: podelili smo bafer u redove od 8192 piksela i uskladili širinu redova u shaderu.

Greška: dugi tekst se kvari

Testiranje je pokazalo da dijalozi duži od približno 260 chars ≈ 1 024 glyphs na WebGL-u gube ili zamenjuju znakove otprilike svakih 20 glifova. Editor je izgledao ispravno dok nismo prisilno uključili SystemSettings.UseFallbackRendering = true. Tada se greška pojavila i u njemu.

// WebGL console
Texture has out of range width (got 12800 max supported 8192)

Uzrok: preveliki i neusklađeni rezervni baferi

Nova prelazi na rezervno renderiranje preko teksturnog bafera kada SSBO nije dostupan, kao na WebGL-u. Jedan vrh glifa zauzima 64 bajta, odnosno četiri float4 piksela. <TextBlock> s 3224 vrha pretvorio se u teksturu 12896 px × 1, znatno iznad WebGL ograničenja.

Nakon ograničavanja širine na 8192 piksela pojavio se drugi problem: shader je i dalje očekivao redove širine 16384 piksela, pa su izmene pisale u jedan red, a GPU čitao iz drugog.

Rešenje u dve izmene koda

1. Podelite teksturu bafera

int maxEdge = 8192;
int width   = Mathf.Min(numPixels, maxEdge);
int height  = Mathf.CeilToInt((float)numPixels / width);
texture = new Texture2D(width, height, TextureFormat.RGBAFloat, false, true);

2. Uskladite konstantu shadera

#if defined(NOVA_FALLBACK_RENDERING)
  #if defined(UNITY_WEBGL) || defined(UNITY_EDITOR)
    #define MAX_TEXTURE_DIMENSION 8192u
  #else
    #define MAX_TEXTURE_DIMENSION 16384u
  #endif
#endif

Izmenili smo i SetData() da poštuje shaderBufferStartIndex * 4 za RGBA putanje, kako izmene tokom izvršavanja više ne bi prepisivale ranije glifove.

Rezultati

  • WebGL izdanje: bez artefakata i rušenja.
  • Samostalna desktop izdanja zadržavaju SSBO putanju od 16384 piksela.
  • Editor i dalje pokazuje neobično ponašanje, ali ta ispravka trenutno nije prioritet.

Šta sledi

Izmena je na grani develop; očekujte je u sledećoj alfi. Ako ste naišli na slične Nova UI probleme, javite nam na Discordu, Facebooku ili u komentarima.

Leave a Comment

Scroll to Top