-
การเรนเดอร์ข้อความโดยไม่ใช้เท็กซ์เจอร์
- โดยทั่วไป หากต้องการเรนเดอร์ข้อความ จะต้องเรนเดอร์ glyph ทั้งหมดของฟอนต์ลงใน atlas ก่อน จากนั้น bind เป็นเท็กซ์เจอร์ แล้วค่อยวาดสามเหลี่ยมบนหน้าจอเพื่อเรนเดอร์ glyph ทีละตัว
- แนะนำวิธีแบบง่ายสำหรับแสดงข้อความดีบักอย่างรวดเร็ว
- อธิบายเทคนิคที่สามารถวาดข้อความทั้งหมดได้ด้วย draw call เพียงครั้งเดียว
-
ฟอนต์: พิกเซลที่ไม่ใช้เท็กซ์เจอร์
- เพื่อตัดการใช้ฟอนต์ atlas texture ออกไป จำเป็นต้องเก็บสิ่งที่คล้ายกับ font atlas ไว้ภายใน fragment shader
- สามารถใช้ค่าคงที่จำนวนเต็มเพื่อเก็บบิตแมป และใช้สิ่งนี้ในการเรนเดอร์ glyph ได้
- สามารถใช้จำนวนเต็ม 8 บิตเป็นบิตแมปเพื่อวาดลงบนหน้าจอใน GLSL fragment shader ได้
-
draw call เดียว
- สามารถใช้ instance draw call เพื่อหลีกเลี่ยงคำสั่งวาดที่ซ้ำๆ ได้
- ใช้ข้อมูลที่ประกอบด้วย position offset และข้อความที่จะส่งออกสำหรับแต่ละอินสแตนซ์
- แบ่งข้อความออกเป็น 4 ตัวอักษรแล้วแปลงเป็น
uint32_t เพื่อเก็บไว้ในโครงสร้าง word_data
-
Vertex Shader
- Vertex shader สร้างเอาต์พุต 3 อย่าง
- วางจุดยอดของสามเหลี่ยมลงบนหน้าจอผ่าน
gl_Position
- ส่งคำที่จะเรนเดอร์ต่อไปยัง fragment shader
- สร้าง texture coordinate เพื่อคำนวณพิกัด
uv
-
Fragment Shader
- Fragment shader ต้องการข้อมูล 3 อย่างเพื่อเรนเดอร์ข้อความ
- เรนเดอร์ glyph โดยแมปพิกัด
uv ไปยังบิตที่ถูกต้องของ glyph bitmap
- หากบิตถูกตั้งค่าไว้ให้เรนเดอร์ด้วยสี foreground และหากไม่ได้ตั้งค่าให้เรนเดอร์ด้วยสี background
-
การติดตั้งใช้งานทั้งหมดและซอร์สโค้ด
- สามารถดูการติดตั้งใช้งานของเทคนิคนี้ได้จากซอร์สโค้ดของโมดูล
le_print_debug_print_text
- โมดูลนี้ช่วยให้สามารถแสดงข้อความดีบักบนหน้าจอได้อย่างง่ายดาย
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
snprintfส่งออกตรงไปยัง GPU buffer