2012-02-29 18 views
5

मैं एक समारोह को जीएलएसएल में किसी अन्य समारोह के लिए तर्क के रूप में उपयोग करने का एक तरीका ढूंढ रहा हूं। नियमित सी में, फ़ंक्शन पॉइंटर को फ़ंक्शन तर्क के रूप में पास करके अनुकरण किया जा सकता है। ऐसा लगता है कि अन्य भाषाएं (जैसे एचएलएसएल) अब उच्च-स्तरीय संरचनाओं जैसे उच्च-स्तरीय संरचनाओं से निपटने के तरीके प्रदान करती हैं, या उन्हें clever use of HLSL structures के साथ अनुकरण कर सकती हैं। दुर्भाग्य से मैं अब के लिए जीएलएसएल के साथ फंस गया हूं, और मुझे उच्च-आदेश कार्यों को अनुकरण करने का कोई तरीका नहीं मिल रहा है। क्या वर्तमान में यह वास्तव में असंभव है (4.2) जीएलएसएल? या क्या मुझे कुछ चालाक चाल याद आ रही है? मैं क्या हासिल करने की कोशिश कर रहा हूँ कीजीएलएसएल में दूसरा ऑर्डर फ़ंक्शन?

सामान्य उदाहरण:

int f(someType f2, int i) { 
    return f2(i); 
} 
+0

और आपको प्राप्त करने के लिए, एक शेडर में इस तरह की (शायद महंगा) संकेत की आवश्यकता है ...? –

+0

इस तथ्य के अलावा कि इस प्रकार का अमूर्त उपयोग करने के लिए मीठा होगा, मेरे पास व्यावहारिक समस्या निम्न है: मेरे पास एक फ़ंक्शन f है जो पैरामीटर पी (चलो कहता है, एक int) पर स्विच करता है, और एक और फ़ंक्शन f2 कहता है , जो प्रकृति स्विच मूल्य पर निर्भर करती है। एक तर्क के रूप में f2 को पारित करने में सक्षम होने से मुझे स्विचिंग के बिना सीधे कॉल करने की अनुमति मिलती है, क्योंकि मेरे आवेदन के संदर्भ में, मुझे पता है कि एफ को कॉल करते समय वास्तव में कौन सा फ़ंक्शन कॉल करना है। मुझे वास्तव में पता नहीं है कि यह संभव है, न ही इसका क्या खर्चा होगा, लेकिन मुझे लगता है कि 100-मामले स्विच पर जाना शायद बदतर है। –

+0

https://en.wikipedia.org/wiki/Defunctionalization – sigfpe

उत्तर

4

मैं एक तरह से GLSL में एक और कार्य करने के लिए एक तर्क के रूप में एक समारोह का उपयोग करने के लिए देख रहा हूँ।

संक्षिप्त उत्तर: आप नहीं कर सकते।

जीएलएसएल में आपको इस तरह की कार्यक्षमता की सबसे नज़दीकी चीज़ shader subroutines मिल जाएगी। और यह केवल बाहरी ओपनजीएल एपीआई को चुनने के लिए अनुमति देता है कि कौन सा सबराउटिन उपयोग करने के लिए, शेडर स्वयं ही नहीं।

तो बस switch/case स्टेटमेंट करें और इसे प्राप्त करें।

+0

सलाह के लिए धन्यवाद। हालांकि, यह मुझे मारता है, कैसे जीएलएसएल पॉइंटर-कम सी की तुलना में उच्च स्तरीय संरचना प्रदान करने में सक्षम नहीं है ... –

+0

@AlexRepain: जीएलएसएल को ऐसे वातावरण में भागना है जो * रिकर्सन * का भी समर्थन नहीं करता है। आप फ़ंक्शन पॉइंटर्स को काम करने की अपेक्षा क्यों करेंगे? –

+0

मुझे फ़ंक्शन पॉइंटर्स को काम करने की उम्मीद नहीं है, मैं पूछ रहा हूं कि इसमें कोई कामकाज है या नहीं। इसके अलावा, मुझे वास्तव में प्रति सेकंड रिकर्सन की आवश्यकता नहीं है, मैं बस कुछ कॉलबैक-पासिंग की तलाश में हूं। तथ्य यह है कि यह एक रिकर्सन बनाने के लिए बाहर निकल सकता है और फिर मेरे चेहरे पर उड़ा सकता है एक स्वीकार्य दुष्प्रभाव होगा। इसके अलावा, मैं नहीं देखता कि क्यों पर्यावरण पुनरावृत्ति को संभालने में सक्षम नहीं था (लगता है कि पूंछ-कॉल रिकर्सन), अगर यह 'थोड़ी देर' संभाल सकता है ... –

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