2010-11-13 16 views
7

मैं दो बनावट में पढ़ने के लिए एक शेडर प्राप्त कर सकता हूं लेकिन आउटपुट के लिए ऐसा लगता है कि केवल gl_FragColor है। क्या एक शेडर से दो अलग-अलग बनावट प्रस्तुत करने का कोई तरीका है? मैं प्रसंस्करण और जीएल ग्राफिक्स पुस्तकालय बीटीडब्ल्यू का उपयोग कर रहा हूँ।क्या जीएलएसएल आउटपुट एक ही समय में दो/एकाधिक बनावट कर सकता है?

उत्तर

4

हां, आप gl_FragData को लिख सकते हैं, जो आउटपुट की एक सरणी है (आकार आपके कार्यान्वयन पर निर्भर करता है)। या जीएल के नए संस्करणों के साथ, gl_FragColor और gl_FragData दोनों को बहिष्कृत किया गया है और आप लिखने के लिए खंड के शेडर के लिए अपने out चर घोषित करते हैं। एकाधिक आउटपुट बफर के लिए कई ऐसे out वर्र्स घोषित करें।

+0

धन्यवाद। मैं एक कोड उदाहरण देखना चाहता हूं कि जीएलएसएल में यह कैसे किया जाएगा और मेजबान आवेदन के लिए शायद कुछ छद्म कोड हो सकता है यदि यह सही शब्द है। – Moss

+1

वास्तव में, मैंने इसे स्वयं समझ लिया। मुझे बस शीर्ष पर "vec4 color1, color2" अलग-अलग कहना था और ऐसा लगता है कि मैं स्वचालित रूप से उन बनावटों की सरणी से लिंक कर रहा हूं जो मैं पहले से ही पास कर रहा था। और फिर उन चर को शून्य मुख्य() के भीतर कहीं भी सेट करें। – Moss

+1

क्या यह OpenglES 2.0 में समर्थित है? –

0

मुझे नहीं पता कि यह वही है जो आप करने की कोशिश कर रहे हैं, लेकिन Frame Buffer Objects (FBOs) के साथ आप एक साथ कई रंग बफर आकर्षित कर सकते हैं।

शेडर के भीतर, हालांकि, यह अभी भी होगा जैसे आप एक टुकड़ा लिख ​​रहे हैं। यही है, शेडर इस बात से अनजान है कि एफबीओ के कितने अनुलग्नक हैं।

0

हां। हम कर सकते हैं। लेकिन ध्यान दें कि gl_FragData अब जीएलएसएल 4.0 में समर्थित नहीं है। के रूप में स्थान निर्दिष्ट करें:

glBindFragDataLocation(programHandle, 0, "FragColor"); 

.....

मुझे आशा है कि आप GLSL 4.0 छायांकन भाषा रसोई की किताब की किताब पढ़ सकते हैं।

+0

मुझे लगता है कि स्पष्ट स्थानों को 'glbindFragDataLocation' पर पसंद किया जाता है – RecursiveExceptionException

संबंधित मुद्दे