जीएलएसएल: मैं एक फ्लोट को इंट में कैसे डाल सकता हूं?


40

एक जीएलएसएल टुकड़ा shader में मैं एक floatमें डालने की कोशिश कर रहा हूँ int। संकलक एक त्रुटि उठाता है:

ERROR: 0:60: '=' :  cannot convert from 'mediump float' to 'highp int'

मैं की शुद्धता बढ़ाने की कोशिश की int:

mediump float indexf = floor(2.0 * mixer);
highp int index = indexf;

लेकिन कोई फायदा नहीं हुआ।

मैं intठीक से कैसे डालूं?


1
भविष्य के संदर्भ के लिए, आपको बेहतर उत्तर मिलेगा यदि आप स्टैक ओवरफ्लो में सामान्य प्रोग्रामिंग प्रश्न पूछते हैं। stackoverflow.com - समुदाय की प्रतिक्रिया के आधार पर यह प्रश्न वैसे भी वहाँ माइग्रेट हो सकता है।
Ricket

पुनर्व्याख्या करने वाली जातियों के लिए, अब जैसे कार्य हैं floatBitsToInt
jozxyqk

जवाबों:


41

इसे इस्तेमाल करे:

highp int index = int(indexf);

मैंने इसे यहां पाया ।


यह भी ध्यान दें कि फ्लोट को इंट में डालने से यह स्वचालित रूप से फ़्लोर हो जाता है (कम से कम किसी भी कार्यान्वयन में मैंने कभी देखा है) इसलिए फर्श पर आपका कॉल अनावश्यक होना चाहिए।
Ricket

6
अधिकांश भाषाओं में राउंडिंग मोड ट्रंकट / राउंड-टू-जीरो है, जो पॉजिटिव नंबर्स के लिए फ्लोर के बराबर है लेकिन नेगेटिव नंबर्स के लिए नहीं। मुझे याद नहीं है कि यह GLSL पर लागू होता है, लेकिन मुझे आश्चर्य होगा अगर यह नहीं होता है।

@ जो यह एक दिलचस्प तथ्य है जिसके बारे में मैंने कभी नहीं सोचा था, और मैंने सिर्फ जावा परीक्षण मामले की पुष्टि की।
Ricket

4
क्या यहाँ हाईप महत्वपूर्ण है? (ए इंटीजर पर)
लीन पेलेटियर

धन्यवाद, इसने मेरे मामले में भी काम किया। क्या आप उस संदर्भ को अपडेट कर सकते हैं जो आपने डाला है, क्योंकि पेज मौजूद नहीं है?
बोरा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.