2011-03-27 26 views
18

Trong trường hợp nào tôi muốn có một tập tin đính kèm renderbuffer trong một OpenGL FBO, thay vì một tập tin đính kèm kết cấu, bên cạnh bộ đệm khung mặc định? Như, một tập tin đính kèm kết cấu dường như linh hoạt hơn nhiều.OpenGL FBO renderbuffer hoặc kết cấu attatchment

+2

Tôi đã tự hỏi về điều này trong một thời gian dài. Tôi đoán là có tồn tại các chương trình kế thừa dựa trên PBuffer, và một số người không sẵn sàng thích ứng với một khái niệm khác (ví dụ viết cho kết cấu thay vì viết thành PBuffer và sao chép), do đó, chức năng PBuffer chính xác được triển khai lại đầu của FBO để khuyến khích họ sử dụng FBO. Tôi thực sự không thể nghĩ ra bất kỳ lý do nào khác, bởi vì các file đính kèm renderbuffer không hữu ích chút nào (cố gắng hết sức để tránh nói "chậm phát triển"). Không có lý do ngay lập tức rõ ràng lý do tại sao rendering để kết cấu nên được bất kỳ chậm hơn (hoặc bất kỳ khác nhau). – Damon

Trả lời

20

Kết cấu cung cấp nhiều tính năng hơn cho bạn (lấy mẫu !, nhiều định dạng) và do đó có nhiều khả năng bị mất hiệu suất.

Câu trả lời rất đơn giản: sử dụng Kết cấu bất cứ nơi nào bạn phải lấy mẫu từ bề mặt (không có lựa chọn thay thế).

Sử dụng Hiển thị bộ đệm ở bất cứ đâu bạn không cần lấy mẫu. Người lái xe có thể hoặc không thể quyết định lưu trữ dữ liệu pixel của bạn hiệu quả hơn dựa trên ý định bày tỏ của bạn về việc không lấy mẫu. Bạn có thể sử dụng GL blitting sau đó để thực hiện điều gì đó với kết quả.

+2

Cuối cùng, một câu trả lời tốt, thẳng thắn cho câu hỏi đơn giản này. Cảm ơn. Có vẻ như nhiều người không có gì khác ngoài những bình luận mơ hồ về chủ đề này (nói cách khác - họ không biết). –

+0

* Mẫu từ bề mặt * có nghĩa là gì? Bạn có thể đưa ra nhiều ví dụ cụ thể hơn khi cần phải lấy mẫu và khi nào không? – bluenote10

+1

@ bluenote10 bằng cách "lấy mẫu" tôi có nghĩa là truy vấn các giá trị cụ thể của kết cấu trong trình đổ bóng. Xem "Chức năng tra cứu kết cấu" tại https://www.opengl.org/wiki/Sampler_%28GLSL%29 để biết thêm thông tin. Ví dụ, nếu bạn cần làm mờ cái gì đó, trình đổ bóng của bạn thường sẽ lấy mẫu một vùng pixel và cân chúng, vì vậy bạn cần một nguồn kết cấu. Trong trường hợp khác, nếu bạn chỉ muốn vẽ một cái gì đó với kiểm tra độ sâu, bạn có thể sử dụng bộ đệm hiển thị độ sâu. – kvark

1

Mở rộng câu hỏi sang OpenGL | ES, một lý do khác để sử dụng RenderBuffers thay vì kết cấu cũng là kết cấu có thể không được hỗ trợ trong một số cấu hình và ngăn bạn xây dựng một FBO hợp lệ. Tôi đặc biệt nghĩ về các họa tiết độ sâu, không được hỗ trợ nguyên bản trên một số phần cứng, ví dụ nVidia Tegra 2/3.

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