2010-11-13 26 views
7

Tôi có thể nhận được một shader để đọc trong hai kết cấu nhưng đối với sản lượng có vẻ như chỉ có gl_FragColor. Có cách nào để hiển thị hai họa tiết khác nhau từ một trình đổ bóng không? Tôi đang sử dụng chế biến và thư viện GLGraphics btw.GLSL có thể xuất ra hai/nhiều họa tiết cùng lúc không?

Trả lời

4

Có, bạn có thể ghi vào gl_FragData, là một mảng đầu ra (kích thước phụ thuộc vào việc triển khai của bạn). Hoặc với các phiên bản mới hơn của GL, cả gl_FragColor và gl_FragData đều không được chấp nhận và bạn khai báo các biến số out của riêng bạn cho trình đổ bóng phân đoạn để ghi vào. Khai báo nhiều out vars cho nhiều bộ đệm đầu ra.

+0

Cảm ơn. Tôi muốn xem một ví dụ mã về cách thức này sẽ được thực hiện trong GLSL và có thể một số mã giả cho ứng dụng máy chủ nếu đó là thuật ngữ đúng. – Moss

+1

Thực ra, tôi đã tự tìm ra. Tôi chỉ cần nói "thay đổi ra vec4 Color1, Color2" vv ở đầu và dường như tự động liên kết chính nó với mảng kết cấu tôi đã đi qua. Và sau đó thiết lập các biến cho một cái gì đó ở đâu đó trong void main(). – Moss

+1

Điều này có được hỗ trợ trong OpenglES 2.0 không? –

0

Tôi không biết nếu điều này là chính xác những gì bạn đang cố gắng làm, nhưng với Frame Buffer Objects (FBOs) bạn có thể vẽ nhiều bộ đệm màu cùng một lúc.

Trong trình đổ bóng, mặc dù, nó vẫn sẽ giống như thể bạn đang viết một đoạn. Nghĩa là, trình đổ bóng không biết có bao nhiêu tệp đính kèm mà FBO có.

0

Có. Chúng ta có thể. NHƯNG Lưu ý rằng gl_FragData không còn được hỗ trợ trong GLSL 4.0 nữa. Xác định vị trí như:

glBindFragDataLocation(programHandle, 0, "FragColor"); 

.....

Tôi hy vọng bạn có thể đọc cuốn sách của GLSL 4,0 che sách dạy nấu ăn ngôn ngữ.

+0

Tôi nghĩ rằng các vị trí rõ ràng được ưu tiên hơn 'glBindFragDataLocation' – RecursiveExceptionException

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