2012-03-13 27 views
6

Tốc độ glUseProgram() nhanh như thế nào? Có điều gì tốt hơn (nhanh hơn) ?:Hành vi của đồng phục sau glUseProgram() và tốc độ

Dưới đây là suy nghĩ của tôi:

  1. Sử dụng 1 chương trình shader phổ quát, nhưng với nhiều thiết lập đầu vào và các thuộc tính (cài đặt cho mỗi lớp đồ họa)
  2. Sử dụng hơn 1 trình đổ bóng cho mỗi lớp đồ họa

Trạng thái đồng phục sau khi thay đổi chương trình đổ bóng là gì? Chúng có lưu giá trị (ví dụ, giá trị ma trận) không?

Dưới đây là những gì tôi xem xét những lợi ích của # 1 là:

  • Không sử dụng glUseProgram()

Và những lợi ích của # 2:

  • Không thay đổi ma trận (ví dụ: nếu lớp Menu và lớp Scene3D có ma trận Chiếu khác nhau)

Trả lời

6

Điều gì trong hai tùy chọn tốt hơn phần lớn phụ thuộc vào những gì những người đổ bóng làm, chúng khác nhau như thế nào và bao nhiêu thuộc tính/đồng phục bạn đặt và tần suất chúng được thay đổi. Không có một câu trả lời đúng cho tất cả các trường hợp.

Điều đó nói rằng: Hãy nhớ, không chỉ chi phí cho các thay đổi trạng thái, mà còn là chi phí thời gian chạy bóng và được trả cho mỗi đỉnh và mỗi đoạn. Vì vậy, việc giữ độ phức tạp của trình đổ bóng thấp luôn là một ý tưởng hay và một trình đổ bóng phổ quát phức tạp hơn so với các trình đổ bóng chuyên dụng.

Giảm thiểu thay đổi trạng thái. Nếu bạn có các đối tượng A, C, E bằng cách sử dụng Chương trình X và B, D, F bằng cách sử dụng Chương trình Y thì tất cả đều bằng nhau, hiển thị theo thứ tự ACEBDF chứ không phải ABCDEF.

Về câu hỏi cuối cùng: Chương trình giữ nguyên trạng thái của chúng và do đó, giá trị của đồng phục, trong suốt cuộc đời của chúng, trừ khi bạn liên kết lại chúng. Nhưng đồng phục là theo trạng thái chương trình, có nghĩa là nếu bạn có hai đồng phục có cùng tên và loại trong các chương trình khác nhau, các giá trị sẽ không được chuyển từ chương trình này sang chương trình khác.

+0

"Điều gì trong hai tùy chọn tốt hơn phần lớn phụ thuộc vào những gì những người làm bóng" - Nhiệm vụ là đơn giản - kết xuất với texturing, mà không có bất kỳ hiệu ứng (chỉ một số phải có hiệu ứng đổ bóng). –

+0

Nếu một số là rất đơn giản và một số có hiệu lực, sau đó tôi sẽ có một shader đơn giản chỉ với texturing (giả sử openg gl 2.x hoặc cao hơn) và một cho mỗi lớp có hiệu lực. Nhưng thật khó để đánh giá mà không biết nhiều hơn. Nó có lẽ sẽ không quan trọng nhiều trong bức tranh lớn. Trừ khi bạn có vấn đề về hiệu suất và biết đó là vì những thay đổi của tiểu bang, chỉ cần làm những gì thuận tiện hơn. – haffax

+1

Đồng phục có thể được chia sẻ giữa các chương trình bằng cách sử dụng đối tượng đệm đồng nhất (xem ví dụ. [Đồng phục được chia sẻ] (http://arcsynthesis.org/gltut/Positioning/Tut07%20Shared%20Uniforms.html)) – stativ

Các vấn đề liên quan