2013-02-06 27 views
7

Tôi muốn có khả năng thiết lập đồng phục qua tên thật của chúng trên các shaderCó đáng lưu vào bộ nhớ đệm vị trí đồng nhất của glsl trong mã không?

myProgram.uniform3fv("uniformVector", 0.0f, 0.1f, 1.0f); 

tôi phải đến các địa điểm bộ nhớ cache trong một số hình thức của một bản đồ?

std::map<std::string, unsigned int> // or unordered_map 

hoặc có thể OpenGL (trên máy tính để bàn) lưu trữ nội dung này, vì vậy tôi sẽ không có bất kỳ khác biệt hiệu suất nào?

Trả lời

6

Đặc tả OpenGL xác định chức năng, chứ không phải hiệu suất. Vì vậy, không có cách nào để biết cách thực hiện OpenGL cụ thể nào sẽ lưu trữ danh sách các đồng phục hoạt động hoặc nhanh như thế nào glGetUniformLocation sẽ, tương ứng với hiệu suất std::map.

Vì vậy, thực sự, điều đó tùy thuộc vào bạn. Nếu bạn muốn nhất quán, được biết đến hiệu suất, tự làm. Nếu bạn muốn có cơ hội về những thay đổi trong quá trình thực thi OpenGL, hãy truy vấn nó bất cứ khi nào bạn muốn. Cá nhân, tôi muốn nói tên mương và đi với các địa điểm. Bằng cách đó bạn nhận được hiệu suất tối đa.

+0

vì vậy trong hầu hết các trường hợp, chúng tôi không thể dựa vào các giả định (về việc triển khai trình điều khiển) và tốt hơn nên tự làm bộ nhớ đệm đơn giản như vậy. – fen

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