-
Kết xuất văn bản không cần texture
- Theo cách truyền thống, để kết xuất văn bản, cần kết xuất toàn bộ glyph của font vào atlas, bind atlas đó làm texture, rồi vẽ các tam giác lên màn hình để kết xuất từng glyph một.
- Bài viết giới thiệu một cách đơn giản để xuất nhanh các thông điệp debug.
- Giải thích một kỹ thuật có thể vẽ toàn bộ văn bản chỉ với một draw call duy nhất.
-
Font: pixel không cần texture
- Để loại bỏ texture atlas của font, cần lưu trữ một thứ tương tự font atlas ngay bên trong fragment shader.
- Có thể dùng hằng số nguyên để lưu bitmap, và nhờ đó kết xuất được glyph.
- Có thể dùng số nguyên 8 bit làm bitmap để vẽ lên màn hình trong fragment shader của GLSL.
-
Một draw call duy nhất
- Có thể dùng instanced draw call để tránh các lệnh vẽ lặp lại.
- Dữ liệu cho mỗi instance bao gồm offset vị trí và văn bản cần xuất.
- Chia thông điệp thành các nhóm 4 ký tự, chuyển thành
uint32_t, rồi lưu vào cấu trúc word_data.
-
Vertex shader
- Vertex shader tạo ra ba đầu ra.
- Đặt các đỉnh của tam giác lên màn hình thông qua
gl_Position.
- Truyền từ cần xuất sang fragment shader.
- Tạo tọa độ texture để tính toán tọa độ
uv.
-
Fragment shader
- Fragment shader cần ba loại thông tin để kết xuất văn bản.
- Kết xuất glyph bằng cách ánh xạ tọa độ
uv vào đúng bit trong bitmap của glyph.
- Nếu bit được bật thì kết xuất bằng màu tiền cảnh, nếu không thì kết xuất bằng màu nền.
-
Triển khai đầy đủ và mã nguồn
- Phần triển khai kỹ thuật này có thể tìm thấy trong mã nguồn của mô-đun
le_print_debug_print_text.
- Mô-đun này giúp dễ dàng xuất các thông điệp debug lên màn hình.
1 bình luận
Ý kiến Hacker News
snprintfđể xuất trực tiếp vào GPU buffer