Tôi đang viết một trình đổ bóng phân đoạn cho WebGL (GLSL ES 1.0) bằng phiên bản mới nhất của Chrome (và Firefox) và tôi đã viết một thuật toán lặp lại. Vì vậy, trước hết, tôi phát hiện ra một cách khó khăn rằng chiều dài của vòng lặp là khá hạn chế (doc nói nó phải được đoán tại thời gian biên dịch, có nghĩa là nó phải là một hằng số hoặc rất gần).Ngăn vòng lặp trong trình đổ mảnh phân đoạn
Ngoài ra, tôi phải viết một (for
, vì nó là duy nhất mà phải được triển khai theo vòng lặp tiêu chuẩn) có khả năng dài nhưng phá vỡ hầu như mọi lúc trước khi kết thúc.
Bây giờ, tôi đã nhận thấy rằng nếu tôi đặt số tối đa cao hơn thì việc biên dịch và liên kết của trình đổ bóng sẽ mất nhiều thời gian hơn. Vì vậy, trừ khi tôi là sai, trình biên dịch hiện lặp đi lặp lại.
Tôi không chắc chắn liệu có thể làm được gì không, nhưng tôi đã thử một vài thứ và trình biên dịch có vẻ như cũng có chức năng nội tuyến, ngay cả khi được gọi trong vòng lặp.
Tôi không cảm thấy bình thường khi một người đổ bóng mất một phút để biên dịch chỉ khoảng một trăm lần lặp của một vòng lặp. Hay tôi đang làm điều sai trái? Có phải hàng trăm lần lặp trong một trình đổ bóng phân mảnh quá nhiều đối với một GPU? Bởi vì nó có vẻ chạy tốt sau khi nó đã được biên dịch.
WebGL thường chỉ đưa trình đổ bóng cho trình biên dịch trong thư viện OpenGL của bạn, vì vậy nó sẽ làm gì và mất bao lâu tùy thuộc vào thẻ video và trình điều khiển của bạn ... –