Tôi có thể sử dụng bộ đệm độ sâu mặc định khi vẽ lên FBO không?


6

Làm cách nào để gắn bộ đệm độ sâu mặc định vào FBO? Làm cách nào để sử dụng bộ đệm kết xuất độ sâu được gắn vào FBO (sau khi vẽ với nó) làm bộ đệm độ sâu mặc định?

Về cơ bản tôi muốn sử dụng cùng một bộ đệm độ sâu cho cả kết xuất FBO và backbuffer.

Câu trả lời:


4

Bạn không thể.

Đây là do thiết kế. OpenGL (và các phiên bản cũ hơn của DirectX) đã được thiết kế trở lại vào thời mà các ứng dụng được cửa sổ chia sẻ theo cùng một bộ đệm khung. Điều đó có nghĩa là nếu bạn có hai cửa sổ chồng chéo, các cửa sổ sẽ cố gắng sử dụng các pixel chính xác giống nhau từ bộ đệm màu, độ sâu và stprint. Các hệ thống cửa sổ xử lý vấn đề này thông qua hoạt động mặt nạ được mã hóa cứng.

Nói cách khác, bạn không sở hữu bộ đệm độ sâu mặc định, không thể thay đổi bộ đệm độ sâu mặc định và không thể đọc đáng tin cậy từ bộ đệm độ sâu mặc định trong API OpenGL.

Đặt cược tốt nhất của bạn là chỉ thực hiện tất cả kết xuất của bạn trong một FBO và sau đó sử dụng một kết cấu để đưa hình ảnh cuối cùng vào FBO mặc định.


Bạn có ý nghĩa gì bằng cách đáng tin cậy? Trong thực tế, bạn có thể vừa đọc và ghi vào bộ đệm độ sâu mặc định bằng cách sử dụng glReadPixels (định dạng được đặt thành GL_DEPTH_COMPONENT) và glDrawPixels (định dạng được đặt thành GL_DEPTH_COMPONTENT và gọi glColorMask (GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE bộ đệm màu). Tuy nhiên, điều này có thể không phải là phương pháp hiệu quả và cập nhật nhất.
JBeurer

Không phải tất cả bộ đệm khung mặc định có thể có dữ liệu hợp lệ, do quyền sở hữu chung và mặt nạ. Trên tất cả các máy tính để bàn tổng hợp modem, nó sẽ chỉ hoạt động, nhưng API GL không yêu cầu hoặc thậm chí không mong đợi nó.
Sean Middleditch
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.