Nageln Sie den Nova 8 K Text Bug in unserem WebGL Build
TL;DR
- Symptom: Text länger als ~ 260-Zeichen gerendert Müll alle paar Glyphen—aber nur auf WebGL.
- Wurzelursache: Der Fallback-Renderer von Nova hat Eckpunkte in eine 1 D RGBA-Textur gepackt, die breiter ist als die 8 192-Pixelgrenze von WebGL.
- Fix: Kachelte den Puffer in 8 192-Pixelzeilen und ließ den Shader die gleiche Zeilenbreite verwenden.
Der Bug: Long Text Goes Glitch-City
QA bemerkte, dass jeder Dialog über 260 chars ≈ 1 024 glyphs Schredderte sich auf WebGL – Charaktere würden verschwinden oder tauschen alle ~ 20 Glyphen. Der Editor sah gut aus … bis wir
SystemSettings.UseFallbackRendering = true und die Korruption zeigte sich auch dort.
// WebGL console
Texture has out of range width (got 12800 max supported 8192)
Wurzelursache: Übergroße und falsch ausgerichtete Fallback-Puffer
Nova wechselt zu einem Texturpuffer-Fallback wenn SSBOs nicht verfügbar sind (WebGL). Ein Glyphenvertex = 64 Bytes = 4 float4 Pixel. bescheiden
<TextBlock> mit 3224 Vertices wurden zu einem
12896 px × 1 Textur – weit über dem Limit von WebGL. Nachdem wir die Breite auf 8192 px eingespannt hatten, tauchte ein weiteres Artefakt auf: Der Shader glaubte immer noch, dass die Zeilen 16 384 px breit waren, so dass Edits in eine Zeile geschrieben und die GPU von einer anderen gelesen wurden.
Der Fix in zwei Commits
1 – Kacheln Sie die Puffertextur
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 – Sync the Shader Constant
#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
We also patched SetData() zu Ehren
shaderBufferStartIndex * 4 für RGBA-Pfade, so dass Runtime-Editierungen keine früheren Glyphen mehr stampfen.
Ergebnisse
✅ WebGL Build: null Artefakte, null Abstürze. ✅ Stand-alone Desktop Builds halten den 16 384-px SSBO Pfad. Der Redakteur zeigt das seltsame Verhalten immer noch. Aber derzeit keine priorität für einen fix.
