ครั้งที่แล้วมีพูดถึงไปว่า ถ้าเกิดเราวาดตัวหนังสือขึ้นมาซะทุกเฟรม แม้กระทั่งเครื่องผมที่ค่อนข้างเร็ว (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 ได้อีกด้วย เป็นเทคนิคง่าย ๆ แต่ได้ผลดีทีเดียว
โปรแกรมเมอร์ C++ และผู้นิยมดนตรี