2015-08-13 22 views
5

Bằng cách viết một bộ lọc video mà xử lý dữ liệu hình ảnh/khung trong hệ thống (không Video) bộ nhớ, làm cho đồ họa 2D, nên cross-platform (ít nhất Windows, Linux & OSX) và hoạt động rất nhanh, tôi đã xem qua các trình kết xuất khác nhau, như Cairo, AGG và nhiều dự án khác. Tôi không muốn có yêu cầu GPU, do đó, tập trung của tôi là về dựng hình phần mềm cho đến nay.thời gian thực 2D render vào bộ nhớ hệ thống

Đáng tiếc Cairo có thể trở nên rất chậm trên những con đường phức tạp & gradient và sản xuất lỗi hình học xấu xí bởi các đoạn đường nhỏ, AGG còn chậm quá vì thiếu tối ưu đòi hỏi rất nhiều công việc do người sử dụng, các dự án khác chỉ trả lại đến cửa sổ hoặc hiệu suất không quan trọng đối với họ. Blend2D khiến tôi tò mò nhưng mất thời gian để trưởng thành.

Bây giờ tôi hỏi tôi: tôi có nên chỉ hiển thị cho một framebuffer OpenGL và thực hiện công cụ 2D-to-3D bằng thư viện hình học hay không, hãy thử thách để phát triển trình kết xuất phần mềm từ đầu (được tăng tốc bằng SIMD, , vv) hoặc tôi đã bỏ lỡ một thư viện phù hợp với tôi?

Đẩy tất cả đồ họa liên quan đến GPU luôn đáng giá vì chuyển dữ liệu giá rẻ sang & từ bộ nhớ video những ngày này, ngay cả với hình ảnh 1080p hoặc lớn hơn?

+0

Cảm ơn bạn đã đề cập đến Blend2D, không có nhiều người biết về dự án này. Nó sẽ cung cấp 3-10 lần nhanh hơn dựa trên phần mềm rendering so với Cairo/Qt. – Petr

Trả lời

1

Phương án thay thế cho OpenCV có thể là SDL. Có ít nhất một hướng dẫn và tài liệu hướng dẫn cụ thể về streaming video data to the hardware. Tất nhiên, bạn sẽ phải viết lại bộ lọc của bạn trong glsl để có được khả năng tăng tốc tốt.

Điều đó có vẻ như vấn đề của bạn có thể hưởng lợi nhiều hơn từ giải pháp tính toán GPU như OpenCL hoặc Cuda. Trong trường hợp này, không có kết xuất đồ họa, thay vào đó bạn gửi dữ liệu của mình đến hạt nhân GPU và lấy lại dữ liệu khi nó được xử lý. Hoặc có thể gửi nó đến OpenGL/DirectX (bộ nhớ video có thể được tái sử dụng như kết cấu khá dễ dàng mà không mất hiệu năng) để hiển thị. Nếu bạn không muốn di chuyển vượt ra ngoài api OpenGL, bạn cũng có thể sử dụng một bóng mờ tính toán . Hoạt động giống như một trình đổ bóng truyền thống trừ khi nó tính toán trong một đường chuyền, nhưng với một vài ràng buộc và hạn chế bổ sung.

1

Một CPU máy tính để bàn điển hình có 4 lõi xử lý đang chạy ở 2,5GHz. A modern desktop GPU (vào khoảng năm 2010) có 48 đến 480 shader chạy ở 1.4GHz. Vì vậy, về sức mạnh xử lý nguyên liệu, GPU có thể xử lý đồ họa nhanh gấp 7 đến 70 lần so với CPU.

Đối với băng thông truyền, hình ảnh 1080p là 1920x1080 pixel, tốc độ khung hình là 30 khung hình/giây và pixel là 4 byte (32 bit). Vì vậy, tổng số băng thông xe buýt cần thiết để xử lý 1080p trong thời gian thực là

1920 x 1080 x 30 x 4 = 248 MB/s 

Băng thông của khe PCI Express 2.0 x16 là 8000 MB/s. Có nghĩa là tốc độ truyền CPU sang GPU không phải là vấn đề.

Vì vậy, để trả lời câu hỏi của bạn: Có, đẩy mọi đồ họa liên quan đến GPU luôn đáng giá, ngay cả với hình ảnh 1080p hoặc lớn hơn.

+0

Cảm ơn, đã trả lời cụm từ cuối cùng của tôi. Tôi vẫn muốn hiển thị ngoại tuyến (có thể cung cấp phần mềm phụ trợ phần cứng và phần cứng), bạn có thể thêm một số chi tiết vào câu hỏi chung của mình không? – Youka

0

Bạn đã thử OpenCV chưa?

Nó cung cấp cả phần mềm và trình kết xuất phần cứng với huge library các chức năng được tối ưu hóa cao để xử lý và hiển thị hình ảnh theo thời gian thực.

+0

OpenCV phù hợp với các hoạt động trên toàn bộ hình ảnh, như phân tích, hậu xử lý, ghi âm, v.v. Những thứ khác là đồ chơi, bao gồm chức năng vẽ và trình bao bọc OpenGL. Để dựng hình 2D nghiêm túc, Cairo đã làm tốt hơn. Hơn nữa, nó phụ thuộc rất lớn vào bộ lọc video "nhỏ" ở cuối. – Youka

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