2012-06-22 19 views
28

Tôi có một số tham số được chuyển từ CPU sang GPU không đổi cho tất cả các đoạn nhưng thay đổi trên mỗi khung (tôi đang sử dụng GLSL ES 1.1). Tôi có nên sử dụng đồng phục hoặc thuộc tính cho các giá trị đó không? Thuộc tính có thể thay đổi từ đỉnh đến đỉnh nên trực giác của tôi là sử dụng các thuộc tính cho các giá trị không đổi trên toàn bộ khung sẽ không hiệu quả. Tuy nhiên, tôi đã đọc rằng đồng phục là cho các giá trị thay đổi "tương đối không thường xuyên", cho thấy rằng việc thay đổi đồng phục trên mọi khung hình có thể không hiệu quả.Thống nhất so với các thuộc tính trong GLSL ES

Về mặt phần cứng, tôi quan tâm nhất đến việc tối ưu hóa cho iPhone 4S.

+0

Bạn có thể liệt kê một số bài đọc của mình không? – Luca

+1

"OpenGL Shading Language" của Rost và Licea-Kane và "OpenGL ES 2.0" của Munchi, Ginsburg và Shreiner. (Rõ ràng là trước đây không dành riêng cho ES) –

Trả lời

32

Tôi bỏ phiếu cho đồng phục.

Một trong những lý do đã được giải thích trong câu hỏi của bạn: đồng phục là hằng số cho mỗi đỉnh/đoạn.

lý do khác để thích đồng phục chống lại các thuộc tính sẽ là:

  • số lượng khe cắm có sẵn (bạn được phép 16 thuộc tính, nhưng nhiều đồng phục hơn)
  • trình biên dịch GLSL thể tối ưu hóa xử lý giá trị thống nhất
  • ít dữ liệu truyền trực tuyến trên các mảng đỉnh dài, ít thuộc tính trên mỗi đỉnh có nghĩa là hiệu suất tốt hơn.
  • đồng phục có sẵn trong trình đổ bóng phân đoạn, mà không xác định các thuộc tính khác nhau giữa các vertex và phân đoạn đổ vỡ
  • đồng phục có thể là cấu trúc và mảng, dẫn đến mã dễ đọc hơn.