Tôi nên phân phối các shader trong một hình thức biên dịch hoặc trong văn bản đơn giản?


13

Có một ứng dụng sử dụng các shader đã được viết trong GLSL, chiến lược tốt nhất để phân phối trong thế giới thực và cho máy tính để bàn và thiết bị di động là gì?

Tôi đang nhắm đến việc phân phối cái này ở dạng nhị phân hoặc dưới dạng văn bản nối tiếp đơn giản, tôi muốn có một gợi ý tốt về điều này.

Câu trả lời:


15

Lý do chính để sử dụng trình tạo bóng nhị phân là nếu biên dịch trình tạo bóng văn bản quá lớn cho khối lượng công việc cho thiết bị mục tiêu của bạn. Các shader GLSL nhị phân không có định dạng chuẩn, do đó bạn cần các định dạng khác nhau cho mỗi GPU / trình điều khiển bạn dự định hỗ trợ. Tôi khuyên bạn nên phân phối các shader ở dạng nguồn và sau đó, lần đầu tiên chạy bộ đệm chúng thành dạng nhị phân và sau đó tải từ đó. Sau đó, một lần nữa tôi sẽ kiểm tra đầu tiên nếu bạn thực sự có một nút cổ chai hiệu năng ở đó để biện minh cho việc sử dụng các nhị phân.

Một điều cần xem xét cũng là một trình tối ưu hóa trình tạo văn bản ngoại tuyến có thể có hiệu quả tuyệt vời với trình biên dịch trình tạo bóng di động tào lao.


Tôi thực sự ngạc nhiên nếu bạn có thể tìm thấy bất kỳ thiết bị nào trong đó quá trình biên dịch shader là một nút cổ chai. Số lượng mã, ngay cả trong các shader lớn, là một lượng mã không đáng kể về mặt biên dịch.
edA-qa mort-ora-y

1
Các công cụ lớn ngoài đó thường biên dịch các shader ngoại tuyến và / hoặc lưu trữ chúng trong lần chạy đầu tiên, như Tapio gợi ý. Có thể có một lượng mã không đáng kể trên mỗi shader, nhưng bạn có thể có rất nhiều mã .
Laurent Couvidou

vì vậy tôi phải mua một videocard ATI ngẫu nhiên và một cái ngẫu nhiên khác từ Nvidia, biên dịch các shader của tôi và chỉ phân phối phiên bản đã biên dịch? Làm thế nào tôi có thể kiểm tra trong thời gian chạy thương hiệu của thẻ video được nhắm mục tiêu là gì? Có điều gì đáng tin cậy cho điều đó?
dùng827992

1
@ user827992 Định dạng nhị phân có thể khác nhau đối với các thế hệ GPU / trình điều khiển khác nhau ngay cả khi nhà cung cấp giống nhau. Và đừng quên cũng có rất nhiều GPU Intel ngoài kia, chứ đừng nói đến tất cả các GPU di động, như Qualcomm và PowerVR. Vì vậy, một lần nữa: Tôi khuyên bạn không nên phân phối các shader đã biên dịch, mà nên lưu chúng vào lần chạy đầu tiên trên thiết bị của người dùng. Về phát hiện GPU, bạn có thể thử phân tích chuỗi GL_VENDOR, GL_VERSION và GL_RENDERER tạo thành chuỗi glGetString (), nhưng định dạng của chúng thay đổi tùy theo nhà cung cấp.
Tapio
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.