2012-06-13 13 views
8

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

int[] maxTextureSize = new int[1]; 
GLES20.glGetIntegerv(GLES20.GL_MAX_TEXTURE_SIZE, maxTextureSize, 0); 

तो मैं अगले एल्गोरिथ्म, जो मुझे किसी भी सतह या रेंडरर बनाए बिना अधिकतम बनावट आकार देता है के साथ आया था। यह सही तरीके से काम करता है, इसलिए मेरा सवाल यह है कि यह सभी एंड्रॉइड डिवाइसों के साथ काम करेगा, और यदि कोई भी बग स्पॉट कर सकता है, तो बस मामले में।

public int getMaximumTextureSize() 
{ 
    EGL10 egl = (EGL10)EGLContext.getEGL(); 
    EGLDisplay display = egl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY); 

    // Initialise 
    int[] version = new int[2]; 
    egl.eglInitialize(display, version); 

    // Query total number of configurations 
    int[] totalConfigurations = new int[1]; 
    egl.eglGetConfigs(display, null, 0, totalConfigurations); 

    // Query actual list configurations 
    EGLConfig[] configurationsList = new EGLConfig[totalConfigurations[0]]; 
    egl.eglGetConfigs(display, configurationsList, totalConfigurations[0], totalConfigurations); 

    int[] textureSize = new int[1]; 
    int maximumTextureSize = 0; 

    // Iterate through all the configurations to located the maximum texture size 
    for (int i = 0; i < totalConfigurations[0]; i++) 
    { 
     // Only need to check for width since opengl textures are always squared 
     egl.eglGetConfigAttrib(display, configurationsList[i], EGL10.EGL_MAX_PBUFFER_WIDTH, textureSize); 

     // Keep track of the maximum texture size 
     if (maximumTextureSize < textureSize[0]) 
     { 
      maximumTextureSize = textureSize[0]; 
     } 

     Log.i("GLHelper", Integer.toString(textureSize[0])); 
    } 

    // Release 
    egl.eglTerminate(display); 
    Log.i("GLHelper", "Maximum GL texture size: " + Integer.toString(maximumTextureSize)); 

    return maximumTextureSize; 

} 
+1

क्या आप वाकई जीएल बनावट का आकार ईजीएल पीबीफर आकार से बंधे हैं? क्या यह कहीं ईजीएल 1.0 spec में निहित है? –

उत्तर

6

पीबीयूएफएफईआर अधिकतम आकार दुर्भाग्यवश अधिकतम बनावट आकार से संबंधित नहीं है (लेकिन यह वही हो सकता है)।

मेरा मानना ​​है कि अधिकतम बनावट आकार प्राप्त करने का सबसे अच्छा तरीका जीएल संदर्भ बनाना है (उसी संदर्भ पर जिस पर आप वास्तव में इस बनावट का उपयोग करेंगे) और GL_MAX_TEXTURE_SIZE के लिए पूछें।

इसके पीछे एक मजबूत कारण है: ogl ड्राइवर को सतह (और संदर्भ) निर्माण से पहले वर्तमान प्रक्रिया के लिए प्रारंभ नहीं किया गया है। कुछ ड्राइवर प्रारंभिक पर अंतर्निहित एचडब्ल्यू/एसकेयू पहचान निष्पादित करते हैं और एचडब्ल्यू क्षमताओं के आधार पर अधिकतम सतह आकार की गणना करते हैं।

इसके अलावा, अधिकतम बनावट आकार को संदर्भ (और ईजीएल कॉन्फिग संदर्भ पर बनाया गया था) के आधार पर भिन्न होने की अनुमति है।

और एक और बात: eglGetConfigs आपको सभी EGLconfigs, डिफ़ॉल्ट रूप से, सॉफ़्टवेयर एंड्रॉइड रेंडरर, या ओपनजीएल ES 1.1CM HW ड्राइवर से थीस (यदि लक्ष्य प्लेटफ़ॉर्म पर 1.1 और 2.0 के लिए अलग-अलग ड्राइवर हैं) प्राप्त करेंगे। ड्राइवर्स ग्राफिक्स स्टैक में स्वतंत्र हैं और विभिन्न अधिकतम-एस वापस कर सकते हैं।