2012-03-27 39 views
9

Từ một vài ví dụ tôi đã thấy trên mạng, gl_FragData [0] được giả định là một bộ đệm màu. Tôi cố gắng để tìm thấy ý nghĩa của từng chỉ số thành gl_FragData và đi qua đoạn này từ OpenGL cuốn sách ngôn ngữ Shading (cuốn sách màu cam)Gl_FragData [0] luôn là bộ đệm màu?

gl_FragData là một mảng có thể được gán các giá trị được viết vào một hoặc nhiều offscreen đệm . Kích thước của mảng này là phụ thuộc thực hiện và có thể được truy vấn với glGet với hằng số biểu tượng là GL_MAX_DRAW_BUFFERS . Các bộ đệm ngoài màn hình được được sửa đổi là kết quả của việc ghi các giá trị vào gl_FragData trong một trình tạo đoạn mã phân tách được chỉ định với glDrawBuffers. Giá trị được viết vào gl_FragData [0] cập nhật bộ đệm đầu tiên trong danh sách được chỉ định trong cuộc gọi tới glDrawBuffers, giá trị được viết thành gl_FragData [1] cập nhật bộ đệm thứ hai trong danh sách, v.v.

Nó không được chỉ định rằng giá trị 0 của gl_FragData luôn là bộ đệm màu. Nếu có đặc điểm kỹ thuật như vậy, tôi có thể tìm thấy nó ở đâu? Nếu không, thực hành bình thường khi viết cho gl_FragData là gì?

Trả lời

9

Nó không phải là bộ đệm màu. Nhưng nếu đó không phải là bộ đệm màu thì đó là không có gì là.

Mảng đầu ra gl_FragData đề cập đến các giá trị được đặt bởi glDrawBuffers. Và khi sử dụng FBO, các giá trị bạn chuyển đến hàm này chỉ có thể là GL_COLOR_ATTACHMENTn hoặc GL_NONE. Trong đó, như trạng thái tên, là bộ đệm màu.

Vì vậy, đó là bộ đệm màu hoặc là GL_NONE.

Để triển khai GL ES không cung cấp glDrawBuffers (nghĩa là không triển khai NV_draw_buffers), nó được định nghĩa là mặc dù chỉ số 0 được đặt thành GL_COLOR_ATTACHMENT0.

Đó là ngớ ngẩn của ES 2.0 cho phép khả năng nhiều file đính kèm mà không thực sự cung cấp một cách để làm cho đến hơn một trong số họ ...

+0

Tôi cho rằng glDrawBuffers không có sẵn trong OpenGL ES. Trong trường hợp đó FBO ngầm gọi nó vào một thời điểm nào đó? – Jayesh

+0

'glDrawBuffers' (không nhầm lẫn với' glDrawBuffer', lựa chọn rất thông minh của tên ...) là một phần của ARB_draw_buffers, đó là lõi OpenGL 2.0. Vì OpenGL ES 2.0 được xác định tương đối so với OpenGL 2.0, nên bao gồm hàm đó. – Damon

+0

@Damon: Về mặt kỹ thuật, ['glDrawBuffer'] (http://www.opengl.org/wiki/GLAPI/glDrawBuffer) được định nghĩa theo thuật ngữ' glDrawBuffers'; nó chỉ là một hình thức hạn chế hơn (đặt chỉ mục 0 cho bộ đệm cho và tất cả những người khác vào 'GL_NONE'). Nhưng không có trong GL ES 2.0. –

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