Trong ứng dụng của tôi, tôi chụp những bức ảnh của nội dung của một QGLWidget cho hai mục đích:Làm thế nào để có đáng tin cậy QGLWidget chụp
- Không vẽ lại cảnh mọi lúc khi chỉ có một thay đổi lớp phủ, sử dụng một pixmap cache thay vì
- Lat người dùng chụp ảnh màn hình của các ô cụ thể (cảnh 3D)
Điều đầu tiên tôi đã thử là grabFrameBuffer()
. Nó là tự nhiên để sử dụng chức năng này như cho các ứng dụng đầu tiên, những gì hiện đang hiển thị trong widget là chính xác những gì tôi muốn cache. VẤN ĐỀ: Trên một số phần cứng (ví dụ: đồ họa tích hợp Intel, Mac OS X với đồ họa GeForce), hình ảnh thu được không chứa nội dung màn hình hiện tại, nhưng nội dung trước đó. Vì vậy, nếu cảnh sẽ được rút ra hai lần, trên màn hình bạn thấy bản vẽ thứ hai, trong hình ảnh bạn nhìn thấy bản vẽ đầu tiên (mà phải là nội dung của backbuffer?).
Điều thứ hai tôi đã thử là renderToPixmap()
. Điều này hiển thị bằng cách sử dụng paintGL()
, nhưng không sử dụng paint()
. Tôi có tất cả nội dung của mình ở paint()
, vì tôi sử dụng chức năng vẽ của Qt và chỉ một đoạn nhỏ của mã sử dụng GL gốc (beginNativePainting()
, endNativePainting()
).
Tôi cũng đã thử khả năng chụp nhanh QWidget thông thường (QPixmap :: fromWidget(), hoặc nó được gọi), nhưng có bộ đệm khung GL là màu đen.
Bất kỳ ý tưởng nào về cách giải quyết vấn đề và có được mô tả đáng tin cậy về cảnh hiện đang được vẽ?
Tôi đã kết thúc làm việc với FBO. – ypnos