2012-12-05 16 views
15

मैंने इस विषय पर कई बार देखा है और इससे मुझे भ्रमित करना शुरू हो गया है। मुझे उम्मीद है कि कोई मुझे एक निश्चित उत्तर दे सकता है! :)ओपनजीएल ईएस 2.0 समर्थन?

मुझे लगता है कि ब्लंट होना चाहिए: एंड्रॉइड एमुलेटर ओपनजीएल ईएस 2.0 का समर्थन करता है? मैंने कुछ लोगों को यह कहते हुए देखा है "हाँ, लेकिन आपको कुछ सेटिंग्स बदलनी है।" और मैंने यह भी देखा है "नहीं, यह इसका समर्थन नहीं करता है, अवधि।" समस्या के प्रयास और सही करने के लिए मैंने जो किया है, यहां कुछ त्रुटि संदेश भी शामिल हैं।

पहले, मैं AndroidManifest.xml संशोधित निम्नलिखित कोड को रोकने के लिए: फिर

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

<uses-sdk 
    android:minSdkVersion="15" 
    android:targetSdkVersion="17" /> 

, जब मैं अपने GLSurfaceView का दृष्टांत करना चाहते हैं, मैं यह दृष्टांत के लिए कोड के इस क्रम का उपयोग करें:

super(context); 

setEGLContextClientVersion(2); 

setRenderer(new MyRenderer()); 
setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY); 

फिर, हर जगह मैंने देखा कि आपको एवीडी प्रबंधक में जाना होगा, एमुलेटर का चयन करें, "हार्डवेयर" पर जाएं, "जीपीयू इम्यूलेशन" जोड़ें और बूलियन को "हां" में सेट करें।

What does my Android 2.2 emulator have the hardware table?:

Screenshoot of my Android 4.2 emulator window.

क्या अजीब बात यह है कि मैं अपने AVD प्रबंधक में एक और एमुलेटर जिनमें से मैं "हार्डवेयर" तालिका की क्या ज़रूरत है: हालांकि, यहां मैं क्या देखते हैं जब मैं मेरा देखो है

और बस आप को दिखाने के लिए मैं वास्तव में क्या कर रहा हूँ, यहाँ कुछ कोड है कि कुछ सामान मैं ओपन ES 2.0 में क्या करना चाहते हैं करता है (मैं मुख्य रूप से Android के अपने ट्यूटोरियल से यह मिल गया):

int vertexShader = loadShader(GLES20.GL_VERTEX_SHADER, vertexShaderCode); 
int fragmentShader = loadShader(GLES20.GL_FRAGMENT_SHADER, fragmentShaderCode); 

program = GLES20.glCreateProgram(); 
GLES20.glAttachShader(program, vertexShader); 
GLES20.glAttachShader(program, fragmentShader); 
GLES20.glLinkProgram(program); 

मैं अपने कोड को ओपनजीएल ईएस 1.0 के साथ काम पर वापस नहीं बदलना चाहता क्योंकि इसमें बहुत सारे सिरदर्द की आवश्यकता होगी और यदि मैं इससे बच सकता हूं, तो मैं करूँगा।

अंत में, जब मैं अपना प्रोग्राम चलाने का प्रयास करता हूं, तो प्रोग्राम विंडो के साथ बंद हो जाता है: "दुर्भाग्य से, बंद हो गया है।" यह वही है LogCat ने मुझे बताया है:

12-05 06:16:27.165: E/AndroidRuntime(936): FATAL EXCEPTION: GLThread 81 
12-05 06:16:27.165: E/AndroidRuntime(936): java.lang.IllegalArgumentException: No config chosen 
12-05 06:16:27.165: E/AndroidRuntime(936): at android.opengl.GLSurfaceView$BaseConfigChooser.chooseConfig(GLSurfaceView.java:874) 
12-05 06:16:27.165: E/AndroidRuntime(936): at android.opengl.GLSurfaceView$EglHelper.start(GLSurfaceView.java:1024) 
12-05 06:16:27.165: E/AndroidRuntime(936): at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1401) 
12-05 06:16:27.165: E/AndroidRuntime(936): at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1240) 

मैं कहेंगे मैं कर रहा हूँ नहीं सब पर इस पर एक विशेषज्ञ हैं और इस ओपन के साथ पहला अनुभव है। अगर किसी के पास कोई फिक्स है कि मैं इसे ठीक करने के लिए क्या कर सकता हूं, तो मैं हमेशा आभारी रहूंगा। :) धन्यवाद!

उत्तर

16

मैं आपके प्रश्न पर हाँ कह सकता हूं। एंड्रॉइड एमुलेटर OpenGL ES 2.0 का समर्थन करता है। मैंने cocos2d-x v.2 (जो ओपनजीएल ES 2.0 का उपयोग करता है) के साथ एक ऐप बनाया है। मेरे पास समान फैटल एक्सेप्शन था: उसी स्टैक के साथ जीएल थ्रेड 81 त्रुटि। मैं रेंडरर setRenderer सेट करने से पहले

gLSurfaceView.setEGLConfigChooser(8 , 8, 8, 8, 16, 0); 

जोड़कर इस समस्या हल हो जाती:

gLSurfaceView.setCocos2dxRenderer(new Cocos2dxRenderer()); 

अब मैं एंड्रॉयड एमुलेटर पर मेरे एप्लिकेशन चला सकते हैं।

मेरा प्रश्न और उत्तर https://stackoverflow.com/a/13719983/307547 पर देखें। इस लिंक पर मेरी पोस्ट AVD सेटिंग्स के साथ स्क्रीनशॉट शामिल हैं:

http://www.cocos2d-x.org/boards/6/topics/12563?r=19274#message-19274

+2

कृपया ध्यान दें कि हार्डवेयर GPU त्वरण Android 4.0 और ऊपर के साथ AVDs पर ही काम करता है है। एंड्रॉइड 2.2 के साथ एवीडी में ओपनजीएल ईएस 2.0 – keaukraine

+1

तेज नहीं होगा, मैं आज एंड्रॉइड डिवाइस पर इस कोड का परीक्षण करने की कोशिश करूंगा। मैं यह सुनिश्चित करना चाहता हूं कि यह कोड वास्तविक उपकरणों पर काम करेगा। – Petr

+0

मैंने फ्लाई डिवाइस पर इस कोड का परीक्षण किया, और यह काम करता है। कोकोस 2 डी-एक्स फोरम के लोगों ने उल्लेख किया कि यह कोड केवल डिवाइस पर नहीं, बल्कि एमुलेटर पर चलाना चाहिए। देखें http://www.cocos2d-x.org/boards/6/topics/12563?r=19457#message-19457 – Petr

4

एक ही समस्या मिल गया। मूल छोटी गाड़ी कोड:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Log.d(this.getClass().getName(), "Into onCreate Draw triangle"); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 

    if (detectOpenGLES20()){ 
     Log.d("GLES20", "GL ES 2.0 Supported..............!"); 
    } else { 
     Log.d("GLES20", "GL ES 2.0 Not Supported...............!"); 
    } 

    view = new GLSurfaceView(this); 
    view.setEGLContextClientVersion(2); 
    view.setEGLConfigChooser(true); 
    view.setRenderer(new TriangleRenderer(view)); 
    setContentView(view); 
} 


द्वारा हल:।

एक)

view.setEGLConfigChooser(8, 8, 8, 8, 16, 0); 

के साथ इस कोड लाइन

view.setEGLConfigChooser(true); 

की जगह ख) ग्रहण के माध्यम से -gpu on स्थापना -> भागो के रूप में ---> लक्ष्य ---> अतिरिक्त एम्यूलेटर कमांड लाइन विकल्प

उपरोक्त चर्चा करने के लिए एक छोटे से अधिक जोड़ना:।
वहाँ दो थे कोड के ऊपर टुकड़ा

गंभीर अपवाद के साथ काम करते हुए विभिन्न अपवाद संदेशों मैं भर में आया था: GLThread 75 java.lang.IllegalArgumentException: नहीं कॉन्फ़िगरेशन configSpec से मेल

और

java.lang.IllegalArgumentException: नहीं config चुना

एक अधिक विस्तृत मामले http://on-android-opengl2.blogspot.in/2013/05/android-opengl-es-20-emulator.html

5

पर सुनाई अध्ययन मैं बस के लिए किसी भी नई लाइनों को जोड़ने के बिना समस्या का समाधान होने मेरी सोर्स कोड। एवीडी-मैनेजर में मैंने अपने एमुलेटर डिवाइस के लिए "होस्ट जीपीयू का उपयोग करें" सेट किया है। अब बिल्कुल ठीक मेरे Geforce GTX पर एमुलेटर डिवाइस पर 570

एपीआई स्तर से काम करता है 16 है, और प्रकट में मिनट-एसडीके 15.

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