2011-09-10 35 views
10

Tôi không có bất kỳ kinh nghiệm nào về lập trình đồ họa. Tôi đã nghi ngờ điều này khi tôi đọc về lập trình đồ họa.Trên Windows, OpenGL khác với DirectX như thế nào?

Từ những gì tôi hiểu, vì Windows không cung cấp DOS như truy cập phần cứng trực tiếp, DirectX đã được tạo. Điều đó có nghĩa là DirectX là cách duy nhất để truy cập trực tiếp phần cứng (ish). Liệu tôi có sai?

Nếu tôi không sai, thì OpenGL phải được triển khai bằng cách sử dụng DirectX hoặc trên DirectX.

Vậy điều đó không có nghĩa là trên Windows OpenGL thực sự là DirectX?

Xin lưu ý rằng nghi ngờ của tôi bị hạn chế với những gì tiêu đề nói, chính xác, và tôi không quan tâm đến lý do tại sao là một tốt hơn so với khác vv

Trả lời

22

Từ những gì tôi hiểu, bởi vì Windows không cung cấp hệ điều hành DOS như truy cập phần cứng trực tiếp, Direct X được tạo ra.

Bạn nói đúng là Windows không cung cấp DOS như truy cập phần cứng trực tiếp. Trên thực tế không có hệ điều hành nào có bộ nhớ bảo vệ.

Và có, DirectX được tạo để cung cấp API để tăng tốc truy cập vào một số loại phần cứng nhất định. DirectX là a API để truy cập phần cứng tăng tốc, không phải THE (một và chỉ) một.

Điều đó có nghĩa Direct X là cách chắc chắn duy nhất để truy cập trực tiếp phần cứng (ish). Liệu tôi có sai?

Bạn sai vì không có gì và không ai ngăn bạn triển khai một tuyến đường khác để truy cập phần cứng tăng tốc. Các phần mềm chịu trách nhiệm cho việc truy cập kênh vào phần cứng được gọi là trình điều khiển. Trình điều khiển chạy trong chế độ riêng, có nghĩa là, bảo vệ không gian địa chỉ không áp dụng cho chúng. Đó là, bởi vì trình điều khiển phải có khả năng giao tiếp với phần cứng.

Trình điều khiển giao tiếp với các chương trình thông thường, được gọi là Không gian người dùng thông qua API. API có thể được tiêu chuẩn hóa, sau đó có thể được chỉ định chặt chẽ hoặc chúng có thể hoàn toàn bị bắt buộc.

DirectX là một API được chỉ định, đặc tả này được Microsoft viết ra.

OpenGL theo cách tương tự là một API, nhưng thay vì được chỉ định bởi một thực thể duy nhất, trong một số biểu mẫu được chuẩn hóa với sự cộng tác của một số cộng tác viên.

Một ví dụ cho API sở hữu là lướt qua 3Dfx, phần lớn được lấy cảm hứng từ OpenGL. Trong thực tế, có một trình bao bọc tương thích được gọi là "minigl" triển khai tập hợp con OpenGL cần thiết cho động cơ Half-Life 1 để hoạt động trên các hệ thống 3Dfx/Glide.

Nhà phát triển trình điều khiển của nhà cung cấp GPU tuân thủ các đặc điểm của API, viết trình điều khiển cho DirectX, OpenGL hoặc một số giao diện riêng tư. Mỗi API này cung cấp quyền truy cập vào trình điều khiển và do đó đến phần cứng. Và có thể có nhiều API cho một tài nguyên. Trình điều khiển có thể triển khai DirectX 3D, OpenGL và bất kỳ thứ gì khác song song và cung cấp cho tất cả người dùng không gian.

Vì vậy, không, OpenGL không được xây dựng trên nền DirectX nếu giao hàng bằng trình điều khiển GPU. Windows Vista và trên tàu với mô phỏng OpenGL-1.4 được xây dựng trên nền DirectX, nhưng không hỗ trợ các trình đổ bóng, đối tượng đệm đỉnh và tất cả các còi và chuông khác. Ngay sau khi bạn cài đặt trình điều khiển GPU có hỗ trợ OpenGL, điều này thay thế hoàn toàn mô phỏng OpenGL-1.4 với thực thi cấp thấp thực tế.

+0

Cảm ơn bạn đã trả lời rất nhiều thông tin. – Ken

+0

+1 Để cung cấp câu trả lời chính xác ngoài câu trả lời khác không chính xác nhưng không hoàn toàn không đầy đủ. –

+0

Là một sang một bên: minigl là cho động cơ 1 trận động đất, mà HL1 sử dụng ... – Goz

3

DirectX là một lớp để sử dụng các chức năng phần cứng của card đồ họa . Kể từ Windows Vista, việc triển khai OpenGL mặc định (bản do Microsoft cung cấp) sử dụng DirectX, vì vậy OpenGL thực sự chậm. Tuy nhiên, các nhà sản xuất card đồ họa cung cấp trình điều khiển với OpenGL bằng cách sử dụng trực tiếp bằng cách sử dụng card đồ họa và không đi qua directX, do đó, các buổi biểu diễn phải giống nhau. Nếu bạn có một card đồ họa tích hợp với trình điều khiển kém, OpenGL có thể sử dụng DirectX.

+0

Cảm ơn bạn đã trả lời. – Ken

2

Vấn đề là nhiều hơn rằng có quyền truy cập phần cứng trực tiếp và không có lớp trừu tượng thuận tiện. Các nhà cung cấp phần mềm không muốn dành tất cả thời gian viết hỗ trợ cho mỗi thẻ mới để họ đẩy Microsoft triển khai sự trừu tượng.

Sự lựa chọn là OpenGL hoặc tạo ra một lớp mới, nhiều lý do khác nhau dẫn đến thứ hai.

Vista + có thể chuyển đổi OpenGL thành DirectX và ngược lại Wine có thể chuyển đổi DirectX thành OpenGL.

+0

Tôi không hiểu câu đầu tiên. Làm thế nào là truy cập có thể, thông qua chế độ thi đua 16 bit? – Ken

+0

@Ken DirectX xuất hiện với Windows 95, tức là khi có giới hạn bộ nhớ bảo vệ. Bạn thường có các trình điều khiển nhỏ như [MiniGLX] (http://en.wikipedia.org/wiki/MiniGLX). –

+0

Aah OK. Cảm ơn vì điều đó. – Ken

2

Không, cả hai ngôn ngữ đều nói trực tiếp với phần cứng cạc đồ họa thông qua trình điều khiển được nhà sản xuất thẻ viết để cả hai đều cung cấp cùng cấp truy cập phần cứng.

Windows hỗ trợ DirectX trực tiếp, nó là một phần của hệ điều hành cần thiết cho hiệu ứng hiển thị khá đẹp - hỗ trợ OpenGL khá hạn chế, chúng chỉ hỗ trợ v1.1 (chúng tôi đang dùng phiên bản 4). để sử dụng một số phạm vi bổ sung (chẳng hạn như glew) hoặc các nhà sản xuất card đồ họa OpenGL SDK.

Về mặt khả năng. DirectX được kiểm soát cẩn thận bởi MSFT - vì vậy tất cả các hệ thống DirectX sẽ hoạt động giống nhau. OpenGL cho phép các nhà sản xuất card đồ họa thêm các mức độ riêng của họ, vì vậy họ có thể tạo ra hiệu suất cao hơn bằng cách thêm các tính năng cụ thể vào phần cứng (ít nhất là theo lý thuyết). OpenGL cũng là nền tảng chéo, do đó mã Windows OpenGL của bạn sẽ chạy ở bất kỳ nơi nào (theo lý thuyết)

Trong thực tế, các trình điều khiển OpenGL duy nhất trên Windows không hoàn toàn vô dụng là NVidia - các ứng dụng OpenGl hiệu suất cao trên các cửa sổ yêu cầu Thẻ NVIDIA. Điều này có nghĩa là thật dễ dàng để lập trình OpenGL trên Windows - bạn chỉ cần dính vào tài liệu NVidias.

+0

Cảm ơn bạn đã trả lời. – Ken

+0

"GLEW" không phải là tiện ích OpenGL. Đó là thư viện giúp việc sử dụng các tiện ích mở rộng OpenGL được cung cấp bởi nhà sản xuất GPU dễ dàng hơn. Đoạn cuối cùng là hoàn toàn thiên vị và cũng có tiền. –

+0

GLEW không phải là một mở rộng ARGL_EXT mở nhưng nó là một phần mở rộng cho các khả năng của OpenGL trên các cửa sổ. ps Chỉ cần thử và chạy chương trình OpenGL của bất kỳ sự phức tạp nào trên chipset đồ họa nhúng Intel –

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