2011-07-12 20 views
6

मैं तीन GLSL मिल गया है मेरी शीर्ष शेडरओपन शेडर नहीं कर सकते बाँध विशेषता

attribute highp vec4 Position; 
attribute mediump vec4 UV; 
attribute mediump vec3 Normal; 

कि

glBindAttribLocation(program, 0, "Position"); 
glBindAttribLocation(program, 1, "Normal"); 
glBindAttribLocation(program, 2, "UV"); 

हालांकि का उपयोग कर बाध्यकारी IM में जिम्मेदार बताते हैं, मैं एक त्रुटि

हो रही है BindAttributeLocation अनुरोध से मेल खाने के लिए वर्टेक्स शेडर विशेषता 'सामान्य' नहीं मिला।

यह स्थिति और यूवी विशेषताओं को क्यों ढूंढ सकता है लेकिन सामान्य विशेषता नहीं।

किसी भी मदद की अत्यधिक सराहना की जाएगी क्योंकि मैं बहुत उलझन में हूं।

चीयर्स

संपादित करें: मैं एंड्रॉयड OpenGLES20 पर एक ही मुद्दा है। मैं नमूना कोड जोड़ देंगे: वर्ग के बाकी सरकारी GLSurfaceView ट्यूटोरियल

public void onSurfaceCreated(GL10 glUnused, EGLConfig config) { 

    String mVertexShader = "uniform mat4 uMVPMatrix;\n " + 
      "attribute vec4 aPosition;\n " + 
      "attribute vec4 aNormal; \n " + //this is the line I added 
      "attribute vec2 aTextureCoord;\n " + 
      "varying vec2 vTextureCoord;\n " + 
      "void main() {\n " + 
      "gl_Position = uMVPMatrix * aPosition;\n" + 
      " vTextureCoord = aTextureCoord;\n" + 
      "}\n"; 

    mProgram = createProgram(mVertexShader, mFragmentShader); // cf tutorial 
    if (mProgram == 0) { 
     return; 
    } 
    initShaderHandles(); //initializes the rest of the handles (cf tutorial) 

    // my little additional code 
    int maNormalHandle = GLES20.glGetAttribLocation(mProgram, "aNormal"); 
    Log.d("ATTRIB LOCATION Normal: ", maNormalHandle + ""); 
    checkGlError("glGetAttribLocation normal"); 
    if (maNormalHandle == -1) { 
     throw new RuntimeException(
       "Could not get attrib location for normal"); 
    } 
    // ...and we crash. 

} 
+0

मुझे यह जोड़ना चाहिए कि मैंने यह सुनिश्चित करने के लिए शेडर का परीक्षण किया है कि संशोधन सही तरीके से काम कर रहे हैं, लेकिन फिर भी सामान्य विशेषता – user346443

+0

को बाध्य नहीं कर सकते हैं आपको यह त्रुटि कहां से मिलती है? – kvark

+0

मुझे यह इंगित करना चाहिए कि मेरे पास Android OpenGLES20 पर "कभी-कभी" एक ही समस्या है। ट्यूटोरियल लें, नमूना शेडर कोड के लिए "सामान्य", "असामान्य", "मानक", "जो कुछ भी" जोड़ें, इसे ठीक से बांधने और इसे क्रैश करने का प्रयास करें। –

उत्तर

0

क्या आप वाकई शेडर करने के लिए सही सूचकांक गुजर रहे हैं है? आप

glGetAttribLocation(program,"Normal"); 
+3

* लिंकिंग से पहले आप जो भी इंडेक्स * चाहते हैं उसे पास कर सकते हैं। या आप * लिंकिंग के बाद * (ऑटो-असाइन) इंडेक्स * के लिए पूछ सकते हैं। कोई "सही सूचकांक" नहीं है। – kvark

15

बुला आप शेडर में सामान्य उपयोग कर रहे हैं वरना यह GLSL-संकलक द्वारा बाहर अनुकूलित किया जा सकता द्वारा सूचकांक हो रही कोशिश कर सकते। अगर यह कुछ और है तो कृपया हमें अपने शेडर्स दिखाएं

+1

इसके लिए जो कुछ भी है, उसके लिए मैंने एंड्रॉइड मुद्दे का सही उत्तर दिया है। धन्यवाद रिकार्ड। –

+1

यह स्पष्ट लगता है, और स्वीकार किया जा सकता है, जवाब, क्योंकि विशेषता का उपयोग शेडर में नहीं किया जाता है और निष्क्रिय एटिब्यूट/वर्दी दूर करने का अनुकूलन काफी आम व्यवहार है। –

+2

यह मेरे लिए था। – bobobobo

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