API kết xuất phần mềm của Windows là gì?


7

Chúng tôi thường sử dụng OpenGL hoặc DirectX để làm việc với GPU. Nếu tôi muốn sử dụng CPU để kết xuất đồ họa 2D / 3D, nó hoạt động như thế nào và tôi có thể sử dụng API nào cho nó trên Windows?

Tôi biết không có lợi ích gì trong việc sử dụng CPU cho đồ họa khi GPU tồn tại, nhưng tôi vẫn muốn hiểu cách thức hoạt động của nó.


1
Thực sự có một lợi ích. Đôi khi, quá trình rasterization trên CPU có thể giúp loại bỏ tắc nghẽn nếu bạn bị ràng buộc nhiều GPU.
RandyGaul

Câu trả lời:


7

GDI (Giao diện thiết bị đồ họa) là trình kết xuất phần mềm trong Windows. Về cơ bản, bất kỳ nền tảng ngôn ngữ / thời gian chạy nào trong Windows không được tăng tốc GPU đều sẽ sử dụng GDI dưới mui xe ở một số cấp độ. Mặc dù Java AWT có thể sử dụng GDI trực tiếp thông qua mã C mà thời gian chạy Java được viết, nhưng một cái gì đó như Flash chạy trong Chrome sẽ OTOH sẽ sử dụng GDI nếu máy tính để bàn không tăng tốc GPU, so với DirectX nếu có.

Tôi biết rằng không có lợi ích gì khi sử dụng CPU cho mục đích này, mà chỉ để hiểu hoạt động.

Không có gì. Có thể dễ dàng hơn rất nhiều khi chỉ đơn giản là vẽ các đường, pixel và hình ảnh, hơn là biết được các chương trình đồ họa dựa trên GPU. Nếu bạn có ý định viết mã riêng để truy cập trực tiếp vào GDI, có thể kiểm tra lib gdiplus, như được nêu trong hướng dẫn này . Chúc may mắn!

EDIT : Để chính xác, cũng có thể đáng chú ý rằng có các triển khai CPU của OpenGL; Mesa là ví dụ phổ biến. Vì vậy, nói đúng ra, OpenGL không loại trừ kết xuất phần mềm. Nhưng đó chỉ là giá trị đề cập nếu bạn thực sự muốn trở thành nhà mô phạm!


Không đúng khi tất cả các mã bản vẽ không tăng tốc GPU sẽ sử dụng GDI ở một số mức. WARP tồn tại để các ứng dụng và vỏ hệ điều hành có thể được mã hóa theo Direct3D 11 và biến đổi một cách duyên dáng thành kết xuất phần mềm nếu được yêu cầu. Chẳng hạn, bạn sẽ không tìm thấy GDI trong các ứng dụng "hiện đại" của Windows 8.
Trillian

5

Trên thực tế, bắt đầu với Windows 7, Direct3D 11 là câu trả lời của bạn. Tất nhiên, API mặc định sử dụng GPU nếu bạn có, nhưng bạn có thể tạo một thiết bị Direct3D nhắm vào Nền tảng Rasterization nâng cao của Windows (WARP) , có nghĩa là một trình raster phần mềm hiệu suất cao hỗ trợ API Direct3D. Bạn không nên mong đợi hiệu năng ở bất cứ nơi nào gần bằng GPU, nhưng nó sẽ khá tốt khi có quá trình raster CPU vì Windows tồn tại để hỗ trợ các hệ thống mà không cần tăng tốc phần cứng. Direct3D cũng cung cấp trình rasterizer tham chiếu phần mềm, nhưng nó chỉ được thiết kế cho chính xác và rất chậm.

Để biết thêm chi tiết về các trình raster Direct3D 11, hãy xem bảng liệt kê D3D_DRIVER_TYPE .

Chỉnh sửa: Nhưng nó có thể chạy Crysis? Đúng!


2

Tôi sẽ không nhanh chóng nhảy vào kết luận "không có lợi". Mặc dù GPU rất nhanh trong việc xử lý các hình tam giác, nhưng không phải tất cả các hình ảnh đều được thực hiện bằng cách sử dụng rasterization tam giác!

Ví dụ, các trình kết xuất dựa trên voxel-octree (được sử dụng, ví dụ, trong y học, để trực quan hóa quét CT) thường sử dụng CPU đa lõi và viết các pixel thô dựa trên các thuật toán hoàn toàn khác nhau. Điều đó cũng có thể đúng với một số thuật toán raytracing.

Nói chung, cách đơn giản nhất để kết xuất bằng CPU là xuất dữ liệu sang, ví dụ, tệp BMP. Bạn cũng có thể sử dụng OpenGL để tạo cửa sổ và chỉ cần ghi dữ liệu pixel thô vào kết cấu và hiển thị trên toàn màn hình.


1
+1 Điểm rất thích hợp về raytracing ... Mặc dù nói đúng ra, đây là một nhận xét, không phải là một câu trả lời;) Hãy ghi nhớ cho lần tới, hoặc bạn có thể bị hạ bệ bởi đám đông giận dữ, đang kêu la.
Kỹ sư

@NickWiggill này, tôi đã đề cập đến kết xuất thành kết cấu OGL; Tôi có thể giải thích về điều đó, tôi đoán.
Bartek Banachewicz

Ngoài ra, có những ứng dụng mà bạn có thể muốn rasterize các thứ trong phần mềm song song với bất cứ điều gì GPU đang làm. Ví dụ, độ phân giải thấp của cảnh cho việc loại bỏ tắc.
TravisG

@TravisG hm, âm thanh đó xen vào. Gần như muốn hỏi một câu hỏi khác :)
Bartek Banachewicz
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.