2008-10-18 53 views
5

Tôi cần hiển thị rất nhiều (hàng chục nghìn) hình ảnh ngoài màn hình bằng OpenGL.
Tôi đang chạy trong Windows và sử dụng QT làm khung. giải pháp có thể là cửa sổ duy nhất, nó không thực sự quan trọng.OpenGL: Hiển thị nhanh trên màn hình

Từ những gì tôi đã tìm thấy sử dụng Google có một số tùy chọn để làm This article này mà dường như khá ngày đề nghị một vài cách khác nhau, trong đó những người liên quan là:

  • Windows cụ thể - Sử dụng CreateDIBSection và bằng cách nào đó liên kết kết cấu với nó.
  • Sử dụng tiện ích mở rộng pbuffers mà tôi dường như được hỗ trợ trên thẻ của mình.

This thread (tin nhắn 6) cho thấy một cách cụ thể QT để làm điều này bằng QGLWidget::renderPixmap

Câu hỏi của tôi là - cái nào sẽ là cách nhanh nhất? pbuffers có vẻ là đặt cược an toàn nhất vì nó được đảm bảo được thực hiện trên phần cứng nhưng không sử dụng phương thức CreateDIB cũng đi qua phần cứng? Còn phương pháp QT thì sao? dường như có một số vấn đề tạo bối cảnh với vấn đề này. chắc chắn tôi sẽ không muốn tạo ra một bối cảnh mới cho mọi hình ảnh tôi tạo ra.
Có ai có kinh nghiệm tốt với điều này không?


EDIT: Trả lời nhận xét -
Tôi có một cảnh liên tục mà không thay đổi chút nào và tôi đang làm cho nó từ nhiều quan điểm khác nhau. Bây giờ các hình ảnh quay trở lại người dùng và sẽ được xử lý bởi CPU. Có thể trong tương lai chúng sẽ được xử lý trên GPU.

+0

Các hình ảnh đến từ đâu? Bạn có dựng lại cùng một cảnh lặp đi lặp lại, có lẽ từ các quan điểm khác nhau không? Hay bạn đang tải kết cấu sau khi kết cấu từ đĩa? Và hình ảnh đi đâu? Vào một tính toán gpu? Vào đĩa? Câu trả lời của bạn tùy thuộc vào chi tiết. – ejgottl

+0

Đã trả lời trong câu hỏi – shoosh

+0

Có thể liên kết này có thể hữu ích, ở đây tôi đã sử dụng các đối tượng khung hình chữ nhật với 'QGLFrameBuffer' http://stackoverflow.com/questions/19934102/qglwidget-and-fast-offscreen-rendering/ – linello

Trả lời

9

Sử dụng FBO. Đó là nhanh chóng, di động và đẹp hơn nhiều để sử dụng hơn pbuffers.

EDIT: Đối với hiệu suất tốt nhất, vẽ xen kẽ giữa hai FBOs khác nhau:

  1. Render đến A
  2. Render đến B
  3. đọc lại từ A và xử lý nó
  4. Render đến A
  5. Đọc lại từ B
  6. Goto 2

Bằng cách này bạn có thể đọc lại một FBO và sau đó xử lý nó trong khi GPU kết xuất với một cái khác song song.

+0

Có tôi ' đã chỉ đọc về FBO. xen kẽ giữa hai âm thanh như một ý tưởng hay. Bạn có biết nếu có sự khác biệt giữa kết xuất với một Texture và kết xuất với RenderBuffer không? nhanh hơn? – shoosh

+0

Hiển thị cho trình kết xuất đồ họa là thích hợp hơn; nếu có thể nhanh hơn và chắc chắn sẽ không chậm hơn. –

+0

liên kết PBO tốt http://www.songho.ca/opengl/gl_pbo.html –

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