2013-08-03 27 views
12

Tôi có một đối tượng framebuffer, trong đó tôi sử dụng Multi Target Rendering trên N texture kết hợp với nó. Tại một thời điểm nhất định, tôi muốn xóa nội dung của một số kết cấu đó, nhưng không phải tất cả chúng. Nếu tôi gọiChỉ có thể xóa một số họa tiết nhất định trong bộ đệm khung với hiển thị đa mục tiêu?

glClearColor(0.0, 0.0, 0.0, 0.0); 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

mọi kết cấu được liên kết với FBO sẽ bị xóa (tôi có đúng không?). Có cách nào để thực hiện việc này trên các bộ đệm/họa tiết vẽ cụ thể không?

Trả lời

16

GL_COLOR_BUFFER_BIT trong the glClear call sẽ xóa tất cả active draw color buffers, như được chỉ định qua glDrawBuffers. Vì vậy, bạn có thể thay đổi các bộ đệm vẽ trước khi thực hiện một rõ ràng.

Nhưng đó là trạng thái không cần thiết thay đổi. Bạn có thể simply call glClearBuffer, số này sẽ clear a particular buffer.

+0

Cảm ơn bạn. Việc sử dụng thích hợp của glClearBufferfv là gì? Có phải glClearBufferfv (GL_COLOR_ATTACHEMENT0, 0, và màu [0]) không? (trong đó màu là mảng float [4]) – darius

+2

@darius: "* glClearBufferfv *" lấy một mảng phao. Đó là những gì ["fv" luôn có nghĩa là] (https://www.opengl.org/wiki/Nomenclature#Function_suffixes). Trong trường hợp này, nó luôn luôn là 4 phao. Cũng giống như phiên bản 'iv' có 4 số nguyên đã ký (để xóa bộ đệm định dạng số nguyên) và' uiv' lấy 4 số nguyên không dấu. –

+0

Cảm ơn bạn đã liên kết! Trên thực tế, phần tôi thực sự có nghi ngờ về là hai đối số đầu tiên. Nếu tôi hiểu đúng, chúng là GLenum của bộ đệm, và vị trí của nó trong mảng đệm màu của GLenum. Vì vậy, nói chung, các công cụ như GL_COLOR_ATTACHEMENT0 + i, i – darius

0

Nó sẽ là tất cả bộ đệm. Mặc dù vậy, bạn có thể che giấu bộ đệm cho rõ ràng với glColorMask. http://www.opengl.org/sdk/docs/man/xhtml/glColorMask.xml

+1

Có hai phiên bản. Nhấp vào liên kết của tôi. Một thành phần mặt nạ cổ điển, một thành phần mặt nạ thứ hai trên mỗi bộ đệm. – starmole

+0

Cảm ơn, glColorMaski này có vẻ là một giải pháp tốt. Tại sao câu trả lời này đi một -1? – darius

+0

@darius: Đã có -1 vì OpenGL có chức năng xóa trực tiếp bộ đệm cụ thể. Mặt nạ tắt các thành phần để ngăn chặn một bộ đệm rõ ràng là công cụ sai cho công việc. –

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