2013-07-17 30 views
8

Tôi không thể tìm thấy điều này ở bất kỳ đâu trong tài liệu OpenGL. Xin lỗi nếu nó đã được trả lời trước đó. Nhưng câu hỏi của tôi là nếu tôi sao chép điểm ảnh từ một FBO này sang FBO khác và mỗi pixel có nhiều (không cần thiết cùng số) của tệp đính kèm màu và nếu mặt nạ của tôi là GL_COLOR_BUFFER_BIT, tệp đính kèm màu (GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, .... GL_COLOR_ATTACHMENTN) sao chép? Tất cả bọn họ? Nếu có, điều gì sẽ xảy ra nếu các FBO này có số lượng bộ đệm màu khác nhau gắn với chúng?Liệu glBlitFramebuffer sao chép tất cả các tệp đính kèm màu nếu mặt nạ GL_COLOR_BUFFER_BIT được chỉ định

Giả sử rằng có 2 FBOs rằng đang bị ràng buộc theo cách này:

glBindFramebuffer(GL_READ_FRAMEBUFFER, fbo1); 
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fbo2); 

Lưu ý rằng fbo1 có 2 file đính kèm màu sắc và fbo2 có 4 file đính kèm màu sắc.

Vậy làm cách nào để glBlitFrameBuffer ghi các tệp đính kèm màu trong trường hợp này?

Trả lời

13

A chỉframebuffer color blitting operation sẽ đọc từ current glReadBuffer cho GL_READ_FRAMEBUFFER, và nó sẽ chỉ ghi vào the glDrawBuffers định cho GL_DRAW_FRAMEBUFFER. Vì vậy, nó không phải về các chấp trước; đó là về đọc và vẽ bộ đệm của hai framebuffers.

+1

Cảm ơn Nicol. Tôi đã nhận thức được điều đó. Câu hỏi của tôi vẫn còn giữ. Vì lợi ích của làm cho câu hỏi rõ ràng hơn, sau đây là 2 FBOs rằng đang bị ràng buộc theo cách này: \t ** glBindFramebuffer (GL_READ_FRAMEBUFFER, fbo1); ** \t ** glBindFramebuffer (GL_DRAW_FRAMEBUFFER, fbo2); ** fbo1 có 2 tệp đính kèm màu và fbo2 có 4 tệp đính kèm màu. Vì vậy, làm thế nào để glBlitFrameBuffer sao chép tập tin đính kèm màu trong trường hợp này? – viktorzeid

+4

@kvikram: "* Tôi đã biết điều đó. *" Không, bạn đã không và bạn vẫn không. Những gì bạn không nắm bắt được là sự khác biệt giữa "glReadBuffer hiện tại" và "framebuffer * * liên kết với GL_READ_FRAMEBUFFER". Như tôi đã nói, nó không phải về các phần đính kèm *; đó là về việc đọc và vẽ các bộ đệm * trong * các bộ đệm khung. –

+3

Cảm ơn Nicol. Tôi nghĩ bạn đã hiểu được sự hiểu biết của tôi. Bước đầu tiên là chọn các FBO để đọc/vẽ: \t glBindFramebuffer (GL_READ_FRAMEBUFFER, fbo1); \t glBindFramebuffer (GL_DRAW_FRAMEBUFFER, fbo2); và sau đó đề cập rõ ràng các bộ đệm màu để đọc/vẽ glReadBuffer (GL_COLOR_ATTACHMENT0); glDrawBuffer (GL_COLOR_ATTACHMENT3); và sau đó thực hiện thao tác blit: \t glBlitFramebuffer ..? Điều này sẽ sao chép bộ đệm trong tập tin đính kèm màu 0 từ fbo1 vào bộ đệm trong tập tin đính kèm màu3 trong fbo2? – viktorzeid

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