วาดตัวหนังสือบน SDL2 ด้วย FreeType (ตอนที่ 3)

ครั้งที่แล้วมีพูดถึงไปว่า  ถ้าเกิดเราวาดตัวหนังสือขึ้นมาซะทุกเฟรม แม้กระทั่งเครื่องผมที่ค่อนข้างเร็ว (Phenom X4 925 Ram 16GB GPU Radeon HD5770) ยังทำเฟรมเรทได้แค่ราว ๆ 30 เท่านั้น เนื่องด้วยว่าการวาดตัวอักษรนั้นจำเป็นต้องมีการเข้าถึงไฟล์ฟอนท์อยู่บ่อย ๆ (นั่นคือทุกครั้งที่มีการโหลด glyph ใหม่) ทำให้เกิดการติดคอขวดที่ Disk I/O ได้ โดยเฉพาะถ้ามันดันไปอยู่บนสื่อบันทึกความเร็วต่ำ

วิธีหลีกเลี่ยงปัญหานี้ก็ง่ายมาก นั่นคือ การวาดเก็บเอาไว้ เนื่องจากว่าส่วนของตัวหนังสือเนี่ยหลาย ๆ ครั้งเลยที่เราแสดงผลข้อความเดิมเป็นเวลานาน เช่น ราว ๆ 2-3วินาที ดังนั้นเป็นไปได้ว่าเราจะวาดตัวหนังสือแล้วเก็บเอาไว้บน buffer อะไรสักอย่าง จากนั้นเวลาวาดจริงๆ ก็แค่เอา buffer นี่ล่ะวาดขึ้นบนจอไป ไม่ต้องมา Load Glyph ใหม่ ไม่ต้องมาคำนวนใหม่ เสียเวลา

บน SDL2 นั้นจะมีฟีเจอร์หนึ่งก็คือ Render Target ซึ่งก็คือการทำ Render to Texture นั้นเอง เราสามารถสร้าง Texture ใหม่ขึ้นมาหนึ่งอัน แล้วเรียกฟังก์ชั่น SDL_SetRenderTarget เพื่อที่จะวาดลงบน Texture นั้น เมื่อวาดเสร็จเราก็แค่เอา Texture อันนี้วาดขึ้นจอ จบ …

เมื่อทำได้ดังนี้แล้ว เฟรมเรทพุ่งจาก 30 กว่า ๆ กลายเป็น … เร็วจนวัดไม่ได้กันเลยทีเดียว

เราสามารถที่จะใช้วิธีนี้เพื่อสร้าง Texture ที่เก็บภาพตัวอักษรนี้ แล้ว translateไปมาบนหน้าจอ หรือเอาไปสร้างเป็น balloon ที่ผูกอยู่กับ object 3D ได้อีกด้วย เป็นเทคนิคง่าย ๆ แต่ได้ผลดีทีเดียว

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *

This site uses Akismet to reduce spam. Learn how your comment data is processed.