2011-10-27 62 views
6

Tôi hiện đang lập trình một ứng dụng hình ảnh khoa học bằng cách sử dụng OpenGL.Hiển thị xác định OpenGL giữa nhà cung cấp GPU

Tôi muốn biết hiển thị OpenGL (trong thời hạn truy xuất pixel từ FBO) có được xác định đầy đủ khi mã của tôi (C++/OpenGL và GLSL đơn giản) được thực thi trên phần cứng khác không (ATI vs NVidia, thế hệ và hệ điều hành khác nhau)?

Chính xác hơn, tôi muốn cần mọi chính xác cùng pixel đệm tôi chạy mã của tôi trên bất kỳ phần cứng (mà có thể chạy GLSL cơ bản và OpenGL 3.0) ...

Là có thể? Có một số lời khuyên tôi nên xem xét?

Nếu không thể, có một thương hiệu video card cụ thể nào đó (có lẽ là Quadro?) Có thể làm điều đó trong khi thay đổi hệ điều hành máy chủ không?

+1

Xác định? Tất nhiên! Bất biến trên trình điều khiển hoặc thậm chí phần cứng? Có lẽ không (ít nhất là không được bảo đảm). –

Trả lời

4

Từ spec OpenGL (phiên bản 2.1 phụ lục A):

Các đặc điểm kỹ thuật OpenGL không điểm ảnh chính xác. Do đó, nó không đảm bảo một kết hợp chính xác giữa các hình ảnh được tạo ra bởi các triển khai GL khác nhau. Tuy nhiên, đặc điểm kỹ thuật chỉ định các kết quả khớp chính xác, trong một số trường hợp, đối với các hình ảnh được tạo ra bởi cùng một triển khai.

Nếu bạn vô hiệu hóa tất cả chống răng cưa và nhắn tin, bạn có cơ hội nhận được kết quả nhất quán trên các nền tảng. Tuy nhiên, nếu bạn cần antialiasing hoặc texturing hoặc 100% pixel-perfect guarantee, chỉ sử dụng phần mềm rendering: http://www.mesa3d.org/

+0

Cảm ơn bạn rất nhiều! Bạn có nghĩ rằng tôi có thể nhận được kết quả điểm ảnh hoàn hảo chỉ sử dụng thẻ Quadro (và sử dụng cùng một cài đặt) không? – softmllx

+1

Ngay cả với phần cứng giống hệt nhau, hiển thị có thể thay đổi trên các phiên bản trình điều khiển. Đừng mong đợi việc hiển thị giống hệt nhau giữa các trình điều khiển Windows của NVidia và các trình điều khiển Linux của NVIDIA, hoặc thậm chí giữa hai phiên bản khác nhau của cùng một trình điều khiển. Và hãy nhớ rằng các cài đặt trình điều khiển có thể ghi đè lên bất kỳ ứng dụng nào yêu cầu về mặt khử răng cưa hoặc chất lượng lọc kết cấu.Tỷ lệ cược là bạn không cần hiển thị pixel hoàn hảo ở 60FPS, vì vậy bạn có thể có được bằng cách hiển thị phần cứng dưới dạng bản xem trước và hiển thị phần mềm cho kết xuất chính xác cuối cùng được lưu vào đĩa. – user57368

0

Nếu bạn đọc qua đặc tả OpenGL, có một số điều kiện xác định phải đáp ứng để thực hiện tuân thủ tiêu chuẩn, nhưng cũng có một số chi tiết thực hiện đáng kể đến nhà phát triển phần cứng/nhà cung cấp phần cứng. Trừ khi bạn kết xuất với các kỹ thuật cực kỳ cơ bản nằm dưới các danh mục xác định/bất biến (mà tôi tin rằng sẽ giữ cho bạn không sử dụng tính năng lọc texturing, antialiasing, lighting, shaders, vv), tiêu chuẩn cho phép có sự khác biệt đáng kể giữa các phần cứng khác nhau trên cùng một phần cứng.

2

Bởi "Xác định", tôi sẽ giả sử bạn có nghĩa là những gì bạn đã nói (thay vì ý nghĩa của từ đó): bạn có thể nhận được kết quả giống hệt nhau trên nhiều nền tảng.

Không. Không phải là cơ hội.

Bạn có thể thay đổi kết quả pixel mà bạn nhận được từ hiển thị chỉ bằng cách phát bằng các cài đặt trong ứng dụng trình điều khiển đồ họa của bạn. Các bản sửa đổi trình điều khiển từ cùng một phần cứng có thể thay đổi những gì bạn nhận được.

Đặc tả OpenGL có không bao giờ kết quả pixel bắt buộc hoàn hảo. Antialiasing và kết cấu lọc đặc biệt là những phần nebulous.

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