2012-02-27 29 views
5

मैं एंड्रॉइड के लिए पूरी तरह से सी ++ में ओपनजीएल ईएस 2.0 को लागू करने के लिए काम कर रहा हूं।एंड्रॉइड नेटिव एनडीके ओपनजीएल ईएस: अनुपूरक एपीआई

वर्तमान में हमारा प्रोग्राम परियोजना में जेएनआई या किसी भी जावा क्लास के बिना चलता है, बजाय केवल मूल सक्रियता का उपयोग करता है।

renderWorld() 
{ GLfloat vVertices[] = { 0.0f, 0.5f, 0.0f, 
          -0.5f, -0.5f, 0.0f, 
          0.5f, -0.5f, 0.0f }; 
    glClear (GL_COLOR_BUFFER_BIT); 

    glVertexAttribPointer (0, 3, GL_FLOAT, GL_FALSE, 0, vVertices); 
    glEnableVertexAttribArray (0); 

    glDrawArrays (GL_TRIANGLES, 0, 3); 
} 

Android.mk में शामिल किया गया था:

LOCAL_LDLIBS := -landroid -llog -lEGL -lGLESv1_CM -lOpenSLES -lGLESv2 

और AndroidManifest.xml में सूचित किया जाता है:

आवेदन प्रतिपादन हिस्सा खुद पर ध्यान केंद्रित, हम एक सरल विधि मिला

<uses-feature android:glEsVersion="0x00020000"></uses-feature> 

तो, प्रोग्राम किसी समस्या के साथ डीबग और संकलित करता है।

GLSurfaceView surfaceView = new GLSurfaceView(this); 
    surfaceView.setEGLContextClientVersion(2); 

हालांकि, setEGLContextClientVersion एक की तरह है: -, Android: GLES20: Called unimplemented OpenGL ES API आदेश setEGLContextClientVersion कोड सहित

error libEGL called unimplemented OpenGL ES API 

फोरम एक सुझाव जावा के लिए व्यावहारिक देता है: जब चलाने के लिए सेट, संदेश आता है जावा के लिए रैपर विधि का मतलब है।

setEGLContextClientVersion OpenGL ES देशी से संबंधित नहीं है, और देशी सी ++ ogles विकास के लिए लागू नहीं हो सकता है।

इसलिए, मैं बजाय प्रयोग किया:

const EGLint attribList[] = {EGL_CONTEXT_CLIENT_VERSION, 2,EGL_NONE}; 
mContext = eglCreateContext(mDisplay, lConfig, EGL_NO_CONTEXT,attribList); 

लेकिन त्रुटि दूर अभी तक नहीं गया है।

उत्तर

6

क्या आप असली डिवाइस (जो?) का उपयोग कर रहे हैं, या आप एम्यूलेटर (जो ओजीएल ES2 का समर्थन नहीं करता) पर हैं? यह भी सुनिश्चित नहीं है कि एक ही ऐप में GLESv1_CM और GLESv2 को लिंक करना एक अच्छा विचार है। यदि आप OpenGL ES 2.0 चाहते हैं, तो केवल GLESv2 से लिंक करें।

आपने ईजीएल संदर्भ को कैसे निष्क्रिय किया?

EGLint aEGLAttributes[] = 
{ 
    EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, // <--- OpenGL ES 2.0 
    ... 
    EGL_NONE 
}; 
... 
eglChooseConfig(m_EGLDisplay, aEGLAttributes, aEGLConfigs, 1, 
      &cEGLConfigs) 
... 
+0

धन्यवाद आदमी: आप की तरह EGL विशेषता EGL_OPENGL_ES2_BIT इस्तेमाल किया था! मैंने आपके सुझाव का पालन किया। यह समस्या हल हो गई। – ThreaderSlash