2011-12-16 15 views
8

जीएलएसएल संस्करण निर्दिष्ट करते हुए एलडब्ल्यूजेजीएल का उपयोग करते समय एक वाक्यविन्यास त्रुटि देता है। मैंने एलडब्ल्यूजेजीएल के बाहर इस मुद्दे को पुन: पेश करने की कोशिश नहीं की है। यह शेर चलाने वाले कई मैक पर हो रहा है।जीएलएसएल #version वाक्यविन्यास त्रुटि (मैक पर एलडब्ल्यूजेजीएल)

मुझे #version का उपयोग किये बिना काम करने के लिए वर्टेक्स और खंड दोनों शेडर्स मिल गए हैं। लेकिन मैं texture फ़ंक्शन का उपयोग करने जा रहा हूं, जो #version निर्देश की आवश्यकता है।

यहाँ सबसे सरल में नाकाम रहने के उदाहरण है:

#version 120 

void main() { 
    gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0); 
} 

इस टुकड़ा शेडर संकलन और glGetShaderInfoLog बुला इस त्रुटि देता है:

ERROR: 0:1: '' : syntax error #version 

कुछ और के साथ 120 की जगह, इस तरह के 110 के रूप में, यह भी एक त्रुटि देता है। उत्सुकता से, हालांकि, अगर मैं 130 या उच्चतर का उपयोग करता हूं, तो यह वही त्रुटि देता है जो वर्जन समर्थित संस्करण के बारे में शिकायत देता है। (मुझे पता है कि मेरे सिस्टम में जीएलएसएल 1.3 नहीं है, लेकिन यह अभी भी अजीब है कि यह त्रुटि तब प्रदर्शित होती है जब संकलक इस तरह अभिनय कर रहा है, यह संस्करण टैग को समझ में नहीं आता है।)

मैं एक अति राडेन के साथ मैक पर हूं एचडी 4670. GL_VERSION2.1 ATI-7.12.9 और GL_SHADING_LANGUAGE_VERSION1.20 है।

यह देखते हुए कि, मुझे कोई कारण नहीं दिख रहा है कि जीएलएसएल 1.20 अनुपलब्ध क्यों होना चाहिए। और यह वास्तव में मेरे लिए अजीब है कि यह कह रहा है कि #version एक वाक्यविन्यास त्रुटि है, क्योंकि असमर्थित जीएलएसएल संस्करण के बारे में कुछ कहने का विरोध किया गया है।

+0

आपका शेडर लोडिंग कोड कहां है? –

+0

मैं इसे एक बार में पेस्ट कर सकता हूं। (अभी मेरे फोन का उपयोग कर रहे हैं।) क्या थैब स्रोत कोड उपयोगी होगा? – rlkw1024

उत्तर

17

हल हो गया! ओपनजीएल के साथ इसका कोई लेना-देना नहीं था। मेरा फ़ाइल रीडर कोड सभी लाइन ब्रेक छोड़ रहा था। यह शेडर के शरीर में ठीक था, जिसमें अर्धविराम था। लेकिन प्रीप्रोसेसर निर्देश में इस त्रुटि से बचाने के लिए कोई अर्धविराम नहीं था।

तो इस समस्या के साथ किसी भी व्यक्ति के लिए, सुनिश्चित करें कि जिस कोड को आप वास्तव में glShaderSource में पास कर रहे हैं, उसके अभी भी इसके लाइनब्रेक हैं।

+1

बहुत बहुत धन्यवाद, आपने मेरी रात बचाई है! मैं एसडीएल और सी ++ के साथ मैक पर हूं, लेकिन इस अस्पष्ट त्रुटि संदेश के साथ ओपनजीएल मुझे एक ही बात बताने की कोशिश कर रहा था। – zubko

+0

इस तक पहुंचने का एक तरीका [यहां] (http://schabby.de/opengl-shader-example/) पाया जा सकता है।BufferedReader सीआर/एलएफ पात्रों को छोड़कर, रेखा से लाइन में शेडर स्रोत खींचता है। फिर आप स्ट्रिंगबिल्डर का उपयोग करके प्रत्येक पंक्ति में एक न्यूलाइन चरित्र को स्पष्ट रूप से दोबारा प्रस्तुत करें (उस पृष्ठ के रास्ते के बारे में 2/3 देखें)। –

+0

बहुत बहुत धन्यवाद। यह सही मुद्दा था जो मैं कर रहा था। Pesky जावा आईओ लाइन ब्रेक हटाने! – Textfield

1

वर्टेक्स और टुकड़े टुकड़े दोनों को एक ही संस्करण होना चाहिए। इसलिए यदि आप #version 120 को टुकड़े टुकड़े में जोड़ते हैं, तो आपको इसे कशेरुक शेडर में भी जोड़ना चाहिए। लेकिन यह थोड़ा अजीब बात है कि यह एक वाक्यविन्यास त्रुटि के रूप में रिपोर्ट किया गया है। शायद एक और त्रुटि है, लेकिन दोनों निश्चित रूप से एक ही संस्करण टैग होना चाहिए।

संपादित करें: यह भी ध्यान रखें कि संस्करण टैग को शेडर स्रोत कोड में पहली पंक्ति होना चाहिए (न्यूलाइन और टिप्पणियां विनिर्देशन के अनुसार ठीक होनी चाहिए, लेकिन कौन जानता है कि ड्राइवर क्या सोचते हैं)।

+0

मैंने दोनों में एक ही संस्करण का उपयोग करने की कोशिश की, लेकिन कोई भाग्य नहीं। चूंकि यह संकलन में होता है और लिंक नहीं करता है, इसलिए मुझे नहीं लगता कि शेडर्स एक दूसरे के बारे में जानते हैं। – rlkw1024

+0

@ जेरेट अपने ग्राफिक्स कार्ड के अपमानजनक विक्रेता को ध्यान में रखते हुए, यह एक ड्राइवर बग भी हो सकता है। हालांकि यह वास्तव में एक बहुत ही सरल विशेषता है और समर्थन करने में कोई समस्या नहीं होनी चाहिए, लेकिन फिर भी, यह अभी भी अति है। –

+0

मैंने jusy को GeForce 320M के साथ एक ही समस्या की पुष्टि की। तो मुझे संदेह हो रहा है कि दोनों विक्रेताओं के पास मूलभूत सुविधा में एक ही बग है। – rlkw1024

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