-
टेक्सचर-रहित टेक्स्ट रेंडरिंग
- पारंपरिक रूप से टेक्स्ट रेंडर करने के लिए फ़ॉन्ट के सभी glyphs को atlas में रेंडर करना, उसे texture के रूप में bind करना, और फिर स्क्रीन पर triangles ड्रॉ करके glyphs को एक-एक करके रेंडर करना पड़ता है.
- debug messages को तेज़ी से आउटपुट करने के लिए एक सरल तरीका प्रस्तुत किया गया है.
- ऐसी तकनीक समझाई गई है जिससे पूरे टेक्स्ट को एक ही draw call में ड्रॉ किया जा सकता है.
-
फ़ॉन्ट: टेक्सचर-रहित पिक्सेल
- font atlas texture को हटाने के लिए fragment shader के भीतर font atlas जैसा कुछ स्टोर करना पड़ता है.
- integer constants का उपयोग करके bitmap स्टोर किया जा सकता है, और इसके जरिए glyphs रेंडर किए जा सकते हैं.
- 8-bit integers को bitmap की तरह इस्तेमाल करके GLSL fragment shader में स्क्रीन पर ड्रॉ किया जा सकता है.
-
एकल draw call
- दोहराए जाने वाले draw commands से बचने के लिए instanced draw call का उपयोग किया जा सकता है.
- प्रत्येक instance के लिए position offset और प्रदर्शित किया जाने वाला टेक्स्ट शामिल करने वाला डेटा इस्तेमाल होता है.
- message को 4 वर्णों में बाँटकर uint32_t में बदला जाता है और
word_data structure में स्टोर किया जाता है.
-
vertex shader
- vertex shader तीन outputs बनाता है.
gl_Position में triangle के vertices को स्क्रीन पर रखा जाता है.
- प्रदर्शित किया जाने वाला word fragment shader को पास किया जाता है.
- texture coordinates बनाकर
uv coordinates की गणना की जाती है.
-
fragment shader
- fragment shader को टेक्स्ट रेंडर करने के लिए तीन जानकारियों की ज़रूरत होती है.
uv coordinates को glyph bitmap के सही bit से मैप करके glyph रेंडर किया जाता है.
- अगर bit set है तो foreground color से, और set नहीं है तो background color से रेंडर किया जाता है.
-
पूर्ण implementation और source code
- इस तकनीक का implementation
le_print_debug_print_text module के source code में देखा जा सकता है.
- यह module स्क्रीन पर debug messages को आसानी से आउटपुट करने में मदद करता है.
1 टिप्पणियां
Hacker News टिप्पणियाँ
snprintfका उपयोग करके सीधे GPU buffer में output किया गया