2012-05-06 6 views
10

मैं बस वजन की एक सरणी को स्टोर करना चाहता हूं जिसे प्रत्येक खंड गणना की आवश्यकता होती है।जीएलएसएल (ओपनजीएल ईएस 2.0) में निरंतर सरणी को कैसे परिभाषित किया जाए?

यह:

float weights[5] = float[5](3.4, 4.2, 5.0, 5.2, 1.1); 

बस इस फेंकता है:

ERROR: 0:30: ']' : syntax error syntax error 
ERROR: 0:30: ';' : syntax error syntax error 

उत्तर

17
OpenGL ES SL 1.0 spec, पैरा 4.1.9 Arrays (पी 24।) से

:

पर सरणियों आरंभ के लिए कोई तंत्र नहीं है एक शेडर के भीतर से घोषणा का समय।

ध्यान दें कि यह किया गया है जानबूझकर बाहर छोड़ दिया। this post के अनुसार, ओपनजीएल ईएस 2 के लिए ओपनजीएल ईएस एसएल संस्करण OpenGL SL 1.2 पर आधारित है। एक ही पैराग्राफ (पी। 20) शामिल हैं:

सरणी सरणी कंस्ट्रक्टर्स से गठित initializers हो सकता है:

 float a[5] = float[5](3.4, 4.2, 5.0, 5.2, 1.1); 
     float a[5] = float[](3.4, 4.2, 5.0, 5.2, 1.1); // same thing 
+0

हाँ, लेकिन ऐसा लगता है कि यह इसे const arrays के लिए कर सकता है, इसे आज़माएं! –

+0

@Stefan तो आप gl es sl 1.0 में एक कॉन्स सरणी प्रारंभ कर सकते हैं? –

+0

@ विक्टर सेहर मैंने चश्मे का हवाला दिया है। कार्यान्वयन का समर्थन करने वाली सुविधाओं का उपयोग न करें, लेकिन सख्ती से कवर नहीं हैं। कोड काम नहीं कर सकता है। यहां दूसरे उत्तर पर रेटो कोराडी की टिप्पणी भी देखें। –

1
precision highp float; 

const float a[5] = float[5](3.4, 4.2, 5.0, 5.2, 1.1); 

यह एंड्रॉयड किटकैट संस्करण (ओपन ES 2.0) के साथ काम कर रहा है।

+4

आपके डिवाइस में क्या जीपीयू है? ऐसा करने के लिए एक शेडर कंपाइलर बग की तरह दिखता है, क्योंकि ईएस 2.0 स्पेक स्पष्ट रूप से कहता है: "शेडर के भीतर से घोषणा समय पर सरणी शुरू करने के लिए कोई तंत्र नहीं है।" कुछ कंपाइलर त्रुटियों की रिपोर्ट किए बिना ES 2.0 शेडर्स में ईएस 3.0 सुविधाओं की अनुमति देने के बारे में काफी उदार हैं। समस्या यह है कि एक ही कोड अलग-अलग विक्रेताओं से जीपीयू वाले उपकरणों पर असफल हो जाएगा। –

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